2017-06-17 9 views
1

私は最近、メッセージングアーキテクチャの使用を可能にするが、同じスレッドと異なるスレッドを使用するプロセスで実装されるさまざまなフレームワークがあることを見てきました。私が知っているのは、Spring、Guava EventBus、Reactorです。インプロセスイベントシステムとブローカを持つマイクロサービスの良いユースケースは何ですか?

私の質問は、完全な本物のブローカーにメッセージを送信する代わりに、誰かがメッセージを使用したいと思う良い使用例です。私は、その使用法がビジネスロジックのより良い分離を可能にすることを理解していますが、マイクロサービスアーキテクチャでは、通常、他のマイクロサービスが消費するイベントを公開します。その利点は、インスタンス内のエラーによる誤ったメッセージが別のインスタンスによって再試行されるブローカのクラスタを追加することによる障害許容度です。後で同じシステムで消費されるメッセージを送信することによって分解され実行されるロジックを実装すると、特にサブスクライバが異なるスレッドで実行されたときに、データを一貫した状態に戻すことが難しくなります。

答えて

0

プロセス内のマイクロサービスのメリットは、実際にメッセージを消費するための変化ではありません。

マイクロサービスを使用すると、クラスタ内の特定のノードでコードの一部を実行し、強力なコンピュータ上の重い計算と、より強力でないリソース上の2次的または軽いリソースを割り当てることができます。全体的に、パフォーマンスのバランスをとって、必要とするコードの部分でリソースを拡張することができます。

また、マイクロサービスのコードを更新すると、変更内容(およびエラー)が分離されるように、他のサービスには影響しません。すべてが同じプロセス内で実行されている場合は、誤った更新が実際にはソリューション全体を使用できなくする可能性があります。

最後に、プロセス(第三者ブローカー)からコミュニケーションを取り入れることで、より多くの人、エージェント、プロセスなどと共有することができます。それ以外の人はプロセス(モジュール)に参加する必要があります。これは本当に効率的ではありません。

あなたのモノリシック内でプロセス内通信に必要な唯一の理由は、高速(オンザフライ通信ではなくメモリ内通信)です。

+0

私は最後の点に同意しません。私のスピードを向上させるために内部のメッセージに依存するシステムを設計することは、実際にはそれが必要ないことを示唆しています。メッセージを送信するために外部ブローカに頼ることで、新しいインスタンスを追加するだけでシステムを拡張できます。このようにして、どのインスタンスもメッセージを選択して処理を続行し、ノードに障害が発生した後に処理されなかったメッセージの再試行と組み合わされると、エラー許容度を追加できます。送信された各メッセージが一連のイベントの一部である場合、1つのメッセージが失われるとシステム全体が中断され、外部のブローカクラスタが解決するのに役立ちます。 – Kilian

関連する問題