サービスのユーザー数が増えてくると、これまで気にしなくてよかった問題が一気に噴き出してくる。DBへのアクセスが詰まり始め、検索機能が遅くなり、サーバーのメモリが足りなくなる。小規模な開発では意識しなくて済んでいた「大規模データをどう扱うか」という壁に、いきなり一人でぶつかることになる。『[Web開発者のための]大規模サービス技術入門 ―データ構造,メモリ,OS,DB,サーバ/インフラ』は、その壁を越えるために必要な知識を、実際の演習問題を解きながら身につけさせてくれる本だった。
OSのキャッシュとDBのスケールアウトを実装レベルで学べる
本書はOSのキャッシュと分散の仕組み、DBのスケールアウト戦略という、大規模サービスを支える基盤の部分から丁寧に解説している。単に理論を説明するだけでなく、実際に手を動かして実装する演習が随所に用意されていて、読んだ知識がその場で自分のものになる感覚があった。
全文検索エンジンを自分で作る演習まで用意されている
後半では圧縮プログラミングやアルゴリズムの実用化を経て、はてなキーワードリンクの実装、そして全文検索エンジンの作成という演習課題まで用意されている。既存のライブラリを使うだけでは見えてこない、大規模データを高速に扱うための工夫を、自分の手で実装しながら理解できた。
読んでよかったポイント
- DBのスケールアウト戦略の章を読んでから、自社サービスのDB構成を見直す際にどの選択肢があるのか整理できるようになった
- 全文検索エンジンを自作する演習を通して、普段使っている検索ライブラリの内部で何が起きているのかを具体的にイメージできるようになった
- OSのキャッシュの仕組みを学んでから、パフォーマンスチューニングをする際にアプリケーション層だけでなくOSレイヤーまで視野に入れられるようになった
- 圧縮プログラミングの演習が、大規模データを扱う際のメモリ効率という観点を意識するきっかけになった
- はてなという実際に大規模サービスを運営してきた著者陣の知見がベースにあるので、机上の理論で終わらない実務的な内容だった
まとめ
小規模なサービスで通用していたやり方は、ユーザー数が増えた瞬間に通用しなくなる。まずは本書の演習問題を一つ選んで、実際に手を動かしながら大規模データの扱い方を体験してみてほしい。