[レポート]DBの新トレンド?!リアルタイムサイジング ~ パンドランドにおけるTiDB運用の裏側 #CEDEC2024 #classmethod_game

[レポート]DBの新トレンド?!リアルタイムサイジング ~ パンドランドにおけるTiDB運用の裏側 #CEDEC2024 #classmethod_game

Clock Icon2024.09.02

こんにちは、ゲームソリューション部のsoraです。
今回は、CEDEC2024のセッションレポートを書いていきます。

セッション概要

https://cedec.cesa.or.jp/2024/session/detail/s6661527e7d3f5/

受講スキル:

  • ゲーム開発に関わる方
  • データベースでお悩みを抱えている方

得られる知見:

  • 分散型データベースの基本的な概念とTiDBの特徴理解
  • ゲーム基盤でのTiDB活用ポイント
  • DB選定時のワンポイント

セッション内容:

ゲーム業界のインフラエンジニアがこぞって頭を悩ませている課題として、データベースの水平シャーディングを前提としたサイジングがあげられると思います。想定されるDAUなどからシャーディングに落とし込むというプロセスは、言うのは簡単ですが実際の設計は困難を極めます。また、想定と異なればどのタイミングでサービスを止めて、どうスケールするかを考えなければなりません。
パンドランドでは前述の課題解消のため、TiDBと呼ばれるNewSQLデータベースを利用しています。TiDBはこれまでのデータベースとは違い、メンテナンス時間を設けなくてもサービスインしたままエンドユーザーへの影響なくデータベースの拡縮が行えます。本セッションは、パンドランドのリリース後、実際にTiDBをどのように運用しているかその裏側をのぞき見るセッションです。

レポートpart1(TiDBの紹介)

はじめに

本セッションの登壇者様とワンダープラネット社のTiDBを導入したゲームタイトルの紹介です。
sr-cedec2024-tidb01
sr-cedec2024-tidb02
sr-cedec2024-tidb03
以降はTiDBの紹介、ワンダープラネット社でのTiDBの開発・検証・運用の話という流れで進んでいきます。

TiDBの特徴

TiDBの特徴は以下スライドです。
TiDBはMySQL互換のNewSQLデータベースであり、書き込みを含めた水平/垂直スケール・高い可用性・オードシャーディングが特徴です。
ダウンタイムなくスケールアップ・スケールアウトできるのも特徴です。
本セッションのテーマ外ではありますが、列指向でデータを持つことができ、分析用のDBとしても使用することができます。
ゲーム業界ではMySQLが多く、特に頭を悩ませるシャーディングに対してもTiDBで解決できます。
sr-cedec2024-tidb05

MySQL互換

TiDBはMySQL互換ではありますが、100%の互換性を持っているわけではありません。
ストアドプロシージャ・スパーシャル(空間データ)など一部サポートされていない機能はあるものの、ゲーム業界ではあまり使われていない機能が多いとのことです。
ワンダープラネット社でも互換性で問題になることはなかったとのことです。
sr-cedec2024-tidb06

TiDBアーキテクチャ

TiDBのアーキテクチャは以下です。
TiDBは1つのクラスタに集約されていて、それぞれのコンポーネントの台数の調整が可能です。
sr-cedec2024-tidb07
TiKVにて、データの実態は分散してKey-Value形式で保存されつつ、ACIDトランザクションの特徴を持ちます。
シャーディングはプライマリキーのレンジを使って自動で行われています。
sr-cedec2024-tidb08
TiFlashはオプションで追加可能なコンポーネントで、列指向のデータストアで組み込み型のDWHです。
分析用途で使用されますが、現状ゲーム業界ではあまり使われていないとのことです。
TiFlashは後付け可能であり、TiKVからレプリケーションをとることで使用することができます。
sr-cedec2024-tidb09
TiDBはアプリからリクエストを受けるコンポーネントで、クエリを解析して行指向のTiKVか列指向のTiFlashのどちらに割り振るかを選定します。
sr-cedec2024-tidb10
PDは司令塔的な立ち位置で、コンポーネントのやり取りを管理するコンポーネントです。
フルマネージドサービスであるTiDB Cloudでは意識しないコンポーネントとなります。
sr-cedec2024-tidb11
リージョンと呼ぶデータの区切りで、その区切りに対してLeader・Followerの関係を持ってデータを管理します。
障害が起きてもLeaderの役割を他のFollowerに移すことで、対応が可能です。
sr-cedec2024-tidb12

レポートpart2(検証・開発・運用)

検証

検証の実施については以下です。
TiDBは複数のコンポーネントがあり、コンポーネント同士で通信が発生するため、レイテンシは若干遅くなります。
どの程度かというと、全ワークロードで一桁msを要求されるとなると厳しいとのことです。
sr-cedec2024-tidb13
詳細は昨年のCEDEC2023のセッションにて説明されており、当時レポート記事を書きました
https://dev.classmethod.jp/articles/cedec2023-tidb/

開発

ワンダープラネット社における構成は以下です。
ユーザデータ・ログデータは、書き込みが多くTiDBを使用しており、ログデータはS3に移して定期的にTTLで自動削除しているとのことです。
マスターデータは、作成時に物理DDLを多用しTiDBでは物理DDLが遅いため、Amazon Auroraを使用しています。
PingCAP社によると、TiDBにおける物理DDLのアップデートを予定しており、処理速度が改善されるとのことでした。
sr-cedec2024-tidb14

TiDBの使い分けは以下です。
Dedicatedは、最新バージョンを使用できたり機能制限がなかったり最小構成でもそれなりの費用が掛かることがあるため、ServerlessやSelf-Hostedを活用しているとのことです。
sr-cedec2024-tidb15

意識したことを3つ挙げています。
オートインクリメントも使おうと思えば使えるが、ホットスポットを回避するためにUIDを採番している。
オートインクリメントはゲーム業界ではあまり使われていないとのことです。
TiDBはダウンタイムなしでスケールアップ・ダウンができますが、コネクション断が発生するため、その対処もされています。
TiDB Cloudではまだ利用できませんが、現在TiProxyというクライアントのリクエストをTiDBに割り振るプロキシが出てきており、それを利用することで対応可能とのことです。
sr-cedec2024-tidb16
sr-cedec2024-tidb17
sr-cedec2024-tidb18

運用

初期構成については以下です。
台数を増やすかスペックを上げるかについて、どこかのTiDBノードがホットスポットにならないために、スペックを上げることで対応しています。
これが結果的には良かったとのことです。
sr-cedec2024-tidb19

リリースは乗り切ったものの、データ転送料金が想定以上にかかっていたとのことです。
特定のTiKVノード1台の負荷が高く、スケールダウンができず、負荷を分散させる必要がありました。
sr-cedec2024-tidb20
sr-cedec2024-tidb21

3つの工夫したことは以下です。
TiDBは分散型DBがゆえにコンポーネント間で通信が発生します。
AZを跨ぐ通信には費用がかかるため、同一AZのFollowerからもデータを読み取るようにすることで料金を抑えることができます。
利用することでレイテンシが悪化することもあるため、設定を調整しつつ導入したとのことです。
sr-cedec2024-tidb22
sr-cedec2024-tidb23
TiKVではサロゲートキーがプライマリキーであり、インデックスでデータを取得する場合にインデックスから見たプライマリキーを取得して値を取得する形になります。
インデックスがダメではないですが、TiKV的にはプライマリキーで引いてくるのが一番効率が良く、通信費用も抑えることができるとのことです。
sr-cedec2024-tidb24
sr-cedec2024-tidb25

運用で工夫したことのまとめです。
想定とずれていたものが解消したとのことです。
sr-cedec2024-tidb26
sr-cedec2024-tidb27

まとめ

以下がまとめです。
sr-cedec2024-tidb28

感想

昨年と合わせて、TiDB Cloudを実際に検証・開発・運用した話が聞けて勉強になりました。
特にリリースして認識と異なったこと、それに対してどう対処したかの部分を、実際のTiDB Cloudの設定値を交えた部分が聞けて良かったです。
TiDB Cloudは万能なDBではないものの、特に現在MySQLを使っていてシャーディングに悩むゲーム会社様にはとても良いデータベースだと思います。
クラスメソッドでもTiDB Cloudを扱っているため、もし興味があればお問い合わせください。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.