2017-05-11 7 views
1

ドッカーを使用してマイクロサービスプロジェクトを構築しています。ドッキングステーションのマイクロサービス - アーキテクチャ

私のマイクロサービスの1つは、さまざまな数のソースからデータを取得するリスナーです。

私が達成しようとしているのは、ソースからデータを動的に取得し始める機能と停止する機能です。例えば

architecture

この図において、Iは3ドッカーズに接続された3つのソースを有しています。

新しいソースが利用可能なときに別のドッカーインスタンスを作成する必要があるため、問題が発生します。この例では、ソース#4が利用可能になり、データを取得する必要があります(新しいソースが利用可能になった時点を知っています)が、自動的に(ソース4の情報を聞いて)聞き取ります。

1)リスナーサービスを実行している多数のドッカーのドッキングプールを作成し、新しいソースが利用可能になるたびに(rabbitmqを使用していますが、関連する)を使用可能なドッカーに送信してデータを取得します。

このソリューションでは、私はちょっとした理由で動作しているドッカー画像のメモリ消費を少し恐れていますが、それは非常に複雑な解決策ではありません。

2)新しいソースは、このソリューションでは異なる環境変数を使用して新しいドッカ()

を作成し利用できるようになっているときはいつでも、私は、ドッキングウィンドウの作成に問題があります。 この時点で私はこれを達成しましたが、ドッカーを起動しているサービス(マネージャーと呼ぶことができます)は、同じサーバー上でコマンドを実行している通常のnodejsアプリケーションです - ドッキングステーションのコンテナ内にも必要です。

ここでの問題は、メインドッカーからsock接続を作成して新しいDockerを作成できないということです。

私の解決策の両方が実りあり、本当に私の問題の提案を感謝しているとは思えません。

答えて

1

あなたの質問は少しはっきりしていませんが、サービスを水平に拡大したいだけなら、それを可能にするコンテナオーケストレーション技術を調べるべきです - 例えばKubernetesintroductionを読むことをお勧めします。

サービスコンテナを追加するために必要なのは、構成で希望する番号のreplicasを更新することだけです。詳細はthisを参照してください。

kubernetes(または短いk8s)を使用すると、水平スケーラビリティに加えて、展開の自動化、自己修復、サービス検出、および負荷分散機能のメリットが得られます。

他のオーケストレーションの選択肢もあります(たとえばDocker Swarm)が、最初にkubernetesを調べることをおすすめします。

あなたの問題が解決するか、元の質問ではそれほど明確でなかった追加要件がある場合は教えてください。あなたのフォローアップの質問のための

リンク:

1 - Run kubectl commands inside container

2 - Kubernetes autoscaling based on custom metrics

3 - Env variables in Pods

+0

あなたの答えをありがとう、私は私の問題を明確にしようとします。私のソースは動的に更新(追加と削除)されているので、動的にスケールするリスナーが必要です。それは 'Kubernetes'を使って可能ですか?もしあなたが私のサーバー上でオープンシフト環境を持っているのであれば、それについての参考になります。 – Yogevnn

+1

こんにちは、答えで私の2番目のリンクをたどると、スケーリングのために次のようなコマンドが表示されます: 'kubectl scale deployment nginx-デプロイメント--replicas 10' –

+0

ありがとう!私はちょうどそれをチェックし、それは良いアイデアのように見えます。それについてのちょっとした質問ですが、別のDockerからこのコマンドを実行できますか? RabbitMQを聞くdockerManagerがあり、新しいソースが利用可能な場合、dockerManagerはこのコマンドを使用してポッドを拡大/縮小します。もう1つの質問ですが、ポッドを作成するときに環境変数を使用できますか? (ところで、私はnodejsを使用しています) – Yogevnn

関連する問題