私はマイクロサービスアーキテクチャのアプリケーションを開発中です。各マイクロサービスは、それ自身のために生存することができ、システム内の他のマイクロサービスと直接の依存関係はありません。各マイクロサービスでは、サービスの状態変化を通知するためにCQRSとイベントソーシングを使用しています。他のサービスは、関心があり、データを更新することができる場合、それらのイベントについて通知されます。セキュリティサービスは、マイクロサービスアーキテクチャの単一障害点ですか?
これまでのところ、システムは非常にうまく動作します。 1つのマイクロサービスがダウンしている場合、他のマイクロサービスはまだ動作しています。中断されたサービスが再び開始されると、そのサービスが存在しない場合に発生したすべてのイベントを受信し、それらのイベントに応じて自身の状態を更新します。
サービスを保護する必要があり、IdentityServerを使用しています。トークンを取得するために他のマイクロサービスから呼び出されるもう1つのサービス、セキュリティサービスがあります。これは、マイクロサービスが別のマイクロサービスと直接対話しなければならない初めてのことです。
私の問題点は、セキュリティサーバーがダウンしている場合、システム全体が停止していることです。
私は、次の解決策を考えています:
すべてmicroserviceは、独自のデータベース内のユーザデータを保持する必要があります。ユーザーがマイクロサービスにアクセスすると、そのユーザーはセキュリティサービスへのリモートコールなしでサービス内で認証されます。私はまだユーザー管理のためのセキュリティサービスを用意しておくべきです。ユーザへの変更はイベントを再度発生させ、他のマイクロサービスはユーザデータを更新することができる。もちろん、httpsのすべて。セキュリティのために冗長なコードを減らすために、私はナゲットパッケージを使うことができました。
これは合理的なアプローチだと思いますか?
私はあなたのポイントを見ます。これは、パフォーマンスの理由から知ることは良いことです。しかし、システム全体が1つのサービスに依存しているという私の最初の問題はまだ解決されていません。だからあなたは私に言っている、このアーキテクチャを使っているeveyoneはこのリスクを抱えていなければならない?ネットフリックス? – kaz
明らかに@Illiakaill私はそれに私を打つが、彼は正しい(upvoted!:))、あなたはあなたが好きなだけ多くのノードにIDプロバイダを配布し、他の場合と同様に適切な高可用性を作成することができます。したがって、「特定の1つの」セキュリティサービスについて言えば、それは論理的なレベルなので、HAの複数の物理的なコンピュータであることができます。 –
私は同意しますが、(同じセキュリティサービスのインスタンスであるため)このサービスがデータベースを共有するべきではありませんか?それはまだ失敗の単一点ではありませんか? – kaz