Syestem Design Interview - An Insider's Guide

多くの人がそうでしょうが、今年は室内にいることが多く、私も例年より読書の機会も増えた気がします。

そんななか、今年読んだ技術書の中では、タイトルにも書いた「System Design Interview - An Insider's Guide」という本が面白かったです。

面接の場で、技術者の力量や経験の確かさを量る方法として、抽象的なシステムを提示した上でその構築方法や改善案などを尋ねることが多いと思います。このメソッドのことを「System Design Interview (Questions)」と呼ぶようで、とくにアメリカのテック企業では普遍的によく用いられている方法のようです。
もちろん日本でもSmartNews などでは選考プロセスの中に体系的組み込まれているようですし、ホワイトボードを用いた「System Design Interview」的なディスカッションは多く行われている印象があります。

この「System Design Interview」というプロセスについて、面接時のエンジニアの見極めという視点を超えて、システムを作っていくために重要なポイントがたくさん含まれていると思います。システムの求めていることや課題を見極め、さまざまな制約や条件を理解しつつもそれに対する解決策を検討して提示する、というのは、エンジニアの世界であまねく求められる能力で、とくにシステムの設計に携わる人には必須の能力だと思います。

ということもあり、「System Design Interview」について体系的に述べられた書籍を探していた中で、掲題の書籍についてどこかで誰かの書評を読んで興味をもち購入してみました。実際に内容も平易でわかりやすく、書かれている内容も大変面白かったです。

書籍の概要

この「System Design Interview - An Insider's Guide」という本は、以下のような構成で書かれています。
・基礎的な Web アプリケーションやシステムについての知識 (Introduction)
・System Design Interview のフレームワーク
・フレームワークに則った実例集

最初の Introduction は前提知識のレベルを揃えるためのものと思われ、フレームワークとそれに則った実例集がこの本の要諦かと思います。
ざっくりと、以下の様なことが学べる本だと思います。
・System Design をする際に必要な観点について体系的に整理できる
・実際の多くのサービスで用いられているアーキテクチャや要素技術を、System Design Interview の実例を通じて学べる。

一応、本の体裁は面接における System Design Interview の攻略書的な体ではあり、実際の著者の目的もそうかもしれませんが、読者の体験としては、「様々なサービスで用いられている技術やアーキテクチャを網羅的に学ぶことができる」というのがこの本で得られる体験だと思います。

System Design Interview のフレームワーク

当書では、以下の4つのステップを提唱しています。

Step 1. Understand the problem and establish design scope
Step 2. Propose high-level design and get buy-in
Step 3. Design deep dive
Step 4. Wrap up

まず、Interviewer が提示するシステムの概要を理解した上で、質疑応答を繰り返しながらシステムのスコープを明確にしていきます(Step 1)
その中で考えなければいけない軸は以下のようなものがあり、それらについてディスカッションをしながら相互同意を重ねていきます。
・システム規模(DAU/MAU、データサイズ、ピークトラフィックなど)
・必要とする機能
・対応デバイス、OS
・もっとも大事な機能はなにか
・etc...

実際に書籍に記載されている例文を引用すると以下のような感じです。

Candidate: Is this a mobile app? Or a web app? Or both?
Interviewer: Both.
Candidate: What are the most important features for the product?
Interviewer: Ability to make a post and see friends' news feed.
Candidate: How many friends can a user have?
Interviewer: 5000
Candidate: What is the traffic volume?
Interviewer: 10 million daily active users (DAU)

その上で、システムのラフスケッチを考え、Interviewer に提示し、認識に相違が無いかの確認を行います。(Step 2)
アウトプットの手段としては、コンポーネント図やシーケンス図などの各種の Diagram であったり、必要となるAPI のリストであったり、という感じになると思います。

その上で、いくつかのコンポーネントにフォーカスをあてて、実際にどのような技術を用い、どのようなアーキテクトで構築するか、深堀りして議論をします(Step 3)
当書では様々なシステムを実例として Deep Dive した内容が記載されており、システムアーキテクトの勉強という意味でも大変参考になります。こちらは後述します。 

そして、最後にまとめを行う、という流れです(Step 4)

System Design Interview の実例集

この書籍の中では、実際のシステムを想起させるような System Design Interview の例が数多く掲載されています。
目次を抜粋すると以下。

Chapter 4: Design A Rate Limiter
Chapter 5: Design Consistent Hashing
Chapter 6: Design A Key-value Store
Chapter 7: Design A Unique Id Generator In Distributed Systems
Chapter 8: Design A Url Shortener
Chapter 9: Design A Web Crawler
Chapter 10: Design A Notification System
Chapter 11: Design A News Feed System
Chapter 12: Design A Chat System
Chapter 13: Design A Search Autocomplete System
Chapter 14: Design Youtube
Chapter 15: Design Google Drive

Rate Limiting (Token Bucket, Leaking Bucket) や Consistent Hashingなどのアルゴリズム寄りな例から、ID generator や URL Shortener などのどのサービスでも必要とされそうなコンポーネント群、そして数多くのサービスを想起させるような機能群など、広い範囲で網羅的に揃えられています。

実際の Deep Dive の内容も実践的なものが多い印象です。
アルゴリズムまわりでいうと、たとえば ID Generator では SPOF や Universal 性、そして採番の性能などの課題を解決するソリューションとして Twitter の Snowflake のような Time-Based ID generation の例などが記載されていたり、Autocomplete System では Trie 木を用いた木構造によるTraversalのしくみやその分散方法などについて記載されています。

(Snowflake については以下も参考に)

アーキテクチャの側面だと、たとえばNortification System では、Queue と Worker を横に並べてピーク時の配信遅延が起こらないような構成が例示されていたり、エラー発生時のリトライ機構や、配信状況をモニタリングするための監視やトラッキングのシステムについても記載されており実践的です。

本に記載されている実例は事例としてそこまで最先端ということではなさそうで、たとえば ID generator の例や Trie Treeの例は10年くらい前から事例は存在していて、私も実際に自分で作ったことがあります。
ただそれでも網羅的に様々な事例が掲載されていること、多くの現場で使われているテクニックやアーキテクチャが決まったシンプルなフレームワークに基づいて整理して書かれていることはとても良い点で、広くこの業界のトレンドを概観するという意味ではとても良い本だと思います

また、この本に書かれたようなシステムに精通していない人にとっては、理解のためのとても良い地図であり教科書になると思います。各章の章末には多くのリファレンスが掲載されており、この本を起点にテーマを深堀りして学習を進めていくことが可能な構成になっています。

まとめにかえて

ということで、年の瀬のなんだかんだ慌ただしい中、雑に「System Design Interview - An Insider's Guide」について書評的なものを書いてみました。

平易でそこまで分厚くない書籍ですし、Kindle 版もありますので、Stay at Home な今年の年末年始のお供にもちょうどよい本ではないかと思います。




この記事が気に入ったらサポートをしてみませんか?