大規模なHBase環境が抱える課題
HBaseの課題は“運用負荷”だろう。特にHadoopエコシステムやZooKeeperへの依存性が高く、設定やチューニングが複雑になってしまいがちだ。渡邉氏は「そもそもHBaseを理解している人材も少なく、運用や開発の難易度は高いでしょう」と話す。また、リージョンサーバーが停止してしまうと、長時間のダウンタイムが発生してしまう点、ユーザーごとのデータ管理が難しく、アクセス制御やリソース使用量の計測、費用分配なども複雑になる点などを指摘する。
さらに大きな課題となるのが、“クラウドネイティブ環境への適用”だ。HBaseをKubernetes上で運用するハードルは高く、クラウド間やデータセンター間の移行も容易ではないため、システム環境の変化に柔軟に対応できない。加えて、HBaseではアプリケーション側でスキーマやトランザクション管理を意識する必要があるだけでなく、Javaクライアント以外の公式サポートが乏しいなど、開発効率も損なわれる。
そうした理由からもサイバーエージェントでは、移行先としてTiDBを選定。その理由の1つが「HBaseと同等の性能をもっていること」だ。TiDBでは、HBaseと同様に手動でシャーディングすることなくリード/ライト(Read/Write)の双方でスケールアウトできる。先述したようにレイテンシーの側面でHBaseに劣ってしまうケースもあるが、サイバーエージェントでの利用範囲内では十分な性能が発揮できているという。
2つ目の選定理由は、先に示したHBaseの課題を解決できる点だ。TiDBはクラウドネイティブ環境下で適用しやすく、Kubernetes向けのコントローラーである「TiDB Operator」を使うことでTiDBクラスターを容易にデプロイ可能だという。また、構築や監視、バックアップなどに必要なツールも取りそろえられており、運用者向けだけでなく、ユーザー向けダッシュボードも提供されているため、エラーやスロークエリの発生なども簡単に確認できる。
なお、選定における重要要素である耐障害性について、サイバーエージェントではクラスターのノードを意図的にダウンさせて検証。その結果として、多少サービスへの影響はあるものの、許容範囲に収まることが確認できたと渡邉氏。HBaseと比べて運用管理の負担も軽くなるだけでなく、ダウンタイムが短くなることもわかったという。
一方、TiKVに関してはQPSの低下が見られたものの、これはリージョンのリーダーがダウンした際に、次のリーダー選出までに10秒ほどかかることが原因だとする。TiDBに関しては、ノードダウンで接続しているクライアントはコネクションエラーとなるが、クライアントがリトライすれば問題ないとも話す。
「TiDBは、ユーザー管理機能が優れており、強力かつ柔軟なセキュリティとアクセス制御が可能です」と渡邉氏。特定ユーザーがリソースを使い過ぎることを防止するためのレート制限機能があり、ダッシュボードから各ステートメントがどれくらいリソースを消費しているかなども容易に把握できる。たとえば、1ヵ月あたりどれくらいリソースを使ったのか、そのデータをSQLで取得できるため、該当部門への費用請求も簡単だという。
TiDBはMySQL互換があるため、既存データベースがMySQLの場合、ユーザーの実装負荷も低く、学習コストをかけずに既存ツールを利用できる点もTiDBの評価ポイントとなる。複雑なクエリも実行でき、TiFlashで分析クエリも高速に処理可能だ。データの一貫性も担保されるため、アプリケーション側も単純化できるとして「アプリケーション開発者が本来の機能実装に専念できます」と渡邉氏は述べる。