web-dev-qa-db-ja.com

バックエンドとフロントエンドを分離するマイクロサービスアーキテクチャ

現在のモノリシックベースのアーキテクチャからマイクロサービスアーキテクチャに(ゆっくりと)移行しようとしています。私はマイクロサービスアーキテクチャに関する調査を行ったので、以下で説明するアーキテクチャに関するフィードバックをコミュニティから入手したいと考えています。

アプリケーションに関する情報

これは、約10〜20人のユーザーが内部で使用するWebアプリケーションです。このアプリケーションは、レポートをグラフと表形式で表示し、機能をpdf/xsl/csvにエクスポートします。やがてアプリケーションは成長し、より多くの機能が追加されます。

私が考えていたのは、レポート(MS)とエンジン(MS)の異なる目的に役立つ2つのマイクロサービス(MS)を持つことです。

エンジンは次のもので構成されています。

主要ライブラリ:Spring Boot、Spring Rest、Maven、JDBCテンプレート
アーキテクチャ:DAO、サービス、およびレストコントローラ
アプリケーションサーバー:Tomcat(埋め込み)

短い要約:

ビジネスルールやその他のロジックのためにサービスに渡される複雑なSQLクエリのため、DAOレイヤーはJDBCテンプレートを使用します。サービスレイヤーからデータを取得し、エンジンとレポート間のインターフェイスとして機能するRest Controller

レポート(MS)は以下で構成されます。

主要なライブラリー:Spring Boot、Spring Rest、Maven、JSP、JavaScript/Jquery /アーキテクチャー:サービス、コントローラー、フロントエンド・テクノロジーアプリケーション・サーバー:Tomcat(組み込み)

レポートの代替技術(MS):
AngularJS 2、NodeJS、JavaScript/Jquery/HTML/CSS

短い要約:

サービスレイヤーはREST AP​​Iを介してEngine(MS)から情報をリクエストします。データはコントローラーに渡され、適切なビュー(JSP、JavaScript/jquery/css/htmlなどの組み合わせ)に提供されます。

また、AngularJS 2またはNodeJSとJavaScriptを使用して、JavaテクノロジーとTomcatアプリケーションサーバーを、フィードバックが得られたらすぐに置き換えることも検討しています。

データベースの事実

  • 外部/別サーバー
  • 現在MySQL、MSSQLを評価中
  • テーブルあたり1日あたり平均10Kの大量のデータが含まれています
  • 適切に設計されている(DB管理者が主張する正規化/索引付けなど)
  • クエリは非常に長く、適切にインデントされた8 A4です。

これまでのところ、私はこのデザインで高レベルの長所と短所を特定しました。

長所

  1. Java/JavaScript/JSPを使用するレポートMSは、エンジンMSに影響を与えることなく、任意のフロントエンドテクノロジーで簡単に置き換えることができます。
  2. レポートMSはエンジンMSと疎結合されており、他のREST AP​​Iソースを使用できます。
  3. Spring Bootは、Beanの構成と配線の多くを削減し、TomcatとDBが組み込まれています。
  4. ビルドおよびライブラリ管理のためのMavenの使用。

短所

  1. データを転送するためにネットワークを通過する必要があるため、レポートとエンジンMS間のネットワーク遅延。
  2. バックエンドサービス(エンジンMS)およびJSP/JavaScript用のJavaまたはフロントエンド用のAngular JSでの追加のコードの複雑さ。
  3. デバッグが困難なSQLクエリの文字列としてクエリをハードコーディングするDAOレイヤー。
4
dimas

1)JavaテクノロジーをAngular2バージョンに置き換えることはお勧めしません。代わりに、Angular-2をJavaアプリ内に組み込んでください。Angularは、そのフレームワークに多くの劇的な変更を加えています。将来、アプリケーション開発者がangularバージョンを最新のものにアップグレードすることは、複雑で退屈な作業になる可能性があります。

2)データベース領域についてもう1つ提案があります。また、[〜#〜] redis [〜#〜]を非SQLデータリポジトリとして、アーキテクチャの独立した独立した層として追加する必要もあります。 REDISは、次のようなアプリのパフォーマンス向上により、さまざまな機能を実現するのに役立ちます

  • アプリ機能のキャッシュ
  • データ監査
  • アプリユーザーのログ
  • 例外ロギング
  • キーと値のペアでの静的ルックアップデータのストレージ
  • さまざまなデータ構造タイプの有効期限機能を利用する

REDISには、かさばるデータセットであっても、非常に高速な読み取りと書き込みを実行する機能があります。

Javaアプリケーションは、次の場所にある使用可能なAPIを使用してREDISサーバーと通信できます。
https://redis.io/clients#Java

2
Karan