あけましておめでとうございます(いまさらw)。もーすけです。
最近は呪術廻戦にハマっています。ぜひまだ見てない方見てみてください!
さて本題ですが、新年はじめの投稿はデータ指向アプリケーションデザインという書籍についてです。 最近読んだ中で一番良かった本ではないかと思っています。 実は、勤めている会社内でこの書籍の輪読会を行っていて、自分が12章(最終章)を担当しました。 12章はこの本の一番言いたいことが書いてある章でもあったので、本の魅力を理解してもらうのにもしかして役立つのでは!?と思い、この書籍の紹介しつつ、輪読会で発表した内容を動画で解説していきたいと思います。
どんな本なのか?
もしかしたら本のタイトルから「データエンジニアとかデータサイエンスの人とかよむ本かな?」と思ってしまうかもしれません(自分は最初ちょっとそうおもってましたw)。しかし、この本は 「信頼性があり、スケーラブルで、メンテナンス性の高い分散システムをどう作っていったら良いかを原理から学ぶ」 ことを趣旨としています。 そのため、データの保存や処理を行う、ネットワークを介して処理を行うアプリケーションを開発・運用している人ならどんな人にでも役に立つと考えます。世の中にはデータに関するさまざまな製品・ツール・仕組みがあり、なにをどのように選択していけばいいかわからなくなったこともきっとあるでしょう。 残念ながら、この製品使っておけば何でも対応できる!という銀の弾丸はなく、それぞれの特性を理解して問題に対して適切に選択しなければなりません。この書籍では、その選択を行うにあたっての原理原則を理解するのにとても役に立つものです。
ほんとに一部ではありますが、以下のような技術要素をそれぞれ詳しく解説します。
- リレーショナルモデルとドキュメントモデル
- データベースを駆動するデータ構造(ハッシュインデックスやSSTableとLSMツリー、Bツリー、列指向ストレージ)
- データエンコードのフォーマット(JSON, XML, Protocol Buffers, Avroなど)
- レプリケーション(シングルリーダー、マルチリーダー、リーダーレス方式)
- パーティショニング
- トランザクション
- 一貫性と合意
- バッチ処理とストリーム処理
どんな人に読んでほしいか
上にも書きましたが、データの保存や処理を行う、ネットワークを介して処理を行うアプリケーションを開発・運用している人ならどんな人にも読んでほしいと個人的に思っています。 本書の中にはレプリケーションやパーティショニング、分散システムにおける合意などの技術要素の解説があります。AWSなどのパブリッククラウドがメジャーになり、マネージドサービスを選択できるようになったいま、サービスによってはレプリケーションなどはマネージドサービスがやってくれるためブラックボックスになり理解する必要なしと思ってしまいがちな場面もあります。 しかし、パブリッククラウドが提供する多種多様なデータサービスの特性を真に理解して選択できるようになるためにもこの本は役に立ちます。実際に、わたしもこの本を読むことで、いままでなんとなく使い分けていたパブリッククラウドのデータサービスを理解できるようになったし、各社の似ているデータサービスの違いなどにも目がいくようになりました。 マーケティングメッセージに騙されず、サービス選定を行うのに、使いこなしていくのに役に立ちます。
読み方のコツ
内容も難しいし、ページ数もあるので(書籍としては600ページ超)、ひとりで始めから最後まで読み切るのはなかなか難しいかもしれません。 少なくとも自分は難しかったです。そこで、自分なりの読み方のコツを紹介したいと思います。以下の順番で読むのが個人的なオススメです。
- 1章「信頼性、スケーラビリティ、メンテナンス性に優れたアプリケーション」をまず読む。
- 12章「データシステムの未来」を読む。(本ブログの12章の解説動画をみておくといいかも)
- 気になる技術要素の章を読んでいく。
12章「データシステムの未来」の解説
というわけで、12章「データシステムの未来」についての解説について動画にとりましたので、書籍の内容を理解する目的や、読み進めていく中でのヒントにしていただければと思います。 動画で使っている資料についてはこちらから参照できます。
さいごに
今回紹介したデータ指向アプリケーションデザインは、分散システムを構成する上での教科書的な存在で、ほんとうに良書です。 みなさんも良書に出会って、一歩上のエンジニアを目指していってください。