「過負荷に耐えるWebの作り方 〜国民的アイドルグループ選抜総選挙の舞台裏」を読んだ

読んでみた

秒間10,000アクセスの処理が要件の、AKB48選抜総選挙システムを構築した事例の解説本です。普段そんなにアクセスが来るシステムを触っていないということで、どんな仕組みなのかが気になって読んでみました。

過負荷に耐えるWebの作り方 ~国民的アイドルグループ選抜総選挙の舞台裏 (Software Design plus)

過負荷に耐えるWebの作り方 ~国民的アイドルグループ選抜総選挙の舞台裏 (Software Design plus)

システム面でおもしろかったこと

基本構成は真っ当な感じで、

  • LVSでロードバランサ構築
  • リバースプロキシはVanish
  • アプリケーションはJavaで開発
  • サーブレットコンテナはJetty

なのですが、

『DBにはインメモリデータベースのVoltDBを採用』

というのが珍しいポイントでした。

実はこの本を読むまでVoltDBを知らなかったのですが、

  • インメモリデータベースなのでIO負荷が低く高速
  • ACID特性がある
  • SQLが使える
  • 台数を増やすことでリニアにスケールする

ということで、NoSQLとRDBのいいとこ取り、といった特長を持っているようです。

ただしノードにまたがる集計、更新処理ではノード間の通信量が多くなり、一定量を超えると処理ができないケースがあったとのことで、現状ではあまりメジャーでないこともあり、注意が必要かもしれません。

なお、本の事例では障害時のデータ復旧のためにアプリケーション側でローカルファイルにデータを書き込んでいるとのことでしたが、VoltDBにはデータ永続化機能としてスナップショットを保存する機能*1があるようなので、用途によってはこちらでもいけそうです。

その他の感想

「秒間10,000アクセスが処理できること」という要件ですが、想定では瞬間最大値として秒間10,000アクセスあるかもしれないという話だったのが、いつの間にか営業担当者とお客さんの間で連続秒間10,000アクセスという話になっていた(しかも実際は全然そんなにアクセスが集中しなかった)ということで、無駄じゃんそれ…というのが正直な感想でした。

とは言え、こういった極端な要件をこなすにあたっては実現の上で多くの知見が得られる面もあるので、一度ぐらいはあってもいいのかもしれませんね。