V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
banxi1988
V2EX  ›  程序员

OpenResty + Lua VS Nginx + Go ?

  •  
  •   banxi1988 ·
    banxi1988 · Jan 18, 2019 · 7159 views
    This topic created in 2659 days ago, the information mentioned may be changed or developed.

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

    背景

    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 稍微胜出。

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

    17 replies    2019-01-19 14:48:41 +08:00
    lhx2008
        1
    lhx2008  
       Jan 18, 2019   ❤️ 1
    先看看现有程序为什么慢,Python 慢是不是 IO 有问题?能不能搞异步 IO ?
    fengjianxinghun
        2
    fengjianxinghun  
       Jan 18, 2019 via iPhone   ❤️ 1
    openresty+lua 然后 luaffi 调用编译成 shared 库的 go 满足你的所有问题
    Vegetable
        3
    Vegetable  
       Jan 18, 2019   ❤️ 1
    怎么说呢,个人看法.
    Django 你们如果不打算一直用下去,那就早早切到 go 那边,少走点弯路.
    如果近期没那个打算,可以考虑写个 lib 给 python 用,很多语言都行比如 GO.一样能解决眼下的问题,不要把系统搞太复杂.
    LukeChien
        4
    LukeChien  
       Jan 18, 2019 via Android
    这个可以用 nodejs 试试
    misaka19000
        5
    misaka19000  
       Jan 18, 2019
    不知道你的并发量高指的是有多高哈,我们用 Python 开发的项目 qps1000 左右完全没有压力。。。

    当然如果高指的是特别高那当我没说
    dongqihong
        6
    dongqihong  
       Jan 18, 2019
    Don ’ t make claims about performance without measurements

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

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


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

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

    另外做开发的话还要考虑后期招人维护的成本。能不能招到 Lua 和 Go 的程序员也是一个问题,建议从多方面考虑。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   955 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 23:15 · PVG 07:15 · LAX 16:15 · JFK 19:15
    ♥ Do have faith in what you're doing.