OpenResty + Lua VS Nginx + Go ?

2019-01-18 21:37:35 +08:00
 banxi1988

如题,最近最两个高并发的组合在我脑海中打转。

背景

  1. 应用后端主要是 Django 来实现的。
  2. 其中一个 API 接口的请求频率比较高,主要是一些计数统计写缓存加一点点数据库查询。 考虑到这个 API 压力比较大,考虑进行优化。

方案 1:OpenResty + lua

其实这种方案我感觉比较 Hack 不怎么优雅。怎么说呢? openresty 内置的 resty-redis 等库 + ngx.capture 基本可以解决需求。但是通过 rewrite_by_lua_file 这样。开发调试体验并不太好。

方案 2:Nginx + Go

Go 语言以高并发高性能著称。

比较

  1. 开发体验,Go 完爆 resty + Lua。
  2. 生态及工程化, 显然 Go 也胜出。
  3. 性能上 resty+lua 稍微胜出。

我算是后端新人,基本没有大型网站架构经验 ,希望能得到各位的见解。

6253 次点击
所在节点    程序员
17 条回复
lhx2008
2019-01-18 21:40:30 +08:00
先看看现有程序为什么慢,Python 慢是不是 IO 有问题?能不能搞异步 IO ?
fengjianxinghun
2019-01-18 22:02:32 +08:00
openresty+lua 然后 luaffi 调用编译成 shared 库的 go 满足你的所有问题
Vegetable
2019-01-18 22:07:53 +08:00
怎么说呢,个人看法.
Django 你们如果不打算一直用下去,那就早早切到 go 那边,少走点弯路.
如果近期没那个打算,可以考虑写个 lib 给 python 用,很多语言都行比如 GO.一样能解决眼下的问题,不要把系统搞太复杂.
LukeChien
2019-01-18 22:50:30 +08:00
这个可以用 nodejs 试试
misaka19000
2019-01-18 22:56:45 +08:00
不知道你的并发量高指的是有多高哈,我们用 Python 开发的项目 qps1000 左右完全没有压力。。。

当然如果高指的是特别高那当我没说
dongqihong
2019-01-18 23:15:34 +08:00
Don ’ t make claims about performance without measurements

先确定瓶颈在哪儿,最好的解决方案也就呼之欲出了
junbaor
2019-01-18 23:24:23 +08:00
高并发比较模糊,得说你想支撑多大量
kran
2019-01-18 23:36:40 +08:00
先用现有技术栈解决问题。
有一句话怎么说,如无必要…
cloudyplain
2019-01-19 08:02:10 +08:00
开发效率 python > openResty > go
性能 go >= openResty >> python
生态 python > go > openResty
如果不打算更换 python,只是实现简单高性能的 api,openResty 可以算是比较好的选择,至于其他方面需要自己找平衡点。
pathbox
2019-01-19 08:22:50 +08:00
真要改,我觉得 go,Nginx 就够你用了
hujianxin
2019-01-19 09:32:42 +08:00
@cloudyplain openresty 开发效率比 go 还高?
lihongjie0209
2019-01-19 10:09:45 +08:00
你的并发量到什么程度才让你决定你的程序已经到极限了, 只能优化 nginx ??

异步写尝试过吗? 多线程? 消息队列? 内存数据库?


你直接优化 nginx, 程序逻辑分散到两处, debug 和维护的时候都是坑
bestkayle
2019-01-19 11:21:17 +08:00
要高并发为啥用 django
szq8014
2019-01-19 12:23:16 +08:00
@lihongjie0209 现在太多程序员谈程序必谈并发,甚至程序还没写出来就开始想遇到高并发怎么办,我甚至在怀疑真的需要这么高并发么,先快速写个“低并发”初版出来再迭代。。不要纠结语言么,nodejs, java , python 都是可以优化的,但是要记住“过早的优化是万恶之源”
lihongjie0209
2019-01-19 13:02:57 +08:00
@szq8014 对的
byteli
2019-01-19 13:41:55 +08:00
过早优化是万恶之源。先 profile 找到原因。cpu 硬盘 带宽 io,总有一个是限制,web 的一般都在 io
msg7086
2019-01-19 14:48:41 +08:00
所以你是问 Nginx + Lua 和 Nginx + Go 哪个好?

Nginx 你准备怎么连接 Go 呢? FastCGI 或者 HTTP Proxy 么?考虑过这之间的开销么。Lua 是进程内部执行的,少个进程间通信开销还有协议序列化之类的开销。

另外做开发的话还要考虑后期招人维护的成本。能不能招到 Lua 和 Go 的程序员也是一个问题,建议从多方面考虑。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/528437

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX