はじめに
こんにちは。DX本部システム開発第一事業部の安彦です。
普段はマネージャー・テックリードとしてWEBアプリケーション開発をしています。
今回は、社内の有志エンジニアで実施した書籍『システム設計の面接試験』(アレックス・シュウ著)の輪読会について、その取り組みや学びを振り返ります。
なぜ「システム設計」の輪読会を始めたのか?
私は要件定義や基本設計の段階で顧客と折衝する機会が多くあります。
そういった場面で、深い技術的な知識を持つことで、顧客からの信頼を得たり、良い提案をしたいと考えました。
そこで、先輩エンジニアの方と一緒に本輪読会を開催することにしました。
募集をかけたところ、14名ほどのエンジニアが参加してくれました。
参加者のプロファイルも様々で、経験年数は新卒からベテランまで、複数の部署から集まり、担当業務もそれぞれバックエンド、フロントエンド、iOSアプリ、インフラにまたがるなど、普段の業務では交わらない多様な視点を持ったエンジニアたちが集まりました。
議論が白熱したトピック
全16章を読んでいく中で、特に盛り上がったトピックをいくつかピックアップして紹介します。
コンシステントハッシュとDBのスケーリング(第5・6章)
「5章コンシステントハッシュの設計」「6章キーバリューストアの設計」では大規模なシステムでのストレージリソースのスケーリングを学びました。
可用性と一貫性のトレードオフ(CAP定理)をどう考えるかという議論が白熱しました。
特にコンシステントハッシュの仕組みについては、「サーバー台数が増減してもデータの引っ越しを少なくする方法」として概念を学びつつ、実務のDBのシャーディングでどのように役立つのか、経験豊富なメンバーから実体験に基づくベストプラクティスが共有され、理解が一気に深まりました。
分散システムにおけるユニークIDジェネレータの設計(第7章)
この章では、分散システムで一意なIDを生成するための設計について学びました。
分散システムでは、RDBのオートインクリメントよりも「Snowflake」や「UUID v7」などのID生成器が適していることを学びました。
経験の浅いエンジニアはID生成がインフラ領域の話と捉えていましたが、経験を積んだエンジニアとの議論で「実はID払い出しの仕組みはアプリケーション領域の関与が非常に大きい」という実務視点での知見を得る場面もありました。
また、実務におけるID生成のリアルな悩みも飛び交いました。
「REST APIでユーザーIDをURLに含める際、推測防止のためにオートインクリメントではなくランダムなIDを使いたい」「でもUUIDを使うとURLが長くなりすぎて辛い」といった現場ならではの課題です。
身近なサービスの裏側を知る(第11・14章)
「11章 ニュースフィードシステムの設計」「14章 YouTubeの設計」では、普段何気なく使っているSNSや動画サービスの裏側を知ることができました。
「11章 ニュースフィードシステムの設計」では、タイムラインを構築するための「書き込み時ファンアウト」と「読み込み時ファンアウト」の組み合わせや使い分けについて議論が盛り上がりました。
また、「14章 YouTubeの設計」では、動画トランスコーディングにおける「有向非巡回グラフ(DAG)モデル」を用いたタスクの並列処理や、人気の高い動画だけをCDNにキャッシュしてコストを削減する戦略など、大規模サービスならではの工夫に驚きの声が上がりました。
輪読会を振り返って
最終回には、これまでの取り組みを振り返る「まとめ回」を実施し、KPT法(Keep, Problem, Try)をベースに議論しました。
Keep(良かったこと)
- 一人では挫折しそうな難易度の本でも、有志で集まり議論することで最後まで読み進めることができた
- 「インフラ構成図を読むときの抵抗感がなくなった」というフロントエンドエンジニアからの嬉しい声も上がり、実務に活きるインプットが得られた
- 若手からベテランまでそれぞれの視点が交わり、実際のシステムに則した実務の経験談を聞けたのが非常に貴重だった
- 「足がちぎれるくらい背伸びをした」という参加者の感想に対し、「その無理した経験がこれから生きていく。ここは背伸びしていいところだから」という先輩エンジニアの言葉が非常に印象的でした
- この背伸びした経験は必ず実務で活きると確信しています
Problem & Try(課題と次への工夫)
- 後半になるにつれて内容が高度になり、完走者が減ってしまった
- これまで夕方に開催していたが、あえて朝に開催してみるなど、参加しやすい時間帯を模索していきたい
- 次回以降は、章ごとに「要約担当」を設けたり、「ブロックごとの理解度ステータス」を導入して、より参加者が理解しやすく、発言しやすい工夫を取り入れていきたい
おわりに
約3ヶ月間、全16章を無事に完走できたことは大きな達成感となりました。
今後も継続して社内勉強会を実施し、部署横断で技術力を高め合っていきたいと思います。
テコテックの採用活動について
テコテックでは新卒採用、中途採用共に積極的に募集をしています。
採用サイトにて会社の雰囲気や福利厚生、募集内容をご確認いただけます。
ご興味を持っていただけましたら是非ご覧ください。
tecotec.co.jp