• Netfeel
    2019-09-04
    loadstring 在NYI列表是never,会不会对性能有很大影响?

    作者回复: 要看调用次数的,热代码才有 JIT 的必要性。loadstring 并不是一个频繁的操作,不会有性能问题的

     1
     1
  • 许童童
    2019-09-07
    老师的文章很棒。
    
    
  • helloworld
    2019-09-06
    老师,loadstring或loadfile这种热更新相关的代码,我们该写在哪里,就是怎么触发?通过resty命令吗

    作者回复: 可以写在 ngx.timer 里面,到数据库中定期的去检测版本号或者修改时间是否有变化。

    
    
  • 空知
    2019-09-04
    二进制热升级 也没有停止服务 启动新的配置的程序,不算动态吗?

    作者回复: 算的,这是 Nginx/OpenResty 自身的升级。但这个过程会关闭旧的 workers,启动新的 workers,可能耗时比较久,而且会丢失缓存。这种二级制热升级应该保持一个很低频的操作。

    
    
  • FF
    2019-09-04
    关于CloudFlare 实现的动态加载有个疑问:CloudFlare 在完成新文件替换后,如何用 loadstring 函数完成新文件的加载呢 ?loadstring 只能加载字符串,就算把文件内容转成字符串作为 loadstring 的入参,也不行吧,它的返回值是函数引用。那动态加载 lua 文件/模块,OR 是如何做的 ?温老师能否具体讲讲这块,或者 CloudFlare 具是如何实现的 ?

    如果要重新加载一个 lua 文件/模块,以我目前对 OR 的掌握只能想办法重新执行 require ,但貌似用这种方式做不到,具体实现方式不知是如何 ?

    感谢。
    展开

    作者回复: 给你一个更具体的示例:
    resty -e 'local s = [[
    local ngx = ngx
    local _M = {}
    function _M.f()
        ngx.say("hello world")
    end
    return _M
    ]]
    local lua = loadstring(s)
    local ret, func = pcall(lua)
    func.f()'

    这里的 `s` 就是一个完整的 Lua 模块,在发现变化的时候,你可以用 loadstring 或者 loadfile 重启加载。你也把可以把获取变化和重新加载用 code_loader 函数做一层包装:
    ```
    local func = code_loader(name)
    ```
    而在 code_loader 中我们一般会用 lru cache 对 `s` 做一层缓存。
    这差不多就是完整的实现了。

    
    
  • manatee
    2019-09-04
    lua-resty-upstream-healthcheck是不是说反了,应该只有主动健康检查没有被动健康检查

    作者回复: 多谢指正,确实这里弄错了。lua-resty-upstream-healthcheck带的是 ngx.timer.at 这种主动健康检查的方式,而没有被动健康检查。

    
    
  • manatee
    2019-09-04
    在使用resty-healthcheck这个库时,如何检获取所有真实服务器的健康状态呢

    作者回复: 你可以使用 checker:add_target 来设置多个上游节点的 ip 和端口,就像这个测试案例一样:https://github.com/Kong/lua-resty-healthcheck/blob/master/t/06-report_http_status.t#L69

     1
    
  • manatee
    2019-09-04
    动态上游这块,我的做法是为一个服务设置2个upstream,然后根据路由条件选择不同的upstream,当机器ip有变化修改upstream中的ip即可,请问这样和直接使用balancer_by_lua有什么劣势或坑吗

    作者回复: balancer_by_lua 可以让用户选择负载均衡的算法是roundrobin 还是 chash,或者是其他的算法,比较自由。另外,在你的实现中,上游健康检查也需要自己来实现,有不少额外的工作量。

    
    
我们在线,来聊聊吧