Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「最高のコンテンツ」を支える、Cygamesのデータベース技術の今までとこれから 〜次世代データベース「TiDB」の検証を開始したCygamesの取り組み〜

Cygames
December 23, 2022

「最高のコンテンツ」を支える、Cygamesのデータベース技術の今までとこれから 〜次世代データベース「TiDB」の検証を開始したCygamesの取り組み〜

2022/11/18 db tech showcase 2022 Tokyo

Cygames

December 23, 2022
Tweet

More Decks by Cygames

Other Decks in Technology

Transcript

  1. 12/140 現⾏アーキテクチャ概要 MySQL RDBMS 基本的なアーキテクチャ ⽔平分割 シャーディング 垂直分割 レプリケーション+MHAクラスター構成 構成のイメージ

    を利⽤ MHA Cluster1 MHA ClusterN ……… Primary sharding Online DB/OLTP Secondary sharding Hot Stand by/OLAP Tertiary sharding Backup/For data lake For Cold Backup Powered by MySQL MHA Cluster2 Replication Replication メンテナンス (サービス停⽌) スケールアウト データリバランス バランシングルール更新
  2. 29/140 浦⾕ 和茂 CTO室 / Senior Database Administrator 2013年株式会社Cygamesへ⼊社 CTO室所属のDBAとして

    Cygamesの新規プロジェクトから既存のプロジェクトまで 全タイトルの基幹データベースの構築と改善を横断的に担当 ⾃⼰紹介
  3. 30/140 1. TiDBを選択した理由 2. TiDBの検証 3. TiDBにおけるその他取り組み Chapter2 アジェンダ おまけ

    ・TiDBの環境構築について ・検証環境構築の⾃動化について ・ダミーQUERYの増幅について セッション発表対象外
  4. 52/140 パラメータ 説明 pconnect コネクションプーリングの有無 rate QPSをコントロールする場合に使⽤する 例)1=1秒間に1リクエスト、10=1秒間に10リクエスト maxOpenConns 同時接続数(クエリの並列度)

    例)30=30コネクション接続してクエリを 同時に実⾏する 「※pconnect=trueの場合のみ有効」 maxIdleConns maxOpenConnsと同じ値 「※pconnect=trueの場合のみ有効」 duration 実⾏時間 例)10s=10秒間実⾏した後に処理を終了する reporter reporter [text, json, plot, hist[buckets]] 1秒あたりのリクエスト数 及び、同時接続数等を 調整しながら検証する TiDBの検証について︓QUERYの実⾏に使⽤したツール
  5. 54/140 Bucket # % Histogram [0s, 3s] 558428 88.02% ##################################################################

    [3s, 5s] 41401 6.52% #### [5s, +Inf] 34671 5.46% #### Histogram Plot HistogramやPlot等の 形式でレイテンシを出⼒ vegeta-mysqlのレポート TiDBの検証について︓QUERYの実⾏に使⽤したツール
  6. 57/140 Component Instance Name Instance Type TiDB構成 PD load-tidb-pd-cluster-0X m5d.2xlarge

    TiDB load-tidb-mysql-cluster-0X m6i.4xlarge TiKV load-tidb-tikv-storage-cluster-0X m5d.4xlarge モニタリング Monitor load-tidb-monitor m6i.4xlarge TiDBの検証環境 インスタンスはAmazon EC2を使⽤ 本番環境の推奨事項と同等のスペック TiDB cluster name︓load-tidb-cluster TiDB cluster version︓v6.1.0 Prometheus version︓2.27.1 Grafana version︓v7.5.11 TiDBの検証について︓検証環境 0X=シャード番号(01、02、03...)
  7. 58/140 Component Instance Name Instance Type 負荷掛け元 majin-vegeta-mysql-0X t3.medium QUERYの実⾏に使⽤したツールで説明したvegeta-mysqlの環境

    vegeta-mysqlをスケールさせて魔神の如く負荷を与える仕組みのため ツール名をMajin-Vegeta-Mysql(mvm)と名付け インスタンスはAmazon EC2を使⽤ 負荷掛け元の環境 TiDBの検証について︓検証環境 0X=シャード番号(01、02、03...)
  8. 67/140 Key Visualizerを確認することで直感的にテーブルの⼤きさがわかる TiDBの検証について︓検証データの準備 +-----------+------------------------------------------------+------------------------------------------------+ | REGION_ID | START_KEY |

    END_KEY | +-----------+------------------------------------------------+------------------------------------------------+ | 1302 | t_713_i_1_04564b3e628350a9830400000000a044f83a | t_713_r_47025 | | 1204 | t_713_r_47025 | t_713_r_111668 | | 1218 | t_713_r_111668 | t_713_r_191338 | | 1220 | t_713_r_191338 | t_713_r_231476 | | 1254 | t_713_r_231476 | t_713_r_291338 | | 1256 | t_713_r_291338 | t_713_r_331476 | | 1266 | t_713_r_331476 | t_713_r_391338 | | 1268 | t_713_r_391338 | t_713_r_431476 | | 1288 | t_713_r_431476 | t_713_r_491338 | | 1290 | t_713_r_491338 | t_713_r_531476 | | 1294 | t_713_r_531476 | t_713_r_591338 | | 1296 | t_713_r_591338 | t_713_r_631476 | | 1322 | t_713_r_631476 | t_713_r_691338 | | 1324 | t_713_r_691338 | t_713_r_731476 | | 1336 | t_713_r_731476 | t_713_r_791338 | | 1338 | t_713_r_791338 | t_713_r_831476 | | 1348 | t_713_r_831476 | t_713_r_891338 | | 1350 | t_713_r_891338 | t_713_r_931476 | | 1360 | t_713_r_931476 | t_713_r_991338 | | 1362 | t_713_r_991338 | t_713_r_1031476 | | 712 | t_713_r_1031476 | t_715_ | | 1340 | t_713_ | t_713_i_1_04564b3e628350a9830400000000a044f83a | +-----------+------------------------------------------------+------------------------------------------------+ 22 rows in set (0.04 sec +-----------+----------------+----------------+ | REGION_ID | START_KEY | END_KEY | +-----------+----------------+----------------+ | 1282 | t_775_ | t_775_r_200161 | | 774 | t_775_r_200161 | t_777_ | +-----------+----------------+----------------+ 2 rows in set (0.01 sec)
  9. 73/140 TiDBの検証について︓実施した検証 [1] load-tidb- mysql-cluster- 01 load-tidb-pd- cluster-01 load-tidb-tikv- storage-

    cluster-01 QUERY 1 QUERY 2 QUERY 3 majin-vegeta- mysql-02 majin-vegeta- mysql-03 majin-vegeta- mysql-01 負荷かけ先 負荷かけ元 負荷かけ元から load-tidb-mysql-cluster-01に対してQUERYを実⾏
  10. 77/140 ・TiDB1台あたりの最適なQPSを⾒つけるためのシナリオです ・同時接続数は900固定で1秒間のリクエスト数を変動させます(増分値=150) ・負荷掛け元の台数は3台なのでリクエスト数と同時接続数は3倍の値です ・シナリオ1-1 ︓1秒間のリクエスト数=6500、同時接続数=300(19500、900) ・シナリオ1-2 ︓1秒間のリクエスト数=6550、同時接続数=300(19650、900) ・シナリオ1-3 ︓1秒間のリクエスト数=6600、同時接続数=300(19800、900)

    ・シナリオ1-4 ︓1秒間のリクエスト数=6650、同時接続数=300(19950、900) ・シナリオ1-5 ︓1秒間のリクエスト数=6700、同時接続数=300(20100、900) ・シナリオ1-6 ︓1秒間のリクエスト数=6750、同時接続数=300(20250、900) ・シナリオ1-7 ︓1秒間のリクエスト数=6800、同時接続数=300(20400、900) ・シナリオ1-8 ︓1秒間のリクエスト数=6850、同時接続数=300(20550、900) ・シナリオ1-9 ︓1秒間のリクエスト数=6900、同時接続数=300(20700、900) ・シナリオ1-10︓1秒間のリクエスト数=6950、同時接続数=300(20850、900) ・シナリオ1-11︓1秒間のリクエスト数=7000、同時接続数=300(21000、900) ・シナリオ1-12︓1秒間のリクエスト数=7050、同時接続数=300(21150、900) TiDBの検証について︓実施した検証 [1]
  11. 78/140 ・QPS約20000のシナリオ1-6が最適なQPSの境界なので⼀部のシナリオを省略します ・シナリオ1-1 ︓1秒間のリクエスト数=6500、同時接続数=300(19500、900) ・シナリオ1-2 ︓1秒間のリクエスト数=6550、同時接続数=300(19650、900) ・シナリオ1-3 ︓1秒間のリクエスト数=6600、同時接続数=300(19800、900) ・シナリオ1-4 ︓1秒間のリクエスト数=6650、同時接続数=300(19950、900)

    ・シナリオ1-5 ︓1秒間のリクエスト数=6700、同時接続数=300(20100、900) ・シナリオ1-6 ︓1秒間のリクエスト数=6750、同時接続数=300(20250、900) ・シナリオ1-7 ︓1秒間のリクエスト数=6800、同時接続数=300(20400、900) ・シナリオ1-8 ︓1秒間のリクエスト数=6850、同時接続数=300(20550、900) ・シナリオ1-9 ︓1秒間のリクエスト数=6900、同時接続数=300(20700、900) ・シナリオ1-10︓1秒間のリクエスト数=6950、同時接続数=300(20850、900) ・シナリオ1-11︓1秒間のリクエスト数=7000、同時接続数=300(21000、900) ・シナリオ1-12︓1秒間のリクエスト数=7050、同時接続数=300(21150、900) TiDBの検証について︓実施した検証 [1]
  12. 79/140 レイテンシは 1msから100msに 集中しているが 3秒以内のレイテンシが 分散してしまう… Bucket # % Histogram

    [0s, 1ms] 2703 0.07% [1ms, 2ms] 233493 6.41% #### [2ms, 3ms] 308158 8.45% ###### [3ms, 5ms] 162300 4.45% ### [5ms, 10ms] 196722 5.40% #### [10ms, 20ms] 365855 10.04% ####### [20ms, 30ms] 434485 11.92% ######## [30ms, 50ms] 952457 26.13% ################### [50ms, 100ms] 876815 24.06% ################## [100ms, 200ms] 84012 2.30% # [200ms, 300ms] 14597 0.40% [300ms, 500ms] 8372 0.23% [500ms, 1s] 3757 0.10% [1s, 2s] 1034 0.03% [2s, 3s] 240 0.00% [3s, 5s] 0 0.00% [5s, +Inf] 0 0.00% シナリオ1-6 詳細の結果 TiDBの検証について︓実施した検証 [1]
  13. 80/140 3645000リクエストを3秒以内で100%処理を完了した結果 レイテンシの判定として100%であればOK Bucket # % Histogram [0s, 3s] 3645000

    100.00% #### ・・・ #################### [3s, 5s] 0 0.00% [5s, +Inf] 0 0.00% Bucket # % Histogram [0s, 1ms] 2703 0.07% [1ms, 2ms] 233493 6.41% #### [2ms, 3ms] 308158 8.45% ###### [3ms, 5ms] 162300 4.45% ### [5ms, 10ms] 196722 5.40% #### [10ms, 20ms] 365855 10.04% ####### [20ms, 30ms] 434485 11.92% ######## [30ms, 50ms] 952457 26.13% ################### [50ms, 100ms] 876815 24.06% ################## [100ms, 200ms] 84012 2.30% # [200ms, 300ms] 14597 0.40% [300ms, 500ms] 8372 0.23% [500ms, 1s] 3757 0.10% [1s, 2s] 1034 0.03% [2s, 3s] 240 0.00% [3s, 5s] 0 0.00% [5s, +Inf] 0 0.00% レイテンシが3秒以内の場合は [0s, 3s]に集約される TiDBの検証について︓実施した検証 [1] 結果を3秒以内に集約して表⽰ ヒストグラムの結果を ⾒やすくするため
  14. 81/140 Bucket # % Histogram [0s, 3s] 3564000 100.00% ####

    ・・・ ############################# [3s, 5s] 0 0.00% [5s, +Inf] 0 0.00% [シナリオ1-3︓19800、900] 19800×180=3564000 Bucket # % Histogram [0s, 3s] 3645000 100.00% #### ・・・ ############################# [3s, 5s] 0 0.00% [5s, +Inf] 0 0.00% [シナリオ1-6︓20250、900] 20250×180=3645000 Bucket # % Histogram [0s, 3s] 3679982 99.49% #### ・・・ ############################# [3s, 5s] 10875 0.29% [5s, +Inf] 8143 0.22% [シナリオ1-8︓20550、900] 20550×180=3699000 19800 20250 20550 レイテンシが ⾼くなり始めている TiDBの検証について︓実施した検証 [1] 期待するQPS
  15. 90/140 最⼩要件の構成にするためインスタンスを追加 TiDB構成の台数が増えたため負荷かけ元の台数を増やしています TiDBの検証について︓実施した検証 [2] TiDB構成 load-tidb-pd-cluster-01 load-tidb-pd-cluster-02 load-tidb-pd-cluster-03 load-tidb-mysql-cluster-01

    load-tidb-mysql-cluster-02 load-tidb-tikv-storage-cluster-01 load-tidb-tikv-storage-cluster-02 load-tidb-tikv-storage-cluster-03 TiDBの環境を最⼩要件の構成で構築する 負荷かけ元 majin-vegeta-mysql-01 majin-vegeta-mysql-02 majin-vegeta-mysql-03 majin-vegeta-mysql-04
  16. 93/140 Bucket # % Histogram [0s, 3s] 3672000 100.00% ####

    ・・・ ############################# [3s, 5s] 0 0.00% [5s, +Inf] 0 0.00% 期待するQPS 20400 TiDBの検証について︓実施した検証 [2] 1秒間のリクエスト数=6750、同時接続数=300 20250、900 QPSが最適なシナリオ 20400、1800 1-6 1台あたりの「load-tidb-mysql-cluster」への負荷 10200、900 20400、1800 1秒間のリクエスト数=5100、同時接続数=450 2-1 [シナリオ2-2︓21200、1800] 21200×180=3816000 スケールアウト実⾏後に負荷が減ることを再確認するシナリオ 負荷掛け元の台数は4台なのでリクエスト数と同時接続数は4倍の値
  17. 94/140 Bucket # % Histogram [0s, 3s] 3672000 100.00% ####

    ・・・ ############################# [3s, 5s] 0 0.00% [5s, +Inf] 0 0.00% 期待するQPS 21200 TiDBの検証について︓実施した検証 [2] 1秒間のリクエスト数=7050、同時接続数=300 21150、900 レイテンシが徐々に落ちるシナリオ 20400、1800 1-12 1台あたりの「load-tidb-mysql-cluster」への負荷 10600、900 21200、1800 1秒間のリクエスト数=5300、同時接続数=450 2-2 [シナリオ2-2︓21200、1800] 21200×180=3816000 スケールアウト実⾏後に負荷が減ることを再確認するシナリオ 負荷掛け元の台数は4台なのでリクエスト数と同時接続数は4倍の値
  18. 96/140 Bucket # % Histogram [0s, 3s] 5760000 100.00% ####

    ・・・ ############################# [3s, 5s] 0 0.00% [5s, +Inf] 0 0.00% [シナリオ2-3︓32000、1800] 32000×180=5760000 期待するQPS 32000 TiDBの検証について︓実施した検証 [2] 最⼩要件構成⽤シナリオ シナリオ:2-3 最適なQPSを元に実⾏する最⼩要件構成⽤のシナリオ 負荷掛け元の台数は4台なのでリクエスト数と同時接続数は4倍 1秒間のリクエスト数=8000、同時接続数=450 1台あたりの「load-tidb-mysql-cluster」への負荷 32000、1800 16000、 900
  19. 106/140 TiDB構成に対してスケールアウト構成「TiDB7台+TiKV6台」を追加 TiDBの検証について︓実施した検証 [3] TiDB構成 load-tidb-pd-cluster-01 load-tidb-pd-cluster-02 load-tidb-pd-cluster-03 load-tidb-mysql-cluster-01 load-tidb-mysql-cluster-02

    load-tidb-tikv-storage-cluster-01 load-tidb-tikv-storage-cluster-02 load-tidb-tikv-storage-cluster-03 TiDB、TiKVを9台構成で構築する スケールアウト構成 load-tidb-mysql-cluster-03 load-tidb-mysql-cluster-09 load-tidb-tikv-storage-cluster-04 load-tidb-tikv-storage-cluster-09 追 加 … …
  20. 108/140 ・最適なQPSを元に実⾏する最⼩要件構成⽤のシナリオ ・負荷掛け元の台数は4台なのでリクエスト数と同時接続数は4倍 期待するQPS 32000 TiDBの検証について︓実施した検証 [3] 最⼩要件構成⽤シナリオ Bucket #

    % Histogram [0s, 3s] 19200000 100.00% #### ・・・ ############################# [3s, 5s] 0 0.00% [5s, +Inf] 0 0.00% [シナリオ2-3︓32000、1800] 32000×600=19200000 レイテンシは100% (影響なし) 1秒間のリクエスト数=8000、同時接続数=450 1台あたりの「load-tidb-mysql-cluster」への負荷 32000、1800 16000、 900 シナリオ:2-3
  21. 123/140 ・最⼩構成⽤のシナリオ(2-3)をそのまま使⽤ ・負荷掛け元の台数は18台なのでリクエスト数と同時接続数は18倍 ・最後の仕上げとして負荷かけの時間は30分で実⾏ 期待するQPS 144000 TiDBの検証について︓実施した検証 [4] 1秒間のリクエスト数=8000、同時接続数=450 1台あたりの「load-tidb-mysql-cluster」への負荷

    144000、8100 16000、 900 最⼩要件構成⽤シナリオ シナリオ:2-3 ヒストグラムの結果は実⾏時間を30分に変更したため vegeta-mysqlが出⼒する「result.bin」の肥⼤化がボトルネックに 途中でパフォーマンスが低下したためレポートをOFFにして実⾏ [シナリオ2-3︓144000、8100] 144000×1800=259200000
  22. 127/140 QPS Component PD TiDB TiKV 144000 3 9 9

    288000 3 18 18 576000 3 36 36 1152000 3 72 72 2304000 3 144 144 TiDB server1台あたりの最適なQPSから算出した台数 検証は必要だが、理論的な値は上記になる TiDBの検証について
  23. 132/140 144000 QPS 216000 QPS 288000 QPS 最適なQPS 16000×18=288000QPS TiKV

    serverを増やす事でQPSを増加させることも可能 TiDBの検証について Grafana︓TiDB︓Query Summary︓QPS Grafana︓TiDB︓Server︓CPU Usage TiDB serverのみを増やす事でQPSが増加することを確認
  24. 133/140 TiDB serverをスケール 台数は想定するQPSを元に増減する QPS Component PD TiDB TiKV 144000

    3台固定 9台を最⼤として増減 ストレージのサイズ に合わせて増加 288000 18台を最⼤として増減 576000 36台を最⼤として増減 1152000 72台を最⼤として増減 2304000 144台を最⼤として増減 TiDBの検証について TiKV serverをスケール 台数はストレージのサイズに合わせて増加する 短期的 中・⻑期的
  25. 147/195 TiDBの環境構築について Component Instance Name Comment TiDB管理 TiUP tidb-manager TiDB管理環境

    (TiUPコマンド実⾏環境) TiDB構成 PD tidb-pd-cluster-0X TiDB cluster環境 TiDB tidb-mysql-cluster-0X PD cluster環境 TiKV tidb-tikv-storage-cluster-0X Storage cluster環境 モニタリング Monitor tidb-monitor モニタリング環境 0X=シャード番号(01、02、03...) TiDB cluster name︓tidb-cluster TiDB cluster version︓v6.1.0 TiDB環境構築リスト
  26. 152/195 TiDBの環境構築︓デプロイ前の事前準備 1. TiUPをインストール curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh

    | sh 2. TiUP環境変数を設定 source .bash_profile 3. TiUPクラスターコンポーネントをインストール tiup cluster 4. TiUPクラスターコンポーネントのアップデート tiup update --self && tiup update cluster 5. mysql clientをインストール(必要に応じて) TiUP 実⾏環境 Deploy a TiDB Cluster Using TiUP︓https://docs.pingcap.com/tidb/stable/production-deployment-using-tiup
  27. 153/195 TiDBの環境構築︓デプロイ前の事前準備 • NTP設定 • NUMAコントロール設定 • データディレクトリのI/Oスケジューラ設定 • cpufreqモジュールの電源ポリシー設定

    • OSプロファイル設定 • リソース制限設定 • THP(Transparent Huge Pages)無効 [カーネルパラメータ設定] • ファイルディスクリプタ制限設定 • TCP/IPソケット接続要求制限設定 • Syncookie無効 • オーバーコミット有効 (上限=実メモリサイズ) • システムスワップ無効 TiDB Environment and System Configuration Check︓https://docs.pingcap.com/tidb/stable/check-before-deployment TiDB基本構成+Monitor +
  28. 154/195 TiDBの環境構築︓デプロイ⽤のトポロジを準備 global: user: "tidb" deploy_dir: "/tidb-deploy" data_dir: "/tidb-data" server_configs:

    {} pd_servers: - host: tidb-pd-cluster-01 - host: tidb-pd-cluster-02 - host: tidb-pd-cluster-03 tidb_servers: - host: tidb-mysql-cluster-01 - host: tidb-mysql-cluster-02 tikv_servers: - host: tidb-tikv-storage-cluster-01 - host: tidb-tikv-storage-cluster-02 - host: tidb-tikv-storage-cluster-03 monitoring_servers: - host: tidb-monitor grafana_servers: - host: tidb-monitor alertmanager_servers: - host: tidb-monitor topology(yaml) にデプロイ対象の TiDBの構成を記載 Topology Configuration File for TiDB Deployment Using TiUP︓https://docs.pingcap.com/tidb/stable/tiup-cluster-topology-reference tidb-cluster-topology.yaml「TiDB基本構成+Monitor」記載例 tidb-managerへ アップロード ※hostの名前解決をしない場合は IPアドレスを記載する
  29. 161/195 TiDBの環境構築︓クラスターをデプロイ TiDBクラスターをチェックした結果が 全てPassであればデプロイ実⾏可能です topology fileに記載された全てのホストが対象 TiDBクラスター名とTiDBのバージョンを指定 Deploy and Maintain

    an Online TiDB Cluster Using TiUP︓https://docs.pingcap.com/tidb/stable/tiup-cluster#deploy-the-cluster tiup cluster -y deploy tidb-cluster v6.1.0 tidb-cluster-topology.yaml [-i The path of the SSH identity file.]
  30. 162/195 TiDBの環境構築︓クラスターを開始 デプロイしたTiDBクラスターを開始 TiDBクラスター名を指定 Deploy and Maintain an Online TiDB

    Cluster Using TiUP︓https://docs.pingcap.com/tidb/stable/tiup-cluster#start-the-cluster tiup cluster start tidb-cluster
  31. 163/195 TiDBの環境構築︓クラスターのステータスを確認 デプロイしたTiDBクラスターを確認 Deploy and Maintain an Online TiDB Cluster

    Using TiUP︓https://docs.pingcap.com/tidb/stable/tiup-cluster#check-the-cluster-status tiup cluster display tidb-cluster TiDBクラスター名を指定
  32. 164/195 TiDBの環境構築 tidb-managerからデプロイした TiDBクラスターの情報を取得 Deploy and Maintain an Online TiDB

    Cluster Using TiUP︓https://docs.pingcap.com/tidb/stable/tiup-cluster#view-the-cluster-list tiup list tidb
  33. 166/195 検証環境構築の⾃動化について 概要 ツール名 略称 EC2インスタンス構築 AWS-Automation-Support aas TiDB環境構築 TiDB-Deployment-Manager

    tdm 負荷試験環境構築 Majin-Vegeta-Mysql mvm 下記のツールを使⽤して⾃動化 検証環境 簡単ではありますが説明します
  34. 169/195 検証環境構築の⾃動化︓EC2インスタンス構築 TiDB [tidb_instance.cnf] load-tidb-manager load-tidb-pd-cluster-01 load-tidb-mysql-cluster-01 load-tidb-tikv-storage-cluster-01 load-tidb-monitor load-tidb-pd-cluster-03

    load-tidb-mysql-cluster-09 load-tidb-tikv-storage-cluster-09 instance.cnfは機能別に分けて管理 majin-vegeta-mysql [mvm_instance.cnf] majin-vegeta-mysql-01 majin-vegeta-mysql-02 majin-vegeta-mysql-03 majin-vegeta-mysql-04 majin-vegeta-mysql-05 majin-vegeta-mysql-06 majin-vegeta-mysql-07 majin-vegeta-mysql-18 … …
  35. 171/195 検証環境構築の⾃動化︓EC2インスタンス構築 「TiDBインスタンス作成」の例 mvm_ instance.cnf EC2インスタンス管理完了 load-tidb-manager load-tidb-pd-cluster-01 load-tidb-mysql-cluster-01 load-tidb-tikv-storage-cluster-01

    load-tidb-monitor load-tidb-pd-cluster-03 load-tidb-mysql-cluster-09 load-tidb-tikv-storage-cluster-09 … パラメータ ・tidb ・create ec2_orchestration _instance 処理は全て 並列処理で実⾏ tidb_ instance.cnf
  36. 175/195 TiDB構築に必要な初期設定やdeploy⽤yamlの⽣成 及びTiDB Clusterを管理 tidb_setup 検証環境構築の⾃動化︓TiDB環境構築 tidb_hosts_setup ・tidb-manager ・tidb-cluster ・check

    ・deploy, scaleout, scalein ・start, stop ・etc. tidb_init_setup TiUPコマンドを使⽤ tidb_tiup_tools tidb_orchestration_setup tidb_yaml_generator
  37. 183/195 負荷試験を実⾏するためのcnf 負荷かけ元・負荷かけ先・負荷レベルを⼿動で設定して調整 [mvm_attack_scenario.cnf] 検証環境構築の⾃動化︓負荷試験環境構築 [mvm_query.cnf] ・QUERYファイルの情報 [mvm_load_source.cnf] ・負荷かけ元の情報 ・負荷かけ元情報及びQUERY情報のINDEX

    ・vegeta-mysqlで使⽤する負荷のINDEX ・負荷かけ先情報のINDEX ・QUERYのタイプ ・ALL ・SELECT, INSERT, UPDATE [mvm_load_level.cnf] ・RateやConns等の負荷のレベル [mvm_load_destination.cnf] ・負荷かけ先の情報
  38. 185/195 検証環境構築の⾃動化︓負荷試験環境構築 mvm環境 TiDB環境 load-tidb-mysql-cluster-01 load-tidb-mysql-cluster-03 load-tidb-mysql-cluster-02 load-tidb-mysql-cluster-09 実施した検証 [4]で実⾏した環境での負荷かけイメージ

    … … mvm_ orchestration majin-vegeta-mysql-01 majin-vegeta-mysql-02 majin-vegeta-mysql-03 majin-vegeta-mysql-04 majin-vegeta-mysql-18 majin-vegeta-mysql-17 majin-vegeta-mysql-05 majin-vegeta-mysql-06
  39. 190/195 ダミーQUERYの増幅について MySQL UNIQUE QUERY QUERY FORMAT BASE QUERY QUERYのフォーマットは

    データモデルから データ型を取得して変換 Uint64⽣成 SELECT user_name FROM tbl_user WHERE user_id = N SELECT user_name FROM tbl_user WHERE user_id = _bigint_ parse データ型 tbl_user user_id BIGINT user_name VARCHAR QUERYをパースして ユニークQUERYとUint64を⽣成 SELECT user_name FROM tbl_user WHERE user_id = 1
  40. 192/195 ダミーQUERYの増幅について BASE QUERY MySQL UNIQUE QUERY QUERY FORMAT SELECT

    user_name FROM tbl_user WHERE user_id = N SELECT user_name FROM tbl_user WHERE user_id = _bigint_ 検索 取得 parse 1118 DUMMY QUERY DUMMY INSERT 出⼒ 出⼒ INSERTやUPDATEも同様の⼿順で⽣成しています SELECT user_name FROM tbl_user WHERE user_id = 1 Uint64⽣成 INSERT INTO tbl_user (user_id, user_name) VALUES (1118, ʼxxxʼ) SELECT user_name FROM tbl_user WHERE user_id = 1118 BIGINTのサイズ内で 乱数⽣成
  41. 193/195 ダミーQUERYの増幅について マイページ QUERY プロジェクト マイページ ダミーQUERY プレゼント QUERY ガチャ

    QUERY 負荷試験 増幅 プレゼント ダミーQUERY 増幅 ガチャ ダミーQUERY 増幅 マイページの 負荷レベルで設定 プレゼントの 負荷レベルで設定 ガチャの 負荷レベルで設定 QUERY実⾏ QUERY実⾏ QUERY実⾏ TiDB マイページ を1回実⾏ プレゼント を1回実⾏ ガチャ を1回実⾏ 出⼒ 出⼒ 出⼒ 各機能を1回実⾏して機能毎にQUERYを管理して増幅 疑似的に負荷試験を⾏う等の応⽤も可能