コンテンツにスキップ

ストレージ領域@マイクロサービスアーキテクチャ

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. DBのデザインパターン

共有DBパターン (Shared database)

▼ 共有DBパターンとは

各マイクロサービスで共有するDBを1個だけ用意する。

この場合、単一のDB上で、スキーマやテーブルをマイクロサービスごとに作成する必要がある。

▼ マイクロサービス別のスキーマ

共有DBの場合に、マイクロサービス別にスキーマを作成する。

microservices_share-db_diff-table


▼ マイクロサービス別のテーブル

共有DBの場合に、マイクロサービス別にテーブルを作成する。

microservices_share-db_diff-scheme


マイクロサービス別DBパターン (Database per service)

▼ マイクロサービス別DBパターンとは

各マイクロサービスで個別にDBを用意する。

ローカルトランザクションや分散トランザクションを実施する必要がある。

microservices_diff-db

▼ 境界づけられたコンテキスト分割とも相性がいい

マイクロサービスを境界づけられたコンテキスト単位で分割した場合に、マイクロサービスごとに異なる集約エンティティを持つため、永続化のデータ単位を分割できる。

これにより、各マイクロサービスが異なるデータベースを持っていても、トランザクションは異なるはずである。


02. マイクロサービス別DBパターンの場合

ローカルトランザクション

▼ ローカルトランザクションとは

1個のトランザクション処理によって、1個のマイクロサービスのDBやスキーマ (MySQLの文脈ではスキーマがDBに相当) を操作する。

推奨される。

マイクロサービスアーキテクチャでローカルトランザクションを使用する場合、これを連続的に実行する仕組みが必要になる。

また、これらの各DBに対する各トランザクションを紐付けられるように、トランザクションにID (例:UUID) を割り当てる必要がある。

▼ ローカルトランザクションの実行パターンの種類

ローカルトランザクションベースのトランザクションパターンとして、Sagaパターンがある。


グローバルトランザクション (分散トランザクション)

▼ グローバルトランザクションとは

分散トランザクションとも言う。

1個のトランザクションが含む各CRUD処理を異なるDBに対して実行する。

トランザクション中の各CRUDで、宛先のDBを動的に切り替える必要がある。

非推奨である。

▼ グローバルトランザクションの実行パターンの種類

グローバルトランザクションのトランザクションパターンとして、二相コミット (2フェーズコミット) がある。


03. 保管データの暗号化

記入中...