2016-05-17 25 views
4

私のシステムには、TCP上で互いに非常に頻繁に通信する2つのプロセスP1とP2があります。このため、両方とも同じVM上でホストされます。私はVMを排除し、代わりに物理マシン上のコンテナで自分のシステムをホストすることを考えています。コンテナ1は、P1が含まれてい単一コンテナ対複数コンテナ

  1. は、コンテナ2は、P2が含まれています。私は私のシステムをdockerizeた場合、私は2つのオプションがあります。 2つのコンテナがリンクされます。 P1とP2との間の通信は、コンテナ境界を越えて行われる。
  2. 1つのコンテナにP1とP2が含まれます。通信はコンテナ内にとどまります。

上記の2つのアプローチのメリットとデメリットについて親切に教えてください。
アプローチ1の通信待ち時間のオーバヘッドはどのくらいですか?

答えて

2

1つのコンテナ内のいくつかのプロセスの主な問題は、信号管理です。どのように(きれいに)停止しますかすべてプロセスですか?

これは「PID 1 zombie reaping issue」です。なぜなら、複数のプロセスを管理する必要があるときはいつもphusion/baseimage-dockerのようなベースイメージが役に立ちます。

より一般的な問題は、マイクロサービスデカップリングの問題です.P1とP2の両方がステートフルであり、互いに依存する場合、それらを同じコンテナに保持することは意味があります。通信遅延の観点に関わるオーバーヘッドは何

それが関係するプロセスの種類によって異なりますが、両方のプロセスは、(同じドッキングウィンドウのホスト上で実行されているとして、オーバーヘッドが最小限である場合でも、それら別のコンテナにあります)

1

スケーリングの問題です。 P1の使用量が特定のしきい値(ヒープ、スループット)を横切っているとすると、P1を自動スケールする場合は、単一のコンテナのアプローチでは、必要ではないかもしれないが、P2を複製することになります。

このように、1つのコンテナ1つのプロセスは、スケールが良く、きめ細かな管理(オーケストレーション)コントロールを提供します。

Latencyに関しては、本当にコンテナの展開アーキテクチャに依存します。両方のコンテナが同じマシン上でホストされている場合、レイテンシは重要ではなく、同時に2つの異なるAWSゾーンに入っている場合は影響が出ます。

関連する問題