nginx 转发数据流文件

1.问题描述

后端服务,从数据库中查询日志,并生成表格文件返回静态文件。当数据量几兆时,返回正常,但是超过几十兆,几百兆,就会超过网关的连接超时时间30秒。

时序图

 这里面主要花费时间的地方在:

1后台服务器,将数据格式化,写到本地的文件的过程

2后台服务器将文件发送到网关,网关整体接收完

3网关将文件整体接收完后,转发给nginx

4nginx整体缓存文件后发送给浏览器

5浏览器下载从nginx发送的文件

也就是说,一个大文件,需要下载四次才能真正到达用户本地!可想而知多慢

2.解决思路

        1.优化sql查询,优化数据处理

        但是明显即使优化sql查询,优化数据处理,也快不了多少。但不是没有优化的可能。

        首先,sql查询优化,查询下时候有慢查询,查询语句是否是慢查询,索引是否有效,索引是否在where 和select中。

        2.减少文件下载的次数

        只下载一次!数据流返回,边查询,边返回,浏览器自己下载。而且这样最不一样的地方是,http请求是立马返回的,所以不存在超时的可能。

 可以看到,文件只在浏览器下载一次,后台查询数据,是每次只查询一部分数据,并在格式化后就返回,nginx也是接到一部分数据就立马返回,浏览器接到一部分数据就开始下载,让整个http请求立马结束,这样不会超时,但是文件会一直慢慢下载。

nginx配置:

location log {
proxy_pass http://server:111/log;
proxy_cache off;
proxy_buffering off;
chunked_transfer_encoding on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 300;
}
  • proxy_cache off;:这一行禁用了Nginx的代理缓存。这意味着每次请求都会直接发送到后端服务器,而不会在Nginx中缓存结果。
  • proxy_buffering off;:这一行禁用了Nginx的代理缓冲。这意味着Nginx不会预先读取请求的内容,而是在每个请求/响应循环中仅读取实际需要的数据。
  • chunked_transfer_encoding on;:这一行允许使用分块传输编码。这是一种允许不一次将所有数据发送给客户端,而是分块发送的技术。这对于大数据传输非常有用。
  • tcp_nopush on;:这一行禁止Nginx使用TCP推送(push)选项。这通常用于告诉浏览器不要缓存数据。
  • tcp_nodelay on;:这一行设置TCP的nodelay选项为on,这通常用于控制数据流是否应该立即发送。
  • keepalive_timeout 300;:这一行设置保持活动连接的超时时间为300秒。这意味着,如果客户端和服务器之间的连接在300秒内没有任何活动,连接将会关闭。

然后,前端也要将数据流接到。后端的返回也需要是数据流的形式返回,每次只返回一部分。因为涉及到前端,nginx反向代理服务器和后端服务器,所以往往需要前端和后端同事一起配合才行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/156108.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE初阶】 文件内容的读写 —— 数据流

文章目录 🌴数据流的概念🚩数据流分类 🌳字节流的读写🛫InputStream(从文件中读取字节内容)🚩实例一🚩实例二🚩利用 Scanner 进行字符读取 🛬OutputStream(向文件中写内容…

软件开发项目文档系列之八数据库设计说明书

数据库设计说明书是一个关键文档,它提供了有关数据库的详细信息,包括设计、结构、运行环境、数据安全、管理和维护等方面的内容。 1 引言 引言部分,简要介绍数据库设计说明书的目的和内容。这部分通常包括以下内容: 引言的目的…

对PySide6 say Hello(包含环境配置) ——PyQt

前言 一直想学一下python,特别是十一前抢票时达到顶峰。我正好是Qter,所以在网上找了一个教程直接学PyQt。 配置PyQt环境 当前环境 Win10Qt5.15.2 python3.11 之前安装python时好像自动安装了python的包管理工具pip,配置pyqt环境所需要安装…

博客系统-项目测试

自动化博客项目 用户注册登录验证效验个人博客列表页博客数量不为 0 博客系统主页写博客 我的博客列表页效验 刚发布的博客的标题和时间查看 文章详情页删除文章效验第一篇博客 不是 "自动化测试" 注销退出到登录页面,用户名密码为空 用户注册 Order(1)Parameterized…

非洲“支付宝”PalmPay搭载OceanBase:成本降低80%

10 月 30 日,非洲支付公司PalmPay 的核心系统搭载国产自研数据库OceanBase,正式投入使用。PalmPay 也是 OceanBase 首个非洲商业用户。 作为一家非洲领先的金融科技公司,PalmPay 于 2019 年在尼日利亚推出电子钱包应用,其功能类似…

阿里云老用户优惠服务器99元/年?良心了!

阿里云老用户优惠服务器99元/年,谁再说阿里云不好我给谁急,云服务器ECS配置为经济型e实例,2核CPU、2G内存、3M固定带宽、40G ESSD entry 系统盘,老用户优惠价99元一年,老用户可以买,当然新用户也可以买&…

R语言使用surveyCV包对NHANES数据(复杂调查加权数据)进行10折交叉验证

美国国家健康与营养调查( NHANES, National Health and Nutrition Examination Survey)是一项基于人群的横断面调查,旨在收集有关美国家庭人口健康和营养的信息。 地址为:https://wwwn.cdc.gov/nchs/nhanes/Default.aspx 既往咱们…

Tips:关于自己电脑重装python的流程

新换电脑,记录下安装python环境的流程。 1.先安装python 网上随便找教程 2.再安装pycharm https://blog.csdn.net/thefg/article/details/128881507?loginfrom_csdnhttps://blog.csdn.net/thefg/article/details/128881507?loginfrom_csdn3.再修改默认的pip为…

华锐技术何志东:证券核心交易系统分布式改造将迎来规模化落地阶段

近年来,数字化转型成为证券业发展的下一战略高地,根据 2021 年证券业协会专项调查结果显示,71% 的券商将数字化转型列为公司战略任务。 在落地数字化转型战略过程中,证券业核心交易系统面临着不少挑战。构建新一代分布式核心交易…

使用treq库下载

首先,我们需要导入treq库,这是一个用于Python的HTTP客户端库。代码如下: import treq然后,我们需要设置代理服务器。代码如下: proxy treq.ProxyManager("jshk.com.cn:8120")接下来,我们需要创…

支付宝小程序自主DIY源码系统 五分钟打造一个专属小程序 带完整搭建教程

现如今,在我们的日常生活中,小程序已经成为一种备受欢迎的应用形态。支付宝小程序自主DIY源码系统能够帮助用户快速搭建属于自己的小程序。罗峰今天来给大家分享一款支付宝小程序自主DIY源码系统 ,帮你五分钟就创建一个小程序,十分…

Jave语法的输入输出

基本语法 从键盘输入 使用 Scanner 读取字符串/整数/浮点数 在idea中这个包是自动导入的! 使用 Scanner 循环读取 N 个数字,并求取其平均值 Scanner sc new Scanner(System.in); int sum 0; int num 0; while (sc.hasNextInt()) {int tmp sc.nex…