2016-09-20 12 views
1

私は、マイクロサービスはコンテキストを分離し、より小さいモデルを作成するのに適していると理解しています。デカップリングを実現する方法の1つは、マイクロサービス間の非同期パブリッシュ/サブスクライブ通信です。同期通信マイクロサービス

のはマイクロサービスを言ってみましょうが、要求を処理するために担当しており、そのためにはマイクロサービスBに格納された情報を必要とします。 これを解決する方法の1つは、マイクロサービスをマイクロサービスBのイベントにサブスクライブし、必要なデータの一部をデータストレージにコピーし、将来の処理に使用することです。ユーザーはマイクロサービスにリクエストを送信した場合

さて、は何か、そしてマイクロサービスを処理するマイクロサービスから最新のイベントを処理していなかったことはB、それを使用するためのより良い方法だろうそのデータの一部を直接要求しますか?はいの場合、それは現在のデザインとカップリングの「違反」とみなされますか?

間違ったモデリングとも考えられますか?そのような場合 - データがAコンテキストで必要とされた場合、開始からそのコンテキストの一部であったはずです。

答えて

3

間違ったモデリングとも考えられますか?そのような場合 - データがAコンテキストで必要とされた場合、開始からそのコンテキストの一部であったはずです。

はい、そうかもしれません。要約すると

マイクロサービスBは、あなたがこのユースケースに必要なデータのための技術的な権威であるならば、その後、マイクロサービスBは、その機能を提供する必要があります。

は、現在のデザインとカップリングの「違反」と考えられていますか?

この設計では、マイクロサービスBが利用できない場合、マイクロサービスAは価値を提供できません。それは私のカップリングのように聞こえる。

このパターンでトラップされていれば、Bと同期して通信することになりますが、Bが利用できない場合はそのデータのローカルキャッシュを使用すると思います。

共有されるデータが不変の場合、いくつかの問題が解消されます。

もちろんこのデータの作家がBであればそれ以外のいかなるその後、データを所有しているか、または例外

をスローする必要があるだろう、キャッシュされたデータでの作業は、ビジネスで許可された場合にのみ機能しますA によって見られるデータは、キャッシュデータです。サービスBは、Aがそれを見ている間にデータを変更する可能性があります。AがBによって書かれたデータのライブコピーを必要とする決定をしている場合、あなたのサービスの境界は間違った場所にあります。

+0

"このパターンでトラップされていれば、Bと同期して通信することになりますが、Bが利用できない場合はそのデータのローカルキャッシュを使用することになります。"これはもちろん、キャッシュされたデータを使って作業することがビジネスで許可されている場合にのみ有効です。さもなければ、Aはデータを所有するか例外をスローする必要がありますか? – Robert

関連する問題