by shigemk2

当面は技術的なことしか書かない

過負荷に耐えるwebの作り方 感想

雑な感想

同僚から借りて読むことにした。 曰く「微妙」らしいが、僕は微妙というか地味だと思った。良い意味で。

Puppetで自動化したりとか、AWSでスケーリングしたりとか、 Seleniumでテストしまくったりとかっていうのではなく、 かといってなれるSEみたく時間と人的リソースをフル稼動させてゴリ押しするのではなく、 およそ開発や運用って本当に地味なんだなっていう。

ただ、僕個人として最近思うのは、「その技術をなぜ使うことにしたか」「他の選択肢をなぜ除外したか」っていうのをきちんと説明できるように出来るスキルって必要だなってこと。

P63

アプリケーションサーバの選定に先立って、まずはどの言語を使って投票システムを構築するかを検討しました。開発完了までの期間が短かったこともあり、最初に候補として挙がったのはPythonやRubyといったコンパイルを必要としないLL(Lightweight Language)言語で素早く構築しようという案でした。しかし、大量の同時投票に耐えうるシステムにするという要件が最優先であり、できるだけパフォーマンスが出やすいものを選択したいという点と、これまでの開発経験などを踏まえてJavaによる開発を採用することにしました。

基本Javaですけど、こういう場合PHPとかPerlとか色々あると思うんですよ。

本当は「なんとなく」「他の人がこうしてたから」っていうのも理由っちゃあ理由ですけど、 とりあえず僕がEmacsを使うのは「名立たるエンジニアが使っているから」「達人プログラマーにエディタのカスタマイズが上達への道って書いてあったから」とかそういう理由にします。

あと、AKBのWeb投票システムなんて数多のITベンダーが「是非ウチに!!」って 名乗りを上げた案件の筈なので、高い競争率のなかどうやって受注できたのか知りたかったですね。技術力?営業力?コネ?

AKBのWeb投票システムを構築するために必要なこと

  • 秒間10000アクセス
  • システムダウンしない
  • 不正が行われない

システムを構築するために使われた技術

  • LVS
  • Jetty(起動の高速化)
  • VoltDB
  • SPIRAL vdb
  • Varnish(応答性能向上)
  • SPIRAL(投票結果のマージと集計)

  • ミドルウェアの選定するときは特徴をとらえて適切なものと組み合わせることが重要

  • 時間がないときは軽量フレームワークを使うのも一つの手段
  • 使ったことのないミドルウェアの場合どれだけの情報を収集できるか調べる

  • テストを洗い出す

  • 性能テストにAmazon EC2とかを使う
  • 秒間10000アクセスレベルだとシステムの性能が限界を迎える前にネットワーク帯域がボトルネックになることがある(テストをするための環境が整わない)

  • 障害対応のときの心の準備を予めしておく

  • エゴサーチで障害を確認
  • 障害対応のためには家族の理解が必要
  • Zabbix

  • システムをパッケージ化して他のキャンペーンでも活用

  • 政治の選挙投票システムで使えたらいいなあ