nginx lua redis解决saltstack下发传输文件慢的问题思路

简介:

更多saltstack的文章总结在:

http://rfyiamcool.blog.51cto.com/1030776/1357677



saltstack是个好东西,我现在很多的api接口都开始用saltstack做。有的时候会有在页面上传文件,然后推送到客户端的情况。或者是把安装配置的安装包推送到客户端。 唉, salstack下发文件慢,大家有没有头疼过,我是真的头疼过。  


其实说起来大家也没必要非要用saltstack做文件的下发,看个人的喜好,有些人会用git做,我这里只是为了解决速度的问题,git在大文件和多minion拉取文件下,也不见得快。也有哥们用saltstack rsync的组合,大家也都知道rsync分集中模式,一种是密码,一种是cs的认证,有点麻烦。

我上面说的废话,当然还是要看情况做下一步的:

如果你是下发配置文件,这个时候你要用saltstack的sls相关的功能。

如果你只是单纯下发文件,这个时候你在用saltstack的file模块,那会痛苦的,因为他有点慢。

原文:http://rfyiamcool.blog.51cto.com/1030776/1388127


说下我这这边因为saltstack文件慢的问题,在项目中的升级情况:


刚开始的时候用的是saltstack本身的文件传输,经常传大的文件,速度真的不乐观。一开是我觉得zeromq和msgpack是个很好的组合,有一次大意了,推了一个大的文件包,结果导致salt master卡死了。。。


后期我这边用tornado做下载的接口,慢慢的也开始承受不了了。

现在的模式是用socket的模式,用msgpack socket来解决,堵塞的问题是用threading线程池解决的。但是zeormq也是个高端版的socket,我这边用底层的socket对于大文件是比zeromq强,但是压力大了,还是蹦出异常。。。


现在的需求是,我需要在下载文件的时候,提交一个由master分配给他的临时key,带着这个key去下载文件。 其实方法比较的简单,比如让10个人下载这个文件,我就产生了10个临时的key,然后用saltstack api的模式,传给客户端,然后客户端拿着这个key去下载。


我现在的想法是用 nginx lua的模式,在access_by_lua里面增加redis的key的判断,当key匹配成功后,我再给他下载的地址。


这边也已经大体实现了,但是和后端的交互产生了冲突,正在解决。。。。还有一个问题是用ngx.location.capture 做子访问的时候。


1
2
3
4
res = ngx.location.capture(
        '/api/redisget' ,
        { method = ngx.HTTP_POST, body = post_from_key }
    )


原文:http://rfyiamcool.blog.51cto.com/1030776/1388127

还是那句话,你要是不想搞复杂了,就简单的用 saltstack rsync的方案就行啦。 如果想折腾,有体现高端的话,可以用用我介绍的那几种方法, sokect或者是nginx lua redis的模式。


希望官网能出一个好的方案来解决saltstack下发文件速度慢的问题。





 本文转自 rfyiamcool 51CTO博客,原文链接:

http://blog.51cto.com/rfyiamcool/1388127

,如需转载请自行联系原作者


相关文章
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
Lua的面向对象编程、协同线程与协同函数的概念和使用,以及Lua文件I/O操作的基本方法。
270 4
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
566 2
k8s学习--YAML资源清单文件托管服务nginx
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
JavaScript 应用服务中间件 PHP
nginx server 禁止特定目录下的某类文件访问
【8月更文挑战第26天】这段Nginx配置代码旨在保护`/uploads/`目录下的文件,禁止执行任何`.php`, `.html`, `.htm`, 或 `.js`等潜在有害文件,即便被访问也无法运行。取而代之的是重定向到首页。为了实现这一设置,用户需要定位到对应子域名的`.conf`配置文件中进行相应修改。若网站支持多个访问域名,则需确保在正确的`.conf`文件中实施此配置。
617 1
|
存储 监控 应用服务中间件
查看nginx日志文件
器性能和提高网站可用性。掌握日志文件的路径、查看方法和基本分析技能对于任何服务器管理员来说都是必备技能。
2008 1
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
1011 0
|
NoSQL 网络协议 应用服务中间件
redis,memcached,nginx网络组件
redis,memcached,nginx网络组件
222 0
|
应用服务中间件 Linux nginx
Nginx log 日志文件较大,按日期生成 实现日志的切割
Nginx log 日志文件较大,按日期生成 实现日志的切割
4667 0
|
监控 NoSQL 应用服务中间件
使用elk+redis搭建nginx日志分析平台(转)
logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录。其次,需要有个队列,redis的list结构正好可以作为队列使用。
1136 0

推荐镜像

更多