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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

更多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,如需转载请自行联系原作者


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
缓存 NoSQL 应用服务中间件
2.2.2 redis,memcached,nginx网络组件
2.2.2 redis,memcached,nginx网络组件
|
3月前
|
NoSQL Java 应用服务中间件
4.网络设计与redis、memcached、nginx组件(二)
4.网络设计与redis、memcached、nginx组件(二)
28 0
|
3月前
|
存储 NoSQL 应用服务中间件
4.网络设计与redis、memcached、nginx组件(一)
4.网络设计与redis、memcached、nginx组件(一)
76 0
|
5月前
|
负载均衡 NoSQL 应用服务中间件
redis、memcached、nginx网络组件
redis、memcached、nginx网络组件
109 0
|
1月前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
214 0
|
1月前
|
NoSQL Java 应用服务中间件
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包
|
3月前
|
NoSQL 关系型数据库 应用服务中间件
redis,memcached,nginx网络组件,网络编程——reactor的应用
目标 明白网络模块要处理那些事情 reactor 是怎么处理这些事情的 reactor 如何封装的 网络模块与业务逻辑的关系 如何优化 reactor 网络编程关注的问题
49 1
|
3月前
|
NoSQL 网络协议 应用服务中间件
redis,memcached,nginx网路组件
redis,memcached,nginx网路组件
39 0
|
8月前
|
Java 应用服务中间件 Redis
十年架构师总结:SSM+微服务+Nginx+Redis+MySQL的PDF文档
SSM 第1部分入门和技术基础 第1章认识SSM框架和Redis 第2章Java设计模式 第2部分互联网持久框架- -MyBatis 第3章认识MyBatis核心组件 第4章MyBatis配置 第5章映射器 第6章动态SQL 第7章MyBatis的解析和运行原理 第8章插件 第3部分Spring基础 第9章Spring IoC的概念 第10章装配Spring Bean 第11章面向切面编程 第12章Spring和数据库编程 第13章深入Spring数据库事务管理 第4部分Spring MVC框架 第14章Spring MVC的初始化和流程 第15章深入Spring MVC组件开发 ......
|
4月前
|
NoSQL Java 应用服务中间件
跟着腾讯T4学架构:微服务+MySQL+Nginx+Redis+容器化+虚拟机
深入理解Java虚拟机》 但要想真的深入理解虚拟机一问肯定远远不够的,但是本文中分三部分对JVM有深入的解析。

推荐镜像

更多