本連載では、業界の第一線で活躍する著名エンジニアたちが、それぞれの視点で選んだ書籍について語ります。ただのレビューに留まらず、エンジニアリングの深層に迫る洞察や、実際の現場で役立つ知見をシェア!初心者からベテランまで、新たな発見や学びが得られる、エンジニア必読の「読書感想文」です。
Metaの精鋭エンジニアたちが「設計の最適解」を導くために頼る一冊。世界規模の開発を支えるシステム設計のバイブル
NEW! スキル
著名エンジニアが、独自の視点で「おすすめ書籍」を紹介する本連載。
今回の語り手は、コンピュータサイエンス学習プラットフォーム「Recursion」の共同創業者であり、Metaでのソフトウェアエンジニア経験を持つJeffry Alvaradoさんだ。
Jeffryさんが「学生時代に出会ったものの、その真の価値を理解したのはMetaで世界規模のインフラに携わってからだった」と振り返る一冊がある。現代の分散システム設計における決定版とも言える名著『データ指向アプリケーションデザイン』(オライリー・ジャパン)だ。
スケーラビリティや信頼性、一貫性といった、データ集約型アプリケーションが直面する複雑な課題をどう乗り越えるべきか。
Jeffryさんが実務を通じて得た「トレードオフの本質」と、本書を「二度読むべき理由」について語ってもらった。
発売日:2019年07月18日
著者:Martin Kleppmann 監訳:斉藤 太郎 訳:玉川 竜司
出版社:オライリー・ジャパン
ISBN:978-4-87311-870-3
原書:Designing Data-Intensive Applications
書籍概要:現代の分散システム設計においてデータの扱いは重要な課題です。システムはスケーラビリティ、一貫性、信頼性、効率性、メンテナンス性を維持する必要があり、そのためにリレーショナルデータベース、NoSQLデータストア、ストリーム、バッチプロセッサ、メッセージブローカーなどのツールが数多く存在します。 本書は、データを処理し、保存するさまざまなテクノロジーの特性を詳述することで、ツールの長所と短所を理解し、システムの課題と使用するアプリケーションに適した選択肢の発見を助けます。
本書を読んだ背景
私が初めてこの本を手に取ったのは大学生の頃です。アプリケーションをスケールさせる際の、データの仕組みを学ぶためでした。ここで言うスケールは、1000人規模のデータ保存・処理要件から、1000万人規模へと拡大するようなケースを指します。
当時の私は、システム設計面接(*)の練習をする際の参考資料として使う程度で、それほど深く読み込んではいませんでした。
本書は面接対策として非情に優れた一冊ですし、ビッグデータを扱う感覚を概念的に掴むのには良い本です。
一方で、バックエンドのデータアーキテクチャに関する実務経験が乏しいジュニアエンジニアにとっては、本書で語られている重要な知恵の多くは、少し難解に感じられるかもしれません。実際に、当時の私もそうでした。
この本が私のバイブルとなったのは、Metaのような大規模な企業で働き始めてからのことです。
世界規模のインフラ環境に身を置く中で、異なるデータアーキテクチャを採用した際に必ず生じる「ペインポイント(苦労する点)」や、その選択肢におけるメリット・デメリットの議論が、現実の課題として腹落ちしました。
デメリットを制御しつつ、大量のデータを処理するためにシステムをどうバランスさせるか。あるケースではそのデメリットは完全に許容可能ですが、別のケースではバックアッププランが必要です。
自社のシステムが直面している課題と、これまで適用されてきた解決策。そのつながりが明確に見えるようになったのです。その時、この本に書かれている「知恵」の意味がようやく理解できました。
大規模システムでの実務を一度経験すると、この本は「珠玉の一冊」に変わります。
二度読む価値がある、そんな本です。
一度目は実務経験がない状態で、大規模データ処理・保存の全体像を把握するために。そして二度目は、実務経験を積み、実際にシステムの設計を任されるようになった時です。
その時こそ、本書は真の輝きを放ちます。
(*)主にソフトウェアエンジニアの採用で、Webサービスなどの大規模システムを構築する能力を評価する面接
本書で得られた学び・教訓
本書の核心は、大量のデータ処理や保存を必要とするアプリケーションの開発手法を学ぶことにあります。
こうしたアプリケーションの場合、バックエンド設計のアプローチは多岐にわたり、アプリケーション固有の要件に応じて考慮すべきトレードオフが無数に存在します。
そのため設計の際には、自分自身やチームに対して多くの問いを投げかけることになります。
「読み取りが多いのか、それとも書き込みか?」
「データ量はどのくらいか?」
「全ユーザーが常に最新データを参照できる必要があるか? それとも多少の遅延は許容可能か?」
「複数のユーザーが同時に同じデータを更新する可能性はあるか?」
「書き込みは『一部成功』でも良いのか? 『全成功か全失敗か(アトミック性)』であるべきか?」
データ集約型のアプリケーションを設計する際、こうした問いは尽きません。本書は、データ側の設計において、これらの問いに対する判断基準となる基礎力を授けてくれます。
具体的には、下記のようなメソッドを学ぶことができます。
●ACID特性を保証する一般的なSQLを使うべきか、あるいは多種多様なNoSQLデータベースを使うべきかの判断基準
●内部データ構造やスキーマ設定の違いによるデータベースの最適化手法
●レプリケーションやパーティショニング技術を用いて、読み取りや書き込み、あるいはその両方をスケーリングさせる方法
また、こうした設計の選択肢に伴うメリット・デメリットの紹介も秀逸です。あらゆる選択にはトレードオフが伴います。「銀の弾丸」は存在しません。
エンジニアの真の仕事は、アプリケーション固有のニーズに基づき、どのデメリットを許容し、どのメリットを最大化するかを選択することです。本書はそのための「思考の枠組み」を構築してくれます。
実務での活用方法
高度なデータ要件を持つアプリケーションの設計経験がない場合、まずは一通り読んで土台を作り、どのような技術が存在するのかを知ることから始めてください。
もし、すでにこうしたアプリケーションを運用していたり、開発に着手したばかりであれば、本書は特定の問題を解決するためのガイドブックになります。本書には、従うべき「経験則(ルール・オブ・サム)」や推奨事項、業界標準の設計パターンが詰まっています。
おすすめの使い方は、まず自分のシステムのデータ要件について自問自答することです。その上で、これまでに培った基礎知識をもとに初期設計案を作成してみましょう。
設計の過程で、解決策が分からない問題や、どれが最善か迷う箇所をメモしておき、まずは全体図を完成させて要件を深掘りします。その後、本書を参照して未知の解決策を探したり、自信のない選択肢について最適なオプションを検討したりするのです。
本書は、デメリットに注意を向けつつ、課題に取り組むための道筋を実に見事に示してくれます。
例えば、100万人のユーザーを抱える大規模なソーシャルネットワークを構築するとしましょう。検討の結果、以下のような要件が見えてきたとします。
●ほとんどのユーザーは閲覧メイン(読み取り90%、書き込み10%)
●投稿の書き込みに失敗しても致命的ではないが、不完全な状態での投稿は防ぎたい
●他のユーザーへの投稿反映には、数分程度の遅延があっても許容できる
●トレンド投稿や人気クリエイターの投稿に読み取りが集中する
●一度送信された投稿は編集不可とする
●書き込み機能は一時停止してもいいが、閲覧機能は絶対に止めてはならない
これらの条件は非常に具体的であり、このケースに特化した設計の選択肢が存在します。本書は、こうした個別の条件を整理し、最適なソリューションへと導く手助けをしてくれます。
本書を読むことを推奨する人
以下のような方に強くお勧めします。
●大規模システムでのデータ処理・保存の実態を知りたい経験豊富なバックエンドエンジニア
●自社データセンターを持つようなメガテック企業への転職を目指すエンジニア
●データエンジニアやインフラエンジニアを志している方
●システム設計(システムデザイン)のスペシャリストを目指す方
また、アプリケーションのデータ処理をスケールさせたり、最適化したりする必要が生じた時は、いつでも本書を手に取ってみてください。
データベースを用いたアプリケーションの設計・構築経験が一度でもあるのなら、本書を読み始める準備はすでに整っています。
まとめ
Metaのようにデータ集約型のバックエンドを扱う企業では、担当機能の設計や拡張を行う際、本書を手に取り参照する光景は日常茶飯事でした。
データ負荷がそれほど高くないアプリケーションであれば、一般的な構成で十分かもしれません。
しかし、データ集約型のアプリケーションでは最適化が不可欠です。そしてその最適化は、アプリケーション固有のニーズに100%依存します。
本書は、データ保存と処理のテクニックを教えてくれるだけでなく、多様なニーズに対して最適な設計を行うための「強固な基礎」と「直感」を養ってくれる一冊です。
元Meta ソフトウェアエンジニア
Jeffry Alvaradoさん(@jalva_dev)
大学ではコンピュータサイエンスを専攻し、在学中に複数のインターンシップを経験。コンピュータサイエンスが学習できるプラットフォームRecursionを創業し、CTOとしてカリキュラム作成、ソフトウェア開発を担当。元Meta社のソフトウェアエンジニア
文/Jeffry Alvarado 編集/今中康達(編集部)
RELATED関連記事
JOB BOARD編集部オススメ求人特集
RANKING人気記事ランキング
「便利なものを作ったら負け」OSS界の巨人・mattnが語る、アウトプットの心理的ハードルとの付き合い方
「アジャイルの理屈を押し付けない」大手金融機関が10年かけて実践した“アジャイル文化”作りの裏側
「斜に構えるな」ヨビノリたくみ・ソフトバンク・DeNA・GMOの若きリーダーが悩める学生エンジニアに語る、今やるべきこと
「若者よ、技術と資本をぶんどってこい」河野太郎はなぜ、AI時代に“早く世界で叩かれろ”と言うのか?
「休日もコードを書け」は正義か? Ruby父 まつもとゆきひろが肯定する“仕事と割り切る”エンジニアの在り方
タグ