2016-10-25 14 views
0

私はWSGIアプリケーションを持っています(それはFlaskアプリケーションですが、これはポート9077のGunicornサーバー下で動作しているはずです)。アプリケーションに/ statusエンドポイントがあります。が走っています。合理的な時間内にOKを報告できない場合は、コンテナ全体が(Kubernetesによって)殺されます。別のスレッドでWSGIアプリケーションエンドポイントを処理していますか?

この問題は、アプリケーションが非常に負荷が高い(ときどき起こる)ときに、/ statusエンドポイントが応答するのに時間がかかることがあり、コンテナが早すぎて殺されることがあります。 Gunicornが/ statusエンドポイントを常に別のスレッドに提供するように設定する方法はありますか?おそらく別のポートでさえ?私はこのような状況に対処するためのヒントやアイディアを感謝します。

答えて

1

この機能をサポートしているかどうかはわかりませんが、Gunicornとは一切関係ありません。

が、私はアプリが高負荷であることを行っていることを知っているuWSGI
と私は--processesuwsgiを実行します(また、マルチスレッドモード、またはその両方で実行することができます)

uWSGIだけで複数のインスタンスをスピンアップフラスコのアプリケーションと負荷バランサ、異なるポートのための必要はありません、uwsgiすべての世話をします。
あなたはGILに縛られず、あなたのアプリはマシン上で利用可能なすべてのリソースを使用します。ここ

documentation about uWSGI concurrency

a quick tutorial on how to setup a flask app, uWSGI and nginx(あなたはnginxの部分をスキップすることができます)

は、私が提供する設定ファイルの例です。

[uwsgi] 
module = WSGI:app 
master = true 
processes = 16 
die-on-term = true 
socket = 0.0.0.0:8808 
protocol = http 

uwsgi --daemonize --ini my_uwsgi_conf.ini

そのがそのように実行しているとき、私は簡単に1000回のコール/秒を達成することができます。
希望があれば幸いです。

ps:あなたのためのもう1つのソリューションです。アプリを実行しているコンテナをさらにスピンアップしてください。
ロードバランシングnginxの後ろに置く

+0

このuWSGIソリューションはすばらしく、ありがとう!明確にするために、あなたは実際にそれの前にnginxなしで、プロンプトでプレーンなuwsgiを実行しますか? –

+1

@JordanDimov 'uWSGI'は、生産準備ができています(そして、より成熟したGunicornです)。 'nginx'はリダイレクト、リバースプロキシ、ヘッダー、sslなどの柔軟性を追加します。もしあなたが高度な機能を必要としないなら'uWSGI'を使うだけで十分です。役に立ったら私の答えを受け入れることを検討してください。 – Urban48

関連する問題