書籍「Designing Data-Intensive Applications」下読み

全体として何に関する本か

ストレージとデータ処理技術に関する基礎概念について、原理と実践の両方の観点を通して、読者がdata-intensive applicationsを構築するための技術選択の意思決定を助ける本である。 この分野は、NoSQL、ビッグデータ、スケーラビリティ、ACID、CAP定理、結果整合性、シャーディング、MapReduceなどバズワードで溢れており、正しい知識を身につけることが難しいため、本にまとめたのではないかと考える。

この本では、タイトルに「データベース」や「分散システム」と書かず、「Data-Intensive Applications」 としている。これは、大量で複雑なデータを扱うアプリケーションというのは、万能のデータベースが1つあれば賄えるものではなく、複数のストレージやデータ処理技術を組み合わせて構築するという切り口であるためである。

どのような構成で知識や概念を展開しているか

この本は3つのパートで構成されている。

  • Part 1では、data-intensive applicationsの設計を支える基礎概念について議論する。reliability/scalability/maintainability、データモデルとクエリ言語、ストレージエンジン、データシリアライゼーションのためのフォーマットとスキーマエボリューション。
  • Part 2では、1台のマシン上のデータから複数のマシンに分散されたデータに移行する。レプリケーション、パーティショニング/シャーディング、トランザクション、一貫性、合意。
  • Part 3では、キャッシュや検索インデックスなど、異なる複数のデータベースを統合する必要のあるヘテロジニアスなアプリケーションについて議論する。バッチ処理、ストリーム処理など。最後に、全てをまとめて、将来的にreliable, scalable, maintenableなアプリケーションを構築するためのアプローチを議論する。

この本を読んで達成したいこと

リバースプロキシ、アプリケーションおよびRDBMSによる、伝統的なサーバサイドのWebアプリケーションアーキテクチャでは耐えられないワークロードに対処するアーキテクチャを設計するために必要な知識・原理を理解すること。 具体的には、各ツール(KafkaやCassandra、Hadoopなど)の原理的な限界を議論できるようになること。

そのアーキテクチャというのは、高度に発達したシステムの異常は神の怒りと見分けがつかない - IPSJ-ONE2017 - ゆううきブログにある観測のためのアーキテクチャであり、大量かつ多次元なデータ収集と多様な参照パターンが必要であると予想できる。

Designing Data-intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems

Designing Data-intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems

著者のMartin Kleppmannは、ケンブリッジ大学の分散システム研究者。その前は、LinkedInとRapportiveで大規模データインフラストラクチャに携わるソフトウェアエンジニアとして働いていたとのこと。

他の方の感想

www.facebook.com