2016-07-29 68 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意識,並且您的整個過程將掛起並且鬆散所有併發好處。總是使用多線程更安全。 –