サイバーエージェントが展開する「Ameba」のスマートフォンプラットフォームにおいて、データベースとして活用されているのがHBaseです。前回に引き続き、この開発を担当したAmeba Technology Laboratory所属の鈴木俊裕氏と善明晃由氏にお話を伺っていきます。
専用APIを用意しHBaseを抽象化
サイバーエージェントは現在、スマートフォン向けのプラットフォーム事業を「デカグラフ」として展開しています。これは個々のサービスを「ミニグラフ」と位置付け、それらをデカグラフとして集約するという構想であり、実際のプラットフォームとして開発されたのが「Ameba」のスマートフォンプラットフォームです。
このプラットフォームはデータベースとしてHBaseを利用しており、その中にソーシャルサービスに向くグラフ構造でデータを格納しています。同社の「Ameba Technology Laboratory」に所属する鈴木俊裕氏と善明晃由氏を中心に開発されたこのデータベースシステムは、すでにさまざまなスマートフォン向けサービスのデータを格納するために活用されています。ただ、運用に至ってもまだまだ苦労は多かったと鈴木氏は説明します。
「プラットフォームなので、当然さまざまな用途を想定して汎用的に設計していますが、それでも想定外の使われ方をすることがあります。今回のデータベースはユーザ認証も担っているのですが、その部分で想定以上のリクエストがあり、あわてて対応したということがありましたね。もちろん、ある程度のキャパシティは担保していますが、それを上回るアクセスだったんです。このほかにも以前はいろいろと問題がありましたが、最近になってようやく落ち着いてきました(鈴木氏)」
前回、HBaseを選定した理由として鈴木氏はスケーラビリティの高さを挙げましたが、当初から余裕を持ったハードウェア構成にしていたこともあり、これまでのところはサーバの追加によるスケールアウトは行っていないとのこと。ただ、近々大きなイベントがあり、その際にサーバの追加などの作業が発生するかもしれないと話します。このように複数のサーバで負荷分散を行う際のポイントとして、スキーマの設計を挙げるのは善明氏です。
「スキーマの設計を間違えると、特定のノードに負荷が偏ってしまいます。HBaseには『Row Key』と『Column』がありますが、ノードにデータを分散する際はRow Keyが最小単位となり、同じRow Keyであれば同一ノードに格納されます。このため、同じRow KeyでColumnを増やし続けると、データが分散されず、同じノードに固まってしまうわけです。つまり、スケーラビリティを高めるには、負荷分散を意識したスキーマにしておく必要があります(善明氏)」
なお前回も解説したとおり、「Ameba」のスマートフォンプラットフォームで使われているHBaseは、各サービスからダイレクトにアクセスするのではなく、専用のAPIによって抽象化されています。このAPIを利用すれば、事前に設計されたスキーマに従ってHBaseに格納されるため、アプリケーションエンジニアがいちいちRow KeyとColumnの関係を意識する必要はないと言います。また運用エンジニアとしても、アプリケーションエンジニアのミスなどにより、特定のサーバにデータが偏ってしまうといったトラブルを事前に防げるというメリットがあるというわけです。
MySQLのリプレースなどHBaseの用途拡大も検討
大規模サービスにおけるデータベースの運用で気になることの1つに、バックアップ方法が挙げられるでしょう。HBaseでデータベースを構築する際、この点にも苦労したとのことです。
「そもそもHBaseはバックアップ系のツールがあまり整備されていないんですね。また最新のバージョンには入っているのに、今回利用したバージョンには含まれていないというものもあります。そのため、新バージョンで提供されているツールを移植したり、HBaseのプラグイン的なしくみを使って自作のツールを組み合わせたりしています。具体的なバックアップ方法は、ライトアヘッドログをバックアップサーバに転送し、そのログを再実行することによってレプリケーションするという方法です。バッチ系であればエクスポートの機能を使えるのですが、本番のHBaseクラスタに負荷がかかるためオンライン用途では難しいですね。ただ、最新のバージョンでは新しい機能が追加されていたりバグもなおったりしているので、今後はバックアップをとりやすくなっていくとは思います(善明氏)」
最後に今後の予定について聞いたところ、鈴木氏はHBaseで構築したこのデータベースの用途をもっと広げていきたいと語ります。
「オンライン系のシステムでHBaseを使うのは初めてだったので苦労している点もありますが、先行投資的な意味合いもあるので積極的にノウハウを蓄積していきたいですね。またHBaseは汎用的に使えるので、今後はさまざまな場面で使えるようになればと考えています。実際にMySQLの置き換えにも使えるのではないかと思っていて、すでに検証も行っています。HBaseはスケーラビリティが高いという特徴もあるので、現状のデータベースの運用面での課題を解決できればいいですね(鈴木氏)」
なおAmeba Technology Laboratoryでは、HadoopやHBaseに興味があるエンジニアを絶賛募集中とのこと。我こそはと思う方は応募してみてください。
- サイバーエージェント公式エンジニアブログ
- URL:http://ameblo.jp/principia-ca
エンジニアの生の声を週替わりでお届け中!