CLOSE

TiDBのトランザクション(全3記事)

NewSQLを使えば新しいデータの置き方も可能になる 分散配置検証で分かったTiDBインスタンスの挙動

Cloud Nativeなシステムを構築するにあたって手助けとなる、アプリケーション開発と運用のアジリティ、可用性、拡張性を支えるさまざまなデータベースを学ぶ「Cloud Native Database Meetup #1」。ここからは、アジア規模の分散配置検証を紹介します。前回はこちらから。

処理の高速化

水戸部章生氏:今までの話を振り返ると、Two Phase CommitはTSOを取得したり、リージョンの位置を把握したり、prewriteしたり、非常に何回もやり取りをするんだなと思いました。このような処理を改善すべく、2021年4月16日に新しいバージョンが出ました。TiDB 5.0では、これらの処理の高速化もサポートしています。

(スライドを指して)1つ目は非同期commitです。今までのcommitは、TSOは取得できますが、commitをするとprewriteをして、prewriteが終わるとまたcommit用のTSOを取得して、commit primaryを行ったらSuccessを返して、そのあとsecondaryのcommitが走るような流れでした。TiDB 5.0については、今回は紹介する時間がありません(笑)。

commit TSをどのようなロジックで設定しているか、別の機会で紹介できればと思います。prewriteをして確定すると、このデータはもう大丈夫ということで、commit処理を非同期で実施するので、ステップが1つ減ることになります。

そのほか、同じリージョンにだけデータを書き込む場合には、1PC、1Phase Commitで書き込む仕組みになっています。こちらは単純に、prewriteなしで1Phase Commitを行う仕組みによって、高速化を図っています。

TiDBの排他制御設定

また、TiDBはデフォルトでは悲観ロックになっています。もちろん他社のデータベースにはデフォルトでは悲観ロックになっているようなものもあるので、それらと合わせる意味もあります。また、先ほど話したとおり、CASやprewriteなどで実際にデータを書き込んだものの、ロックを取られていて元に戻さなければならない時には高負荷になってしまうので、先にロックを取得するような仕組みも使っています。

悲観ロックは、速くするためにいくつか技術的なことを行っています。1つは、メモリ上に2 Phase lockを置くこと。さらに、TiKVのnodeにコーディネーターの役割を持たせて、2PCブロックを回避することです。

(スライドを指して)簡単な図ですが、一番上にコーディネーターの動きがあります。下は、パーティシペーターです。最初にロックを取ったところでそれぞれのパーティシペーターが連絡をして、しっかり取り終わったあとにまた連絡を取り合うような流れで、回数を減らす動きをしています。

TiDBのロードマップ

TiDBのロードマップも共有したいと思っています。TiDBはだいたい1年に1回くらいメジャーバージョンが上がっているので、たぶんこのTiDB 6.0も2022年には出るのではないかなと思っていますが(笑)。日々改善しているようなプロダクトです。

TiDB 6.0では、MySQL 8.0のCompatibilityを取る予定です。また、Cross-region deployment。複数のリージョンをまたいでやっていますが、TiDB 6.0では大阪のアクセスは大阪だけ、東京のアクセスは東京だけといった処理ができるようなデプロイメントもやろうとしています。

ほかにPoint-in-Time-Recoveryです。PiTRやDistributed bulk data importingのような機能も鋭意開発している状況です。(スライドを指して)一応ロードマップを示しますが、計画が変わる可能性もあるので、現状の共有として見ておいてもらえたらと思います。

アジア規模の分散配置検証

最後におまけとして、AWS上での東京・大阪+ソウルの分散配置を少し試してみました。NewSQLなので先ほど話した地球規模まではいけませんでしたが、アジア規模でやってみました(笑)。

私たちのTiDBはAWSでインスタンスを生成して、デプロイが非常に簡単になっています。tiupコマンドで作ったyamlを読み込むと、すぐにインスタンスが作成されて稼働できるという2ステップで作っています。

今回のストアの配置は、大阪リージョンにTiKVと呼ばれるRaftのデータ置き場を3つ、東京リージョンに3つ、ソウルリージョンに1つとなっています。3つのコピーなので、それぞれのデータがしっかり分散されるような仕組みで置いています。

(スライドを指して)東京側に負荷をかけるインスタンスを生成して、この負荷だけを行ってみました。実際やってみると、少しレイテンシーが高くなっています。95パーセントタイルで89ミリセクです。99.9パーセントタイルでは252ミリセクになっていますが、今回はソウルリージョンにもリーダーを配置してしまっています。

今回は東京・大阪間だけでしっかりできるというコンセンサスのためなので、偶数でTiKVを置くとコンセンサスでは過半数が取れないため、ソウルリージョンにだけ1台置いて、そこにはリーダーを置かず、アクセスをしないようにしようと思いました(笑)。しかし、間違ってリーダーも配置してしまったので、89ミリセクと少し高めになっています。

東京・大阪だけでリーダーを配置すると40ミリや30ミリセクくらいになるので、サービスでもけっこう使えるのではないかと思えるくらいのレイテンシーだと思っています。

そして、実際に大阪に落としました。特に大阪がどうというわけではありませんが、たまたま大阪のリージョンの画面を開いていたので(笑)。

実際にリージョンを落としてみたいと思いますが、それはできないので、強制的にインスタンスを落としてみました。その結果、私たちのTiDBのRaftはリーダーのポイントが20秒で移動するようになっています。決して20秒間トランザクションを止めるわけではなく、20秒待機するようなかたちです。

(スライドを指して)上の図がCPUです。下の3つは大阪にあったTiKVノードが落ちているので、右側がなくなっています。一気にCPUが下がって、残りが上がってくる。下の図はTiKVの中にあるリーダーです。リーダーの配置がどうなるか。100個くらいあったリーダーがインスタンスを停止したことによりすべて落ちて、20秒後にほかのリージョンに移動しました。リーダーが移動したことによって、サービスはそのまま継続できます。

トランザクションはエラーなく稼働しているので、TPCC上ではまったくエラーのない状態でした。このようにNewSQLを使うと、新しいデータの置き方もできるのではないかと思っています。

PingCAPの製品とプロジェクト

私から、TiDBがどのような製品か、どのようなトランザクション処理ができるのかを簡単に紹介しました。そして、次のパートも私から始まります(笑)。ここからはPingCAP社として、私たちの製品を少し紹介して売り込もうと思っています。

私たちPingCAPは、製品やプロジェクトを複数持っています。(スライドを指して)こちらは、横軸にサービス型とサブスクリプション型、縦軸にそれぞれのプロダクトと分けて示しています。

左上がNewSQLで、「TiDB Cloud」というクラウド型データベース、フルマネージドサービスを提供しています。今はAWSとGCPの2つはフルマネージドサービスとして提供し、Azureは年内の提供を予定しています。他社のフルマネージドと同じくエンドポイント、つまり、お客さまに渡しても基本的なインフラ部分は私たちが管理する渡し方になります。

また、今紹介したTiDB Cloudの中に入っているTiDB分散型データベースも、通常のプロダクト、製品として出しています。もちろんオープンソースなので、お客さんがダウンロードして使うことも可能です。

NewSQLの中のKey-Valueストアのキーコンポーネント、ACIDサポートをしている「TiKV」と呼ばれるKey-Valueストアも製品として出しています。こちらはCNCFに寄贈しているプロジェクトですが、すでにGraduated Projectという成熟したプロダクトとして認定を受けています。スターも27,000くらい獲得した、非常に勢いのあるKVSだと思っています。

また、CNCFに参画しているので、Kubernetesをはじめ、Podが落ちたとしてもしっかりサービスを継続できます。ネットワークのスピリットを切る、CPUの負荷が上がってくる、メモリ使い切ったなどのシミュレートをするためのカオスエンジニアリングツールも出しています。「Chaos Mesh」と呼ばれるものですが、こちらも使用が可能です。

また、Chaos MeshとTiDB連携してTiPocketと呼ばれるものを作り、相互に連携しています。TiDBのリリースや何かしら不具合があった時のチェックにも、カオスエンジニアリングを使ってTiDBの品質を担保する取り組みを行っています。

さらに、TiDBエコシステムとして、移行・バックアップ・モニタリングツールも非常に充実しています。アップストリーム、ダウンストリームでBinlogを読み込んでTiDBに使わせるほか、Grafanaなどで監視し、TiDB OperatorをKubernetesタイアップでデプロイしています。

そのほか、インターフェイスとしてはSpark SQLもサポートしているので、ぜひお願いします。

続きを読むには会員登録
(無料)が必要です。

会員登録していただくと、すべての記事が制限なく閲覧でき、
著者フォローや記事の保存機能など、便利な機能がご利用いただけます。

無料会員登録

会員の方はこちら

関連タグ:

この記事のスピーカー

同じログの記事

コミュニティ情報

Brand Topics

Brand Topics

  • 今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは

人気の記事

新着イベント

ログミーBusinessに
記事掲載しませんか?

イベント・インタビュー・対談 etc.

“編集しない編集”で、
スピーカーの「意図をそのまま」お届け!