首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  程序员

OpenResty + Lua VS Nginx + Go ?

  •  
  •   banxi1988 · 305 天前 · 3262 次点击
    这是一个创建于 305 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    背景

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

    当然如果高指的是特别高那当我没说
        6
    dongqihong   305 天前
    Don ’ t make claims about performance without measurements

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

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


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

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

    另外做开发的话还要考虑后期招人维护的成本。能不能招到 Lua 和 Go 的程序员也是一个问题,建议从多方面考虑。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   981 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 19:58 · PVG 03:58 · LAX 11:58 · JFK 14:58
    ♥ Do have faith in what you're doing.