2016-09-03 6 views
0

NoSQLとマイクロサービスアーキテクチャに基づいてシステムを開発しています。マイクロサービス - トランザクションレスシステムでゴーストレコードを処理するためのベストプラクティス

私は一般的な建築疑問がある - 国、都市や街 -

Le'tsは、私は、文書の三種類を持っていると言います。
StreetにはCityIdがあり、CityにはCountyIdが保持されています。

  1. が国を削除します:私はdeleteCountry()方法を開発する必要がある国のサービスで

  2. すべての都市をcountryIDで削除するように市サービスに要求します。
  3. 市のサービスは、すべてのストリート・サービスに対してcityIdsによってすべてのストリートを削除するように要求します。

問題:このプロセスは、国の削除後に失敗した場合、トランザクションレスの世界で、私はいくつかの「ゴースト」の文書が残っています。

  • それはそれの後に をきれいにするように私は私のオーケストレーションに失敗したことを管理することができますが、これはスケーラブル(コード単位)ソリューションではありません。
  • 私は振り付けパターンで作業することはできますが、本当にそれを解決するわけではありません。
  • 文書をクリーンアップする定期的な掃引プロセスを実行できますが、 は管理が難しく、問題がまだ存在する時間の穴が残っています。

NoSQLデータベースからゴーストレコードを削除することをお勧めします。
ありがとうございます。

+0

ゴーストをスキャンして排除するサービスをご利用ください。 –

答えて

1

説明したように、Saga in NServiceBusのようなプロセスのインテグリティを処理できるステートフルなオーケストレーションコンポーネントを1つの解決策にすることができます。

DeleteCountryコマンドを処理して、2つのメッセージを1つは国のコンポーネントに送信し、もう1つはcitiesコンポーネントに送信することで、プロセスを開始します。

両方のコンポーネントが「saga」に応答し、サガは作業を実行するコンポーネントの状態/結果に基づいて操作の完了または失敗を処理します。

それは意味がありますか?

0

この例では、aggreggateはいくつかのマイクロサービスに分かれています。カスケード更新および削除は、Countries,CitiesおよびStreetsがすべて同じ概念に属することを示します。

マイクロサービスアーキテクチャでは、CitiesServiceをシャットダウンする必要があります。ビジネスには影響ありません。うまく設計されたマイクロサービスアーキテクチャでは、この状況は決して起こらないか、または問題を引き起こすべきではありません。あなたの事例に似た状況に遭遇した場合、あなたはマイクロサービスを間違っています。

関連する問題