こんにちは。CYBIRDエンジニア Advent Calendar 11日目の伊藤です。
10日目はasukyさんの(このクラウド時代に)仮想化に向いた自作サーバを作る話でした。
自宅にサーバを置くのは冬場はあったかくて良いと思います。しかし電気代がたかそうなのと、電源タップが燃えないか心配になりますね! :D
さて今日は、聖書の話から始めたいと思います。
お題について
アドベントと言えばキリストの待降節ですので、お題は聖書からいただきました。
ルカによる福音書24章は、キリストの復活を述べた章です。
マタイ、マルコ、ルカ、ヨハネの4つの福音書の中でもっともリアルにイエスの復活を描いています。
たとえば、死後三日経ってよみがえったイエスが幽霊扱いされたり、姿形をかえてあらわれたせいで弟子に気づいてもらえず、拗ねたり、突然消えたり、また出たり、お腹がすいたら弟子に焼魚をもらってむしゃむしゃと食べる様子が、簡潔な文章で記されています。
わたしはこの復活のくだりを読む度に、**春日八郎の「死んだ筈だよお富さん」**という歌が脳裏をよぎるのですが、その春日八郎も亡くなってから20年以上たち、月日が経つのは本当に早いことです。
私も、早いもので1999年にサイバードに入社してからもう15年間経ちました。
生き馬の目を抜くイット業界で、凡庸な私でも生き延びることができたのは幸いです。現場ひとすじだったからですねきっと。
いろいろと大変な事もあり、例えば、負荷が集中するwebサイトの開発運営は思い出すたびに肝が冷えます。
最初は経験もなくてどうすることもできず、悔しい思いをしましたが、
スケールアウト、SQLパフォーマンスチューニングに始まり、CDN、クラウド・・と、時代にあわせてだんだん使える武器が増え、工夫を重ねて、こうすれば良いだろう、今回はこれで行こう、と作戦を練るようになりました。
担当案件はwebサイトからスマホ向けアプリゲームに変わりましたが、その時の経験が役立っていることは間違いありません。
その中で、今日は、なんとかなった(なんとかした)けど死ぬかと思ったものを3つ、書こうと思います。
モバイルサイトの負荷対策で大変だったもの
###3位
フレンド募集掲示板
1999年〜2001年
ニートから一念発起して中途入社、1年目に担当していた案件です。
Softbank、auのガラケー向けwebサービスが始まったのと同時に開始したサービスでした。
当初は会社の事務所に秋葉のドスパラで買ったタワー型PCをならべて配信していたのですが、
ケーブルに足を引っかけて配線を抜いて全サービスを止めたり、
地震の時には、サーバーが沢山ならんだ棚が倒れていないか、打ち合わせブースから全力で技術部にかけ戻って、棚を手で抑えたりしていました。
そういう運用には限界がありましたので、当時のCTOの真田さんの英断でとあるデータセンターに間借りして移管しました。
移管後、アクセスが増え、とんでもない勢いで増え続けました。
データセンター側で指定するサーバーを買うと、納期が1ヶ月ほど掛かりますので、恐ろしいことに、例のドスパラで買ったPCwebサーバーを次々と佐川急便で送り、データセンター内の床に置かせてもらって、バランサーに繋ぎ、スケールアウトしました。
そのうちDBサーバーとして使っていたうち1台のPCのパワーが足りなくなり、秋葉でPentium IIIのCPUを購入して差し替えを試みたのですが、ヒートシンクが大きすぎて筐体のフタが閉まらず、屈強な男性(南さん、お元気でしょうか・・)にヤスリで削っていただく間メンテナンスを延長する、という事もありました。
ラックマウントできない上に場所をとるタワー型PCなんぞをよくも置かせてくれたと思います。
ふところの深いデータセンターでした。セグメントはもの凄く隔離されましたけれども。
沢山の方々にご迷惑をかけました。
そしてのどかな時代だったと思います。
###2位
年末特番の携帯特設サイト
2007年〜2009年
暮れの特番でした。
その節は大変お世話になりました。
毎年この特番の特設サイトを運営させていただいていたのですが、
2008年の特番では、新しい連動の試みをすることになり、
ホスティングしているデータセンター上で契約している帯域上限をはるかに越えるアクセスが来る事が想定されました。
CDNを使えば良いのですが、静的ページしか置けません。
特設サイトは、ドコモなどガラケーの公式有料サイトへの入会を導くのが狙いでしたので、
会員認証などの動的ページを織り込む必要がありました。
そこで番組放送中にDNSを書き換え、サイトで使っているサブドメインの向き先をCDNに切り替え、負荷が過ぎ去るほどよい時間帯にまたDNSを書き換えて元のデータセンターに戻す、という事をしました。
調べたところ、ガラケーの端末が参照するDNSキャッシュサーバには特殊な制限があり、こちらの記述したTTLを無視して1時間のキャッシュが効いてしまうケータイキャリアがありました。
そうすると切り替えと切り戻しには最大各1時間づつのオーバーヘッドが発生することになります。
そこでやや博打になるのですが、以下のように「読み」で切り替えを遂行しました。
番組が始まる1時間前にDNSを切り替える
↓
5分〜1時間後、サイト全域がCDNに向く(a)
↓
↓(負荷集中タイム)3000rps〜
↓
番組の終わり1時間前にDNSをきりもどす。当然まだアクセス集中だが、番組後半だと視聴者は内容に集中するため、前半ほど来ないはず
↓
5分〜1時間後、サイト全体が元のデータセンターに向く(b)
↓
会員認証復活、動的コンテンツ配信
弊社役員の池田さんが担当をしていた案件でした。池田さんはもう長い付き合いですし、人情味あふれる良い人ですが、
「(a)はできるだけ遅らせて、(b)は1秒でも速くして欲しい」と特番中に背後で腕組みしてにらんでいたのが、こわかったですね!
###1位
スマホサッカーゲームアプリ
2012年〜
現在の担当案件、バーコードフットボーラーです。
SINは2012年12月12日でした。それから明日でまる2年になります。
ちょうど今、2周年のイベントを沢山やってますので、サッカー好きの方はぜひ遊んでみてくださいね!
・
・
SIN直後から軍師・石坂さんの施策が次々とあたり、さっそくお客様のアクセス数が増え始めました。
12/12 50rps
12/13 80rps
12/14 180rps
12/15 300rps
サービス開始前に1ヶ月以上かけて負荷試験と改修を繰り返し行い、当初考えていた保証ライン、300rpsは達成していたのですが、数日後にはこの閾値に達してしまい、初期のサーバー構成では全然足りないことがすぐに分かりました。
さらに、このゲーム内で行う「代表戦」という毎週末に行うイベントは、当初試合数の制限が無く、多くの試合をプレイして勝ち点を積み上げた人が勝つ、という仕様でした。
(我らがプロデューサー、あべPこと阿部さんも移動の時に圏外を避けて地下鉄を使わず山手線をつかって移動中に試合をしていたそうです。)
そのイベントが開始すると、さらにとんでもないアクセスが集中してしまったので、DBをAWSでいちばん良いやつを頼む事にしました。
・RDSを「クワドラブルエクストララージDBインスタンス」へグレードアップ
・リードレプリカへの処理分散
・webサーバーのスケールアウト
・ElastiCacheのグレードアップ
これまで物理サーバーを買っては搬入していたのが嘘みたいです。
「クワドラブルエクストララージ」というのが何度も言えず、役員の方々に説明する時にかみまくったのを覚えています。
さらに開発スタッフにSlowQueryの見直しを頑張っていただき、なんとか年をこせました。
堀CEOのフェイスブックのウォールに「開発費をください」と書き込んだのもこの頃です。
その後、代表戦の試合数は上限を設けることになったので、それで時間稼ぎしている間に負荷試験では見抜けなかったSlowQueryの見直しや、DBの水平分割、Memcacheの分散、などのチューニングをいろいろと継続して行い、その後いろいろあって今に至ります。
・
・
その後も2年間、沢山のお客様や関係者の方々にご迷惑をかけました。
この場をかりてお詫びと、感謝をお伝えしたいと思います。
見捨てずにいただいてありがとうございます。
これからも精進しますのでおつきあいください。
長くなりましたが、この辺で終わりにします。
また機会がありましたら書こうと思います。
明日は、いつもたいっへんお世話になっているdr_paradiさんのお話です。さいきんだいぶ痩せたような?? エントリ楽しみにしています!