【问题标题】:dynamic routing , tornado deployment in production动态路由,生产中的龙卷风部署
【发布时间】:2016-07-25 05:03:39
【问题描述】:

我有 4 个 python tornado 线程在不同机器的不同端口上运行。我使用 nginx 进行路由和负载平衡。它们的代码都是相同的。这是一个异步代码。我还有一个本地文件,假设每台机器上的 function.py 被 python 线程调用,进行一些计算并返回答案。

我的要求是我可能需要定期更新function.py文件。但是,我不希望服务器停止以重新加载函数,因为我不想丢弃任何传入请求。如果需要,我愿意将 nginx 更改为其他内容。任何建议将不胜感激。谢谢!

编辑: 是否有一种方法可以修改/配置 nginx,使其仅在它们启动时才会重定向到某些服务器(例如端口 8011-8014)?在这种情况下,我可以修改主要的 python 线程,然后优雅地关闭端口 8011-8014。但是这种配置可行吗?

【问题讨论】:

    标签: python nginx dynamic routing tornado


    【解决方案1】:

    更新你的python代码时,你可以在不同的端口上启动一组新的python进程(比如前一组的8001-8004和新组的8011-8014)然后修改你的nginx配置以重定向到8011-8014 8001-8004 并运行 service nginx reload(或您的操作系统的等效项)。

    这样,nginx 会将新请求重定向到新进程,而不会丢弃任何请求并完成先前进程上的未决请求。当您知道对旧的 Python 进程集的所有待处理请求都已完成(这可能很重要)时,您可以停止它们。

    【讨论】:

    • 一个很好的解决方案,但我有一些顾虑。修改/重新加载 nginx 配置不会导致服务器暂时停止吗?在这种情况下,某些请求可能会被丢弃。是否有一种方法可以修改/配置 nginx,使其仅在它们启动时才会重定向到某些服务器(例如端口 8011-8014)?在这种情况下,我可以修改主要的 python 线程,然后优雅地关闭端口 8011-8014。
    • 当使用重新加载(而不是重新启动)时,不会丢弃任何请求:nginx.org/en/docs/beginners_guide.html#control
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多