5

私は実際にマイクロサービスを研究していて、問題に直面しています。

環境

私は2つのマイクロサービスを開発しています:

  • ユーザー管理、Spring ベース、MySQL データベースを使用
  • 計画管理、ASP.NET ベース、SQL Server データベース。このサービスの唯一のアクセス ポイントは、次のようないくつかの RESTFUL エンドポイントをリストする API です。/planning/{day}/{userId} or /planning/{startDate}/{endDate}/{idUser}
  • 請求管理、MongoDB ベースの Node.Js。

問題

  1. 2 つのサービスを結合せずに、ユーザー サービスを介した計画情報へのアクセスのみを許可するにはどうすればよいですか? 後で別の場所から計画サービスにアクセスできることを知っていますが、今はそうではありません。

  2. MySQL データベースのユーザーに対応する課金サービスの課金情報にアクセスするにはどうすればよいですか? マイクロサービスが結合されていないことは知っていますが、この点は私を殺しています。何らかの方法で結合する必要があるからです。請求書で参照idUserするのが好きですか?それ以外の場合、API からどの請求を公開する必要があるかをどのように知ることができますか? より正確には、マイクロサービスは結合せずに、それらの間でどのように通信するのでしょうか?

  3. 他のサービスから認証サービスへの認証要求を複製せずに認証を作成する方法は?

4

2 に答える 2

7

ここで認識すべき重要なことは、ユーザー認証、ユーザー承認、およびユーザー セッション管理ソリューションの実装に関しては、マイクロサービス アーキテクチャのソリューションと他の形式の分散システム アーキテクチャのソリューションとの間に大きな概念上の違いはないということです。

概念的には、ソリューションはKerberos プロトコルの実装であり、ユーザーの ID を確立するために渡される「チケット」(または、今日より一般的に呼ばれている「トークン」) の概念を備えています。

したがって、あなたの場合、ユーザー管理サービスはバックエンドの認証および承認サーバーとして機能し、他のすべてのサービスが認識する必要があります。ユーザー管理サービスは、ユーザー トークンの発行と検証を担当して、ユーザーの ID とロールを確立します。

2 つのサービスを結合せずに、ユーザー サービスを介した計画情報へのアクセスのみを許可するにはどうすればよいですか?

ユーザーが .Net サービスにアクセスしようとすると、サービスはユーザー管理サービスに依存してユーザーの ID を確立する必要があります。つまり、.Net サービスは、ユーザー管理サービスの場所 (つまり、その URL) を知る必要があります。etcdnatsなどのツールを利用して、マイクロサービスを結合することなく、ユーザー管理サービスの場所をエコシステムの残りの部分に伝達できます。

Mysql データベースのユーザーに対応する請求サービスから請求情報にアクセスするにはどうすればよいですか?

最も簡単な解決策は、課金サービスの URL でクエリ パラメータとして (単一の?) キー (ユーザー ID など) を渡すことです。もちろん、課金サービスは、キーが URL に追加されることを期待できるように実装する必要があります。含める必要がある追加のキー (たとえば、請求日、注文ステータスなど) がある場合は、実行時にそれらの情報を保存するためにmemcachedredisなどを利用できます。もちろん、エコシステムにこれらの単一障害点を追加することのトレードオフを考慮する必要があります:-)

他のサービスから認証サービスへの認証要求を複製せずに認証を作成する方法は?

繰り返しになりますが、ユーザーが認証されると、そのすべての ID 情報をmemcachedredisなどに保存して、認証と承認のプロセスを繰り返さないようにすることができます。

于 2015-04-15T04:49:08.437 に答える
4

別のアプローチとして、認証/承認を使用して他のサービスへのアクセスを保護する別のマイクロサービスを構築することもできます。これは、API ゲートウェイ パターンに関連しています。追加情報はhttp://microservices.io/patterns/apigateway.htmlにあります。基本的に、システムへの単一のエントリ ポイントがあり、oauth または json Web トークンを使用してクライアント認証を処理できます。

マイクロサービス間の安全なアクセスは、追加のヘッダーや http 要求のトークン (一種の「内部」認証) などを使用して実現することもできます。

私の見解では、おそらくアプリ全体で認証ロジックを共有/複製する必要があるため、マイクロサービスはこの責任を負うべきではありません。

別の注意点として、ID を「外部キー」として共有することは、関連データを分離するための優れたアプローチです。

于 2015-05-13T00:42:55.827 に答える