読後感 β

IT業界で話題の技術書を読んで感想をしたためるブログです。

モダンな分散システム設計をサクッと覚えられる一冊「分散システムデザインパターン」

分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計

分散システムの開発にはそれ特有の難しさがあります。私も前職でバッチベースの分散システムを設計した経験がありますが、失敗したジョブの管理やワーカー間でのデータの受け渡し、ジョブの重複実行をどう扱うかといったところで苦労しました。可能であれば全てのサービスは、よりシンプルな集中システムとして設計すべきです。開発の難易度が低いため、生産性や品質を担保しやすいでしょう。ですが、スケーラビリティや可用性の向上、処理の高速化といった要件を理由に、現場で分散システムが求められる案件は少なくありません。そして近年、K8s を始めとするオーケストレーションツールの発展によって、分散システム開発を取り巻く環境も大きく変わりました。

GoF によるソフトウェア設計パターン(参考:増補改訂版Java言語で学ぶデザインパターン入門)、SQLアンチパターン など、ソフトウェア業界でパターンと呼ばれるものは古くから存在しますが、本書は分散システムの代表的な設計パターンを紹介する書籍 Designing Distributed Systems の訳書です。原著は K8s の開発者として知られている Google 所属の Brendan Burns 氏の手によって執筆されました。ちなみに、著者は過去にも 入門 Kubernetes を Kelsey Hightower 氏と共著で出版されており、K8s 開発者によって執筆された入門書として印象に残っている方も多いのではないかと思います。

エンジニアにとってパターンを覚えることの利点は、大きく二つあると言われています。一つはそのパターンを業務に取り入れることで設計の質が上がること、もう一つはコミュニケーションの質が上がることです。前者は言わずもがなで、後者についてはそのパターンの存在を各メンバーが共通認識として持つことで、チーム内での設計イメージの共有が容易となります。設計パターンをまとまった情報として提供する本書は、設計業務に携わるシステムエンジニア・インフラエンジニアにとって非常に有益な一冊でしょう。

本書はパターンを淡々と紹介するような内容ではなく、各パターンに対するハンズオンを挟むことで読者に具体的なイメージを提供してくれます。なお、ハンズオンもそうですが「コンテナを使ったスケーラブルなサービス設計」というサブタイトルが付けられているように、K8s を使ったコンテナベースでのインフラ運用という視点で解説は進められます。ただし、頭の中で読み替えることで広いユースケースに適用可能だと思いますので、あなたやあなたのチームが K8s やコンテナの本番運用に現状取り組めていなくても気後れする必要はございません。

参考:紹介されるパターンとその分類

(1) シングルノードパターン
  - サーバシステムにおいて、一台のホスト内に立てられた複数のコンテナが協調する設計。
  - 紹介されるパターン:サイドカー、アンバサダ、アダプタ
(2) マルチノードパターン
  - サーバシステムにおいて、ホスト間にまたがって展開されたコンテナ同士が協調する設計。
  - 紹介されるパターン:ロードバランサの利用、キャッシュの利用、シャーディングなど
(3) バッチパターン
  - バッチシステムにおいて、コンテナ同士が協調して効率的な処理を実現する設計。
  - 紹介されるパターン:ワークキュー、イベント駆動、結合など

ちなみに、本題から逸れる詳細な話題については詳しく書かれていないことがあります。ただし、その辺りについては実際に業務を進める中で必要になったときにガッツリ調べれば良いだけですし、むしろサクッと読めるボリュームに抑えられている点が評価されるべきでしょう。

本書の翻訳を担当されているのは松浦隼人氏です。ご自身も技術者として業務に取り組む傍ら、数々の技術書の翻訳や(私も参加させて頂いている)海外記事の翻訳コミュニティ Yakst の運営など、英語と日本語での情報量のギャップ改善に対して積極的に活動されている方です。本書においてもその実力を遺憾無く発揮されていて、日本のソフトウェア業界で使われる一般的な用語を使いつつ平易な文体で訳されており、非常に読みやすい仕上がりとなっています。

ちなみに、著者は HotCloud '16 において Design Patterns for Container-based Distributed Systems という本書の内容に近い論文を発表しており、この論文は日本でも複数のブログで取り上げられました。HotCloud は USENIX が毎年開催している世界的なカンファレンスの一つで、世界の研究者が集まって主にクラウド技術に関する内容が発表されます。エンジニアとしての裾野を広げる手段として、英語圏のSNSをフォローすることが挙げられますが、こういった著名なカンファレンスの発表内容をチェックするのも世界のトレンドがわかるので面白いですよ。

以上、オライリー新刊「分散システムデザインパターン」の感想でした。次回は、2019年4月26日に技術評論社から発売された「実践Rust入門 [言語仕様から開発手法まで]」の感想を書く予定です。お楽しみにどうぞ。

分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計

分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計

(アフィリエイト無しリンクはこちら