4章データベースを分割する

説明してきたとおり、機能をマイクロサービスへと抽出する方法はたくさんある。ただし、部屋にいる象†1に対処しなくてはならない。つまり、データをどうにかする必要がある。マイクロサービスは、情報隠蔽を実践しているときに最もうまくいく。そのため、私たちは通常、データストレージや取得のメカニズムを完全にカプセル化するマイクロサービスを構築しようとする。このことから、マイクロサービスアーキテクチャに移行する場合に、その移行の力を最大限引き出したいのなら、モノリスのデータベースを分割する必要があるという結論が導かれる。

[†1] 訳注:誰もが見て見ぬふりをしている問題のこと。

しかしながら、データベースを分割することは、簡単な試みとはほど遠い。移行中のデータ同期や、論理スキーマと物理スキーマの分解、トランザクションの整合性、テーブル結合、レイテンシーなどの課題を考慮する必要がある。この章では、これらの課題を見ていきながら、私たちの助けとなるパターンを探っていく。

データベースを分割する方法に入る前に、まずは、共有データベースを管理する場合の課題と、それに対処するパターンを見ていこう。

4.1 パターン:共有データベース

1章で説明したように、結合はドメイン結合、一時的結合、実装結合の3つの観点で考えられる。この3つのうち、データベースを考えるときに最も考慮する必要があるのは実装結合だ。図4-1に示すように、複数のスキーマ間でデータベースを共有するケースが多いからだ。

1つのデータベースを複数のサービスで共有することは、目に見えて多くの問題がある。何よりも大きな問題は、何を共有して何を隠すのかを決める機会を自ら捨てるということだ。それは、情報隠蔽へと向かう動きと真っ向から反する。つまり、スキーマのどの部分を安全に変更できるかを理解するのが難しくなる。外部のサービスがデータベースにアクセスできることが分かったとしても、スキーマのどの部分が使用されているかは分からないからだ。この問題はビューを使用することである程度は緩和できるが、この後説明するように、それは完璧な解決策にはならない。 ...

Get モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.