Developer's Bookshelf

サービスベースアーキテクチャ

サービスを分割するがデータベースは共有するアーキテクチャ。マイクロサービスアーキテクチャに比べると独立性は低いが、複雑さも低い。

参考文献

From ソフトウェアアーキテクチャの基礎 ―エンジニアリングに基づく体系的アプローチ
サービスベースアーキテクチャは、マイクロサービスアーキテクチャのハイブリッドであり、その柔軟性の高さから、最も実用的なアーキテクチャスタイルの1つと考えられている。サービスベースアーキテクチャは分散アーキテクチャだが、マイクロサービスやイベント駆動アーキテクチャなどの分散アーキテクチャのような複雑さやコストはなく、多くのビジネスアプリケーションにとても人気の選択肢となっている。

データベース分割のような「ハードパーツ」が少ないため導入しやすい。


From ソフトウェアアーキテクチャの基礎 ―エンジニアリングに基づく体系的アプローチ
このアーキテクチャスタイルにおけるサービスは、通常、独立して個別にデプロイされる粒度の粗い「アプリケーションの一部」(通常はドメインサービスと呼ばれる)だ。サービスは通常、モノリシックアプリケーションと同じ方法(EARファイル、WARファイル、アセンブリなど)でデプロイされ、コンテナ化を必要としない(ドメインサービスをDockerなどのコンテナにデプロイすること自体は可能だ)。通常、サービスは単一のモノリシックデータベースを共有しており、アプリケーションコンテキスト内のサービス数は一般的に4~12の間で、平均的なサービス数は7個程度だ。

コンテナ化を必要としないが、コンテナ化自体は有効。


From ソフトウェアアーキテクチャの基礎 ―エンジニアリングに基づく体系的アプローチ
サービスベースアーキテクチャの重要な側面の1つに、一般に中央でデータベースを共有するということがある。これにより、従来のモノリシックなレイヤードアーキテクチャと同じように、サービスはSQLクエリや結合を活用できる。サービス数が少ないため(4〜12)、サービスベースアーキテクチャでは通常、データベース接続が問題になることはない。しかし、データベースの変更は問題になることがある。

データベース接続は気にしないといけないが、大きな問題ではない。それよりもスキーマ変更が大きな問題になる。