虎の穴開発室ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

「システム設計の面接試験」で最適なシステム設計を学ぶ

はじめに

こんにちは。虎の穴ラボのS.Sです。

この記事は虎の穴ラボ2024 夏の連載企画22日目の記事になります。
前回はnagaさんによる「ソフトウェア開発現場の「失敗」集めてみた。から学んだこと」が投稿されています。
次回はy.fさんによる「「関数型デザイン」を読んで、設計と実装の幅を広げよう!」が投稿される予定です。

今週のテーマは「書評」ということで、システム設計に関する良い本がありましたので、今回はこちらの本をご紹介したいと思います。

書籍情報

タイトル システム設計の面接試験
著者 アレックス・シュウ
発行 ソシム株式会社
発売日 2023年3月27日
ページ数 328ページ

www.socym.co.jp

書籍の内容

タイトルの通り、システム設計に関する面接試験を題材に、各章で面接官から出題されるシステムの要件(問題)から、そのシステムに最適な設計(アンサー)を考えるような内容になっています。
全16章で構成されており、今回はその中でも特に参考になった部分をご紹介したいと思います。

第1章

リリースしたシステムを柔軟にスケールアップ出来るようにするためのシステム設定方法が解説されています。 急なアクセス増加にも対応出来るシステム設計を学びます。

第2章

システム設計を行う上で、必要なデータ量の大まかな見積もり方法が解説されています。
DBの必要スペックの見積もりなどに参考になります。

第4章

大量アクセスに備えたレート制限のシステム設計について解説されています。
レート制限方法にも様々なアルゴリズムがあり、トークンバケットアルゴリズムやリーキーバケットアルゴリズムなどいくつかのアルゴリズムが解説されています。

第7章

様々な条件に合ったユニークIDの採番方法のシステム設計について解説されています。 X(旧Twitter)のポストのID採番でも用いられているSnowflakeという仕組みも解説されています。 

第8章

URL短縮サービスのシステム設計について解説されています。
短縮URLを生成するためのハッシュ値の解説や、リダイレクトの方式について解説されています。
このあたりは、知っておくと実践でもかなり役に立つかと思います。  

第10章

プッシュ通知やメール通知など通知システムに関するシステム設計について解説されています。
通知メッセージのキューの処理や通知メッセージのテンプレートの管理方法など、こちらも知っておくと日々の開発の参考になるかと思います。

第14章

ここから一気にシステムの規模が大きくなり、第14章ではYouTubeを題材とした動画サイトのシステム設計について解説されています。
まずは、動画のアップロードのシステムの設計手法について解説されており、次に動画ストリーミングの設計手法について解説されています。
動画を少しでも効率よくアップロードするためのシステム設計の工夫などが解説されており、このあたりの話はとても興味深い内容でした。

第15章

最後は、Googleドライブを題材にクラウドストレージサービスのシステム設計について解説されています。
実際にクラウドストレージサービスを開発する機会は中々無いかと思いますが、ユーザー同士のファイルの共有設定やアップロードされたファイルの同期など、この辺りのシステム設計はかなり複雑なものですが、読んでみると興味深い内容ばかりでした。

良かったところ

この1冊で、様々なシステム要件に応じた最適なシステム設計が学べるところです。
またシステム設計の解説の中にカラーの図解も多いので、複雑なシステム設計もイメージがしやすい内容になっています。
いくつかパターンを覚えておくだけでも、面接対策はもちろん日々のシステム開発に役立つかと思います。 知っておくと現場でも使える知識が多いため、新人エンジニアからシステム設計手法を学び直したい中堅エンジニアまで幅広くお勧めしたい1冊です。

まとめ

システム設計の面接試験では限られた時間内で、面接官から要求されたシステムを構築するために、正しいシステムを選択できるかが重要ですが、これは日々の開発業務でも同じで、限られた時間の中でお客様から要望されたシステムを構築するための最適なシステムを選択できるかが重要です。
最適なシステムを選択出来るようになるためにも、この本を読んでシステムの設計に関するノウハウを学んでおきたいです。

採用情報

虎の穴ラボでは一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧ください。
toranoana-lab.co.jp