9つのサービスをそれぞれ独自のコンテナ内で実行するというマイクロサービスアーキテクチャがあります。Dockanger ContainerのDjango + CeleryのAPIタイムアウトのトラブルシューティング
これらのサービスでは、Django、Celery(Redis Queue)、共有PostgreSQLデータベース(独自のコンテナ内)、およびいくつかの特定のサービス/ライブラリを使用しています。
マイクロサービスは、REST APIを使用して互いに通信します。
問題は、ランダムな方法で、いくつかのコンテナAPIが応答しなくなってスタックしないことがあることです。 自分のインタフェースでcurl
リクエストを発行するとタイムアウトになります。
その瞬間、他のすべての容器はうまく答えます。
2つの張り出した容器があります。 私が気づいたことはブロックコンテナの両方を使用することです:
- ジャンゴ
- ジャンゴ休止フレームワーク
- セロリ
- ジャンゴ・セロリ
- セロリブローカーなどの組み込みのRedis
- 別のコンテナにあるPostgreSQL DBへのアクセス
サービスまたはドッカーのログに関連情報が表示されないため、問題のトラブルシューティング方法を理解できません。
問題は、これらのAPIがランダムな瞬間にだけスタックされていることです。もう一度動作させるには、ブロッキングコンテナを停止してから、再度起動する必要があります。
それはのpython GIL問題ことができれば、私は思っていたが、私はこの仮説をチェックする方法がわからない...
これをtroubleshotする方法についての任意のアイデア?
一般的なプラクティスはコンテナあたり1デーモンです – e4c5
私は同じコンテナ内でフォアグラウンド(nginx/gunicorn/celery/redis)でいくつかのデーモンを実行します。 – matt
と私はドッカーを使用することの全目的を破ると言っています。なぜあなたはホストOS上でこれらのすべてのものを直接実行しないのですか? – e4c5