Python瓶对uwsgi/瓶对nginx/uwsgi/瓶

Python瓶对uwsgi/瓶对nginx/uwsgi/瓶,python,nginx,uwsgi,bottle,Python,Nginx,Uwsgi,Bottle,我正在开发一个基于Python的应用程序(HTTP-REST或jsonrpc接口),该应用程序将在生产自动化测试环境中使用。这将连接到运行所有测试脚本的Java客户端。也就是说,不需要人工访问(除了测试应用程序本身) 我们希望将它部署在Raspberry Pi上,所以我希望它速度相对较快,占地面积较小。它可能不会收到大量的请求(在最大负载下,可能每秒几次),但它应该能够在很长一段时间内运行并保持稳定 由于其简单性(一个文件),我决定将瓶子作为一个框架。这是一个tossup vs烧瓶。任何认为烧瓶

我正在开发一个基于Python的应用程序(HTTP-REST或jsonrpc接口),该应用程序将在生产自动化测试环境中使用。这将连接到运行所有测试脚本的Java客户端。也就是说,不需要人工访问(除了测试应用程序本身)

我们希望将它部署在Raspberry Pi上,所以我希望它速度相对较快,占地面积较小。它可能不会收到大量的请求(在最大负载下,可能每秒几次),但它应该能够在很长一段时间内运行并保持稳定

由于其简单性(一个文件),我决定将瓶子作为一个框架。这是一个tossup vs烧瓶。任何认为烧瓶可能更好的人,请告诉我原因

我对瓶子内置HTTP服务器的稳定性有点不确定,所以我正在评估以下三个选项:

  • 仅使用瓶子--作为http服务器+应用程序
  • 在uwsgi上使用瓶子——将uwsgi用作HTTP服务器
  • 使用带有nginx/uwsgi的瓶子
  • 问题:

    • 如果我只做Python/uwsgi,是否有理由将nginx添加到混合中
    • uwsgi/瓶(或烧瓶)组合是否视为生产就绪
    • 我是否有可能通过使用一个独立于瓶子内置的HTTP服务器获得任何好处

    对我来说,烧瓶与瓶子的对比归结为两件事

  • 这个应用程序有多简单。如果它很简单,那么瓶子就是我的选择。如果没有,那我就用烧瓶。事实上,瓶子是一个单独的文件,只需在源代码中包含该文件,部署起来就非常简单。但事实上,瓶子是一个单独的文件,这应该是一个很好的迹象,表明它没有实现完整的wsgi规范及其所有的边缘情况
  • 这个应用程序做什么。如果它需要呈现Python->JSON之外的任何东西,那么我会使用Flask,因为它内置了对Jinja2的支持。如果我需要进行身份验证和/或授权,那么Flask已经有了一些很好的扩展来处理这些需求。如果我需要做缓存,同样地,Flask缓存存在并且用最少的设置做得很好。我不完全确定什么是可用于瓶子扩展方面的,所以这可能仍然值得一看
  • 使用瓶子的内置服务器的问题是,它将是单进程/单线程的,这意味着您一次只能处理一个请求

    为了解决这一限制,您可以不按特定顺序执行以下任何操作

  • Eventlet的wsgi包装瓶子。app(单线程、非阻塞I/O、单进程)
  • uwsgi或gunicorn(后者更简单),通常设置为单线程、多进程(worker)
  • uwsgi前面的nginx
  • 3是最重要的,如果你有静态资产,你想提供,因为你可以直接与nginx服务。
    2非常容易使用(特别是gunicorn)——尽管我大部分时间都使用uwsgi,因为它有更多的可配置性来处理我想要的东西。

    1非常简单,性能也很好。。。此外,还没有需要记住的外部配置或命令行标志

    2017年更新-我们现在使用猎鹰而不是瓶子


    我仍然喜欢瓶子,但去年我们达到了无法扩展以满足性能要求的程度(100k请求/秒,在我还建议您通过gevent.pywsgi服务器运行瓶子。它很棒,安装超级简单,异步,速度非常快

    加上瓶子已经有了一个适配器,所以更容易


    我喜欢瓶子,这种不适用于大型项目的概念是荒谬的。它是最有效、编写最完善的框架之一,可以轻松成型,而无需大量的手工操作。

    回答得很好!谢谢。目前我的应用程序的结构应该很容易更改为瓶子(或其他框架)如果需要的话,我想我现在还是用瓶子吧……我已经花了太多的时间让nginx在uwsgi面前工作/配置,到目前为止还没有成功。所以我想我会尽可能地用最少的配置来试用gunicorn和uwsgi,只有当它显示出非常明显的性能优势时才选择uwsgi;否则,gunicorn简单起见(我还有很多时间来改变这一切).Quick note:发现nginx不起作用,因为套接字文件位于/tmp中,默认情况下,Fedora不起作用…除了这个问题,这些选项都可以正常工作。我想我还是会坚持使用gunicorn以便于部署。我想我会使用没有nginx的#2:uwsgi。不需要让精简变得复杂gs因为我不认为我的简单应用程序会从更快地提供静态文件中受益。@sberry,既然瓶子已经支持WSGI协议(nginx),为什么我们需要
    uWSGI
    ,所以瓶子可以通过WSGI协议直接与nginx通信?@Bin这意味着您仍将通过瓶子服务静态资产。如果您不介意的话,这很好,但值得注意。您是否将瓶子与gevent一起使用?我发现这会疯狂地提高性能。是的,很自然。如果没有并发,您无法服务100000 QPS。:)