it-swarm-ja.com

マイクロサービスランドスケープを構成する場合、ビューはモノリシックにするか、コアサービスにアタッチする必要がありますか?

モノリシックWebアプリケーションをマイクロサービスベースのアプリケーションに移行しています。 Springクラウドを使用し、残りのすべてのサービスが登録されているディスカバリーサービスを取得します。アーキテクチャの簡略化されたスキーマをここに示します。

enter image description here

機器サービスとタスクサービスの両方に独自のRESTful HTTP APIがあります。これらは、適切なOAuth2承認サーバーによって配信されるOAuth2トークンに保存されているロールに基づいて、ユーザーが実行できる操作を処理します。

それではクライアントについて話しましょう。 モバイルネイティブアプリの場合、ユーザーの承認サーバーからトークンを取得します。次に、そのトークンを使用してコアサービスに直接アクセスします。エンドユーザーが許可されていない操作を実行しようとすると、APIメソッドレベルでセキュリティが実装されているため、その操作は拒否されます。

ブラウザーアクセスの場合、AngularJSを使用して、コアREST AP​​Iに直接アクセスすることもできますが、少し経験が浅いです。それと、JSFフレームワークを収容する3番目のサービスを実装することを選択しました。ビューはJSFによってレンダリングされるため、UIサービスはJSON言語でコアサービスと通信し、それをJavaに解析する必要があります(これは、Jacksonライブラリを使用すると簡単です)。

UIサービスをモノリシックにする決定は、サーバーセッションにデータを保存する場合、より多くのUIサービス間でデータを共有するためにセッションクラスタリングを必要としないということです。水平方向のスケーリングを行う場合は、常にセッションインワンインスタンスのパターンを使用する場合があります。

UIサービスを分離して実装するのではなく、コアサービスに統合するように言われたこともあります。すべてがJavaで実装されているので、JSONの解析は行わないでください。UIとコア部分が密接に結合されている可能性があります。

それについて何か提案はありますか?

3
Xtreme Biker

あなたはすでにモノリシックUIを持っているようです-ネイティブモバイルアプリはUIクライアントであり、そのスタンドアロンです。では、なぜコアサービス内にWebサーバーベースのUIを組み込みたいのでしょうか。

ウェブサーバーのUIは、ネイティブアプリと同じように別のクライアントと見なす必要があります。コアサービスは、UIを考慮せずに実装できます。これらは、呼び出すUIを提供するためだけに存在し、すべてのUI固有のビットはうまく機能します分離。

0
gbjbaanb

定義したとおり、他の2つのサービスのいずれかが変更されるたびに、「UIサービス」を変更する必要があります。これはカプセル化の反対であり、サービスを追加しても拡張されません。

また、さらに数十から数百のサービスに拡張する予定がない場合は、システムに不適切なアーキテクチャを選択した可能性があります。

その点で、物事を「結合」と同じプロセスに置くことを考慮することは特に心配です。これは、管理不能な分散モノリスになってしまうリスクのある、微妙に間違ったアイデアの1つです。場合によっては、2つの相互作用するものを2つに切り離す最善の方法は、それらを同じプロセスに配置することです。次に、単純化したRESTアプローチに依存する代わりに、ネイティブ言語の優れたAPIおよび依存関係管理ツールを使用できます。

0
soru