第Ⅱ部分散データ

技術が成功を収めるには、宣伝よりも現実が優先されなければならない。自然を欺くことはできないのだから。

――Richard Feynman, “Rogers Commission Report”(1986)

本書の第Ⅰ部では、単一のマシンにデータが保存されるような場合にあてはまるデータシステムについて論じました。そして第Ⅱ部ではもう一段高い視点から疑問を発しましょう。データの保存と抽出に複数のマシンが必要になると、どういったことが起こるのでしょうか?

複数のマシンに渡ってデータベースを分散したい理由はいくつもあります。

スケーラビリティ
データの量、読み取りの負荷、書き込みの負荷が単一のマシンの手には余るほどになってきたら、複数のマシンに負荷を分散させるという方法があります。
耐障害性/高可用性
1台のマシン(あるいは複数のマシンやネットワーク、あるいはデータセンター全体)がダウンしてもアプリケーションが動作し続けなければならないのであれば、複数のマシンを使って冗長性を持たせることができます。1台に障害が起きても、他のマシンが代理を務めてくれます。
レイテンシ
ユーザーが世界中にいるなら、世界中の様々な場所にサーバーを配置して、それぞれのユーザーが地理的に近いデータセンターからレスポンスを受けられるようにできます。こうすることで、ユーザーが地球を半周してくるネットワークパケットを待たずにすむようになります。

Ⅱ.1 高負荷に対応するスケーリング

必要なことが高負荷に対応するためのスケーリングだけなのであれば、最もシンプルなアプローチは今よりも強力なマシンを購入することです(これは垂直なスケーリングあるいはスケールアップと呼ばれることもあります)。多くのCPU、多くのRAMチップ、多くのディスクを1つのオペレーティングシステムの下に集結させ、さらに高速なインターコネクトがあれば、任意のCPUが任意のメモリやディスクにアクセスできるようになります。この種の ...

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.