サイバーエージェントを支える技術者たち

第44回メンテナンス時間短縮に向けた取り組み[前編]

サイバーエージェントが提供する「アメーバピグ」において、メンテナンス時間の短縮や安定性の向上が大きな課題となっていました。そこで立ち上げられたのが「ナイトホーク」と呼ばれるプロジェクトです。今回は、このプロジェクトに携わった並河祐貴氏と有馬慶氏に、プロジェクトの内容について伺いました。

毎週火曜日の午前中に3時間のメンテナンス

サイバーエージェントが提供する「アメーバピグ」では、これまで毎週火曜日の6時~9時の3時間を使ってメンテナンスが行われていました。この間は外部からのアクセスが遮断されるため、ユーザにとって不便であるだけでなく、機会損失にもつながりかねません。そこでメンテナンス時間を短縮するべく立ち上げられたのが「ナイトホーク」です。

有馬慶氏
有馬慶氏

サービスの種類に関係なく、メンテナンスの回数が増える、あるいは時間が長くなる要因としてまず挙げられるのは、システム規模の拡大でしょう。アメーバピグにおいても、対応プラットフォームが増えたことによってシステムが大きくなり、必然的にメンテナンスに要する時間も長くなっていったようです。アメーバピグを担当するエンジニアの有馬慶氏は、同サービスにおけるシステム構成を次のように説明します。

「現在アメーバピグはPCだけでなく、フィーチャーフォンやスマートフォンにも対応しています。インターフェース部分はプラットフォームごとに分かれていますが、その背後にあるコアのモジュールやデータベース、画像ストレージ、キャッシュシステムなどは共通で使っています。アメーバピグに新しい機能を追加するといった場合、共通で利用するモジュールに修正が入ったり、あるいはデータベースの内容に手を加えたりすることがほとんどであり、また、その修正内容がすべてのプラットフォームで同時に反映されている必要があるため、どうしてもサービス全体を止めざるを得ないわけです。またアメーバピグにはプロデューサーやエンジニア、デザイナなどを含めて150人近くが携わっており、動作確認だけでも1時間ぐらいはかかってしまいます。この時間を短縮することがプロジェクトの大きな目的でした(有馬氏⁠⁠」

サービス開始当初は今よりもさらにダウンタイムが長かったと、アメーバピグのインフラを担当する並河祐貴氏は話します。

並河祐貴氏
並河祐貴氏

「今から2年半ほど前は、7~8時間かけて緊急メンテナンスを実施するというケースもあったんです。さらに、新機能のリリースといったメンテナンス以外で1ヵ月に10~12時間のダウンタイムがあり、これではユーザの方々に申し訳ないというところがありました。その理由の1つとなっていたのが自作のキーバリューストアだったため、PCIe型の高速ストレージに通常のRDBMSを組み合わせた形で置き換えることになりました。これによってダウンタイムは大分改善されましたが、まだシステム障害で何時間かダウンしてしまうケースがありました。ナイトホークではこうした課題を解決し、安定性を向上させることも目的としていました(並河氏⁠⁠」

データベースの冗長化などでシステムの信頼性を向上

アメーバピグのシステムにおいて、システムの安定動作を脅かす存在となっていたのがシステム内に散在していた単一障害点です。ナイトホークプロジェクトでは、そこに障害が発生するとシステム全体が停止する単一障害点を解消し、安定したサービス提供を実現することにも注力されていたわけです。

「単一障害点になっていたところとしては、たとえばデータベースがあります。マスタ/スレーブ構成にはなっていましたが、マスタが落ちた場合は手動でスレーブをマスタに昇格させる必要があったんです。それで今回のプロジェクトでは、マスタに障害が発生したときに自動的にスレーブを昇格させることができる『MHA(MySQL-MHA:MySQL Master High Availability manager and tools⁠⁠』を導入して冗長化を図っています(並河氏⁠⁠」

また、サーバそのものの信頼性向上も図られました。従来アメーバピグでは、迅速に調達できるメリットなどから自作サーバが使われていましたが、低価格化が進んだこともあり、ベンダ製のサーバに切り替えたと言います。

「自作サーバとベンダ製のものを比べると、安定性はやはり違いますね。自作したサーバは2年経つとトラブルが頻発するような状況でしたが、ベンダ製のものにしてからハードウェア障害で落ちるということはほとんどなくなりました(有馬氏⁠⁠」

このように単一障害点の解消やハードウェアの信頼性向上などといった地道な作業を繰り返し、サービスの安定性を高めると同時に、最大の目的であるメンテナンス時間の短縮も実現します。それを可能にしたアイデアがシステムの二重化です。

「メンテナンス時間については、目標として数分レベルで終わらせたいと考えていました。それをどうすれば実現できるかを考えたとき、最終的に行き着いたのが二重化だったのです(有馬氏⁠⁠」

後編では、このシステムの二重化によってどのようにメンテナンス時間を短縮することができたのか、詳しく解説していきます。

サイバーエージェント公式エンジニアブログ
URL:http://ameblo.jp/principia-ca
エンジニアの生の声を週替わりでお届け中!

おすすめ記事

記事・ニュース一覧