2016-07-29 65 views
1

我正在编写一个与Shopify商店集成的Python/Django中的电子商务插件应用程序。每当商店的顾客到达结帐处时,Shopify会通过购物车和目的地地址数据向我的应用程序发送请求,并且我的应用程序需要回复运费价格信息。问题是我需要在他们之间进行一次外部API调用,向我发送请求并向他们发送响应,并且在中等负载下,我的WSGI工作人员可以非常轻松地进行填充。使用长外部API响应设置Django WSGI工作人员

我试图避免不必要的扩展。我应该简单地增加我的工人数量超过建议的cores * 2 + 1?我只是监视CPU负载,以调整这个数字?什么是我应该寻找的理想CPU负载%?由于我还从同一个应用程序处理未阻止的短请求,这是否会导致任何问题?

Django是不是一个很好的匹配这种用例?如果是这样,什么是一个很好的匹配,什么是最好的方式来应用它,而不重写我的整个应用程序?

编辑:我的WSGI服务器是Gunicorn

+0

你在用什么样的“工人”?这是什么wsgi服务器? –

+0

Gunicorn,更新了问题。 – Julien

回答

1

有一对夫妇的事情可以做,在这里提高gunicorn的性能。根据您的设计,几乎可以确定您的员工是IO限制的。因此,一开始,您可以将它们配置为每个工作人员使用多个线程;文档建议2-4。

但是,由于您网站的IO绑定特性,您可能会通过使用其中一种异步工作者类型来获得更好的改进。有关详细信息,请参见the design docs:我认为gevent和eventlet之间没有多少选择,但我个人从前者获得了很好的结果。

+1

请注意,如果您不了解它们的工作方式,那么使用gevent或eventlet可能会造成更糟糕的情况。事情不会通过简单的切换来神奇地改善事情。你需要确保你没有使用任何模块,这些模块会被gevent或者eventlet修补,所以它们会工作正常。有任何障碍,并且不是greenlet意识,并且您的整个过程将挂起并且松散所有并发好处。总是使用多线程更安全。 –