質問: マイクロサービスランドスケープを構成する場合、ビューはモノリシックにするか、コアサービスにアタッチする必要がありますか? モノリシックwebアプリケーションをマイクロサービスベースのアプリケーションに移行しています。 springクラウドを使用し、残りのすべてのサービスが登録されているディスカバリーサービスを取得します。アーキテクチャの簡略化されたスキーマをここに示します。 機器サービスとタスクサービスの両方に独自のrestful http apiがあります。これらは、適切なoauth2承認サーバーによって配信されるoauth2トークンに保存されているロールに基づいて、ユーザーが実行できる操作を処理します。それではクライアントについて話しましょう。 モバイルネイティブアプリの場合、ユーザーの承認サーバーからトークンを取得します。次に、そのトークンを使用してコアサービスに直接アクセスします。エンドユーザーが許可されていない操作を実行しようとすると、apiメソッドレベルでセキュリティが実装されているため、その操作は拒否されます。ブラウザーアクセスの場合、angularjsを使用して、コアrest apiに直接アクセスすることもできますが、少し経験が浅いです。それと、jsfフレームワークを収容する3番目のサービスを実装することを選択しました。ビューはjsfによってレンダリングされるため、uiサービスはjson言語でコアサービスと通信し、それをjavaに解析する必要があります(これは、jacksonライブラリを使用すると簡単です)。uiサービスをモノリシックにする決定は、サーバーセッションにデータを保存する場合、より多くのuiサービス間でデータを共有するためにセッションクラスタリングを必要としないということです。水平方向のスケーリングを行う場合は、常にセッションインワンインスタンスのパターンを使用する場合があります。uiサービスを分離して実装するのではなく、コアサービスに統合するように言われたこともあります。すべてがjavaで実装されているので、jsonの解析は行わないでください。uiとコア部分が密接に結合されている可能性があります。それについて何か提案はありますか?
回答: あなたはすでにモノリシックuiを持っているようです-ネイティブモバイルアプリはuiクライアントであり、そのスタンドアロンです。では、なぜコアサービス内にwebサーバーベースのuiを組み込みたいのでしょうか。ウェブサーバーのuiは、ネイティブアプリと同じように別のクライアントと見なす必要があります。コアサービスは、uiを考慮せずに実装できます。これらは、呼び出すuiを提供するためだけに存在し、すべてのui固有のビットはうまく機能します分離。