テックキャンプ卒の弱々エンジニア日記

エンジニアとして働く中での学びをちょっとでも記録していきます。

サービスベースアーキテクチャ (ソフトウェアアーキテクチャの基礎13章)

こんにちは、Tochiです。 サービスベースアーキテクチャについてまとめていきます。

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

サービスベースアーキテクチャは 、マイクロサービスアーキテクチャのハイブリッドであり、その柔軟性の高さから最もは実用的なアーキテクチャの1つ。

サービスアーキテクチャの構成は分散型のマクロなレイヤード構造をとり、

  • 個別のデプロイされたユーザインターフェース
  • 個別にデプロイされた粒度の洗いリモートサービス
  • モノリシックなデータベース

から編成される。

ただし単一のユーザインターフェースはドメインごとやドメインサービスごとのユーザインターフェースにも分割は可能。

またデータベースもインターフェース同様にドメインごとに分割することができる。

このドメインサービスは一般に粗い粒度で分割されたもの。 通常ドメインサービスは、APIファザード層・ビジネス層・永続化層などで構成されるレイヤードアーキテクチャで設計されるか、 モジュラーモノリスのようにサブドメインを利用して各ドメインサービスごとにドメインごとに分割する。

いずれにせよAPIPアクセス用にAPIファザード層は含む必要があり、ユーザーインターフェースからのビジネス要求をオーケストレーションする責任を負う。

ドメインの粒度が荒いことで、単一のドメインサービス内でデータベースの整合性を確保するのに、 データベースのコミットやロールバックを含む通常のACIDトランザクションが使用される。 一方、マイクロサービスのような高度な分散アーキテクチャは、一般にサービスの粒度は細かいため、 BASEトランザクションと呼ばれる分散トランザクション技術が使用される。

粒度が荒いので、データの完全性や一貫性は確かに向上するがトレードオフもある、 粒度が荒いことで、ある変更を加えた際にドメインサービス全体をテストする必要があり、より多くのコードがデプロイされるため 故障する可能性が高い。

まとめ

サービスベースアーキテクチャドメイン駆動設計にもフィットしそう。 DBもACIDを担保しつつ、分散アーキテクチャを実現できる点は実務的と感じた。