Taro L. Saito
6 min readJul 18, 2019

データ指向アプリケーションデザイン ― 信頼性、拡張性、保守性の高い分散システム設計の原理

分散システム入門の決定書ともいうべきこの一冊をようやく日本に届けることができました。本日(2019年7月18日)発売です。おそらく分散システムのあらゆる側面について、このように網羅的に学べる書籍はここ10年ほどなかったと思われます。

手軽に扱えるデータの量や種類が増える一方、CPUの性能はムーアの法則通りには成長しなくなり、大規模データ処理では、多数のマシンを活用する分散処理が欠かせなくなってきました。クラウドの普及とともに多数のマシンを自ら調達せずとも分散システムを構築できるようにもなっています。

しかし驚くべきことに、今までこの分野に入門するための定番の書籍がありませんでした。分散処理にデータ処理が加わる融合分野である上、オープンソースプロジェクトの進化も速く、専門家同士でも共通の理解を構築するのが非常に難しかった分野です。この本を上手に使うと、既存のOSSプロジェクトの位置付けや、バッチ処理とストリーム処理の違い、データをどう分割し、更新ログをどう活用すれば良いかなど、データを扱う上での基本的な概念が効率的に学習できます。

個別の教科書としては、10年以上も前からあるTanenbaumの“Distributed Systems”、並列計算なら“The Art of Multiprocessor Programming”、トランザクション管理では“Transactional Information Systems”などが理論の学習に適しています。しかし学習を進めていくと、トランザクションのserializabilityとは何か?、分散システムにおけるlinearizabilityとの違いは?、実システムではどうこれらの問題に対処しているのか?など、各々の分野の教科書を読むだけでは答えられないような疑問がたくさん出てきます。最新の論文を読み込み、実装における落とし所まで知ってようやく腑に落ちるといった具合です。

このように最新の知識を追い続けるのは、それ自体を仕事とする研究者でもない限り難しいことです。本書でも紹介されているPaxosという複数ノード間での合意を取るプロトコルの論文がありますが、理論を理解するまでには何度も論文を読みなおす必要があるでしょう。しかし、技術そのものを使うだけなら、同じ状態が複数のノードから見える、という当たり前(であるべき)保証でしかなく、さらに後続の研究により実用的な改良が加えられ、Raftなどエンジニア寄りに書かれて普及した同等の技術も登場しています。「点」の知識だけではなく、「線」として知識の変遷を追う必要があるため独学するのが大変な分野なのです。

過去にCAP定理という言葉が流行り、あたかもこれが分散システム設計の前提という風潮になったこともありましたが、この本ではCAP定理を(その対象となるシステムの狭さから)実用上有益ではないと言い切り明確に終止符を打っています。過去の文献を読むだけでは、このように忘れ去るべき知識についての情報は得られないので、知識をリフレッシュする意味でも本書は役に立つでしょう。実際、CAP定理が話題になると、この本を紹介するだけで話が終わるようになり便利になりました。

本書を読み進めていくうちに、100% 常に動くシステムを作ることの難しさを知り、99.99%の稼働率でも期待した動作をするシステムを作るための考え方が養われていくと思います。特に冪等性(idempotency)は、私が勤めるArm Treasure Dataのエンジニアなら真っ先に検討する項目で、同じAPIリクエストが2回以上繰り返されても、データに不整合が生じないようシステムやプロトコルを設計する必要があります。APIにリクエストを送信するクライアント側も、当然のようにネットワークやマシンの障害を想定してリトライする仕組みを導入するのが社内の常識になっています。

本書の翻訳は玉川さんの甚大な努力によって行われたものですが、監訳にあたっては、英語でパラグラフを読んだイメージ(意味空間とでも言いましょうか)と、日本語の翻訳から得られるイメージが極力近くなるように心がけました。まだ日本語として定着していない用語も多く、無理に過去の訳語を当てはめたり造語を作るよりは、英語をそのまま併記して、後々自分で文献や技術を追う際の助けとなるように配慮しました。分野の常識や、アメリカ文化に馴染みがないと訳しにくい箇所も多く、そういう意味では良いところで貢献できた気がしています。

対象とする読者は、エンジニアや研究者はもちろん、データを扱って仕事をするデータサイエンティストや、Webサービスを構築してビジネスを起こす人なども含まれます。データがシステムの裏側でどのように処理されるかを知っていることはデータに基づいた決断への自信にもつながります。生物学でもシーケシング技術の急速な発展により、ゲノム情報という大規模データを突然手にしたため、エンジニア以外でも使えるデータ処理の基盤を整えることが急務になっています。

本書をガイドとすることで、何百本も論文を読むのに必要だった時間が節約できるだけでなく、今まで膨大な情報に埋もれて理解が進まなかった分野についても効率よく学習できることでしょう。興味を持ったテーマに関しては、ぜひ関連文献にある記事や論文にまで手を伸ばして読み進めてみてください。長らく本書が現れなかったように、次の10年もこのような良い知識の集大成の本が出てくるとは限りません。データ処理には未解決の問題が山積みで、本書から先に進むには自ら知識やデータを集めて、それをもとに考えていく習慣が必要になるはずです。

この本を手に取った皆様が、データを上手に活用し、新しい世界への道を切り開いていけるようになることを願います。

(本書の前書きより、一部編集して抜粋)

Taro L. Saito

Ph.D., researcher and software engineer, pursuing database technologies for everyone http://xerial.org/leo