回答
收藏
分享
举报
nginx有跨进程共享一个字典的方法吗?
提问于2020-05-18 22:44

浏览 1.4k

想在2个进程之间共享复杂的数据结构, 类似一个大json, 但需要针对某个字段修改, 

目前勉强用把json-encode之后的字符串放到shared-dict里. 但效率不太高(主要是json-encode/decode)


有其他什么替代方案吗? 主要是在lua脚本里访问.

已修改于2023-03-15 04:43



写下您的回答
发表回答
全部回答(2)

按点赞数排序

按时间排序

shared-dict(https://github.com/openresty/lua-nginx-module#lua_shared_dict)底层是用nginx slab管理的,每个块必须是序列化好的连续内存,所以复杂数据结构都需要做序列化处理。但json毫无疑问序列化速度是最慢的,你可以选用更快的序列化方案,比如protobuf

赞同

3

回复举报

回答于2020-12-07 19:06



回复陶辉
回复

用 Openresty 的 shared-dict 比较方便,而且效率非常高,线上目前用的也是这个。

    如果只是修改部分字段,可以考虑把字段拆分,

    

赞同

3

回复举报

回答于2020-05-20 16:06



回复头号游戏教父B哥
回复
提问者
张炎泼
这家伙很懒还未留下介绍~
5
文章
1
问答
7
粉丝
相关问答

1. 理论上 nginx 可以通过一些手段不用 gunicorn 这玩意。

2. 计算机世界里面的多一层的解决方案,都是是为了好管理,是为了职责清晰。

3. 某个场景下可以,不代表这个场景下这么做就好。比如,你可以去搬砖,但你没必要去搬砖,甚至说,你搬砖水平不如专业搬砖的。

举几个例子

1. 僧多粥少。nginx 可以上万并发,而正常的 python server 根本不够这么多并发。那么很简单,把nginx作为负载均衡,雨露均沾的分配请求到这些web服务器上。如果直接部署。则是把这些东西耦合在一起。没法scale。

2. 让专业的去做专业的事情。gunicorn有很多worker的姿势,比如支持 sync worker,gevent worker,比如tornado worker。nginx 如果全都支持,那岂不是要累死nginx团队?

3. 精准控制,比如gunicorn的sync worker是支持prefork,这也就意味着可以在收到足够多的请求的时候,预先帮你提升worker数量,来处理。比如,gunicorn 进程的用户可能和nginx不一样,具备更高的权限,你用nginx处理,是不是就有点简单粗暴了呢?再比如,我要针对wsgi做一些监控。这怎么处理?

点赞 0
浏览 1.8k

依据HTTP方法、cookie、缓存、资源类型(内容协商中的各要素)、安全策略(如同源策略、CSP、CSRF)等因素的不同,头部会有差别。挺复杂的,因为HTTP几乎要解决互联网中产生的所有问题,所以要具体问题具体分析,看看你到底关心的是哪些HTTP头部了

点赞 0
浏览 795

udp包大小限制与系统有关,NGINX不会限制

点赞 0
浏览 717