MySQL互換の「TiDB」は待ち望んでいたデータベースか?
「TiDBは使えるか討論 MySQLのプロがTiDBを斬る」と題して行われたセッションには、LINEヤフーとメルカリでMySQLを使いこなしているプロフェッショナルなエンジニア2名が登場。LINEヤフーでクラウド統括本部 Database本部 RDB2部 部長を務めている北川健太郎氏は、主にMySQLの導入から運用管理を担っている。2023年10月にLINEとヤフーが合併したことにより、それぞれが利用していたデータベースを管理する組織も1つになったばかりだ。
同社ではオンプレミス型のプライベートクラウド環境を構築しており、そのシステムインフラとあわせてMySQLの運用も統合を進めるなど、「かなり大変だ」と北川氏は話す。
LINEヤフーでは現状、1万5,000インスタンス以上のMySQLが稼働しており、MongoDBやOracle Database、Cassandraなど多様なデータベースが利用されているからだ。多くのMySQLを運用する中、データベースの負荷を分散するため「シャーディング(水平分割)」による運用を続けていたが、分散させたデータベースクラスタ管理の煩雑性や複雑化などに課題を抱えていたという。だからこそ、最初から“分散型での運用”を想定した上で構築しており、MySQLと高い互換性がある「TiDB」に着目。約2年前から検証を行ってきた。
その検証結果について、「サービス用MySQLのHA構成を管理するシステムのバックエンドとして、マルチAZ(アベイラビリティゾーン)の仕組みにTiDBを配置しており、本番環境で利用しています」と北川氏。3つのAZを設けており、それぞれにTiDBを用いているという。
LINEヤフーと同様に、TiDBの検証を進めているのがフリマサービスや決済事業を展開するメルカリだ。同社ではMySQLやPostgreSQL、Cloud Spannerなど、さまざまなデータベースを活用している。オンプレミスのMySQLの運用管理を担当しているのが、同社 Database Reliability Engineering JP Reliability Engineerの三谷智史氏。拡張性の高さに期待し、TiDBには注目してきたと話す。
そこでMySQLの移行について、クラウド環境でPoCを実施しテストを行った。メルカリで利用しているデータベースサーバーはLINEヤフーほど数が多くない一方、フリマサービスで利用するデータベースの容量は大きく、一部のデータベースは10TBを超えているという。なお、このデータベースについては、シャーディングによる分散型で運用されている。
ここでモデレータを務めるPingCAP Japan CTOの林正記氏から、TiDBの良いところは聞こえてくるが、MySQLのプロとして実際にTiDBに触れて検証をしてみた印象として「本当にTiDBは夢のDBだったか」との質問が投げかけられた。北川氏は「性能はまだじっくりと検証していませんが、運用方法の確立について時間をかけて検証しました。現時点ではまだ夢のDBなのかはよくわかりませんが、夢のDBだったら良いなと思います」と話す。
LINEヤフーでは、これまでTiDBの運用確立に手間をかけてきた結果として、「サーバーがダウンしても、すぐに起動してクラスターにジョインしなおすなど、運用は落ち着いてきました」と北川氏。クラスターの運用・保守ツールである「TiUP」を使うことで、各クラスターに対して一括インストール、バイナリを動的に置き換えるなどの操作が可能になり、オンプレミスでの運用には便利だと評価する。
また、TiDBは“中身の仕組み”をよく理解していなくても容易に利用できるとも語る。その上で「パラメーターチューニングをしなくとも、デフォルトの設定でもかなり性能が発揮されます。検証の際、TiDBのパラメーターを全部見たのですが、何を変えたら良いのか正直分かりませんでした。ただ、デフォルトでもすごい性能が出たので、とても良い印象だったのを覚えています」と北川氏。1台のMySQLでなかなか性能が出にくい際、TiDBを活用できるだろうと評価する。
また、三谷氏も夢のDBなのかわからないが、MySQL互換かつ高いスケーラビリティが発揮できるという意味では、待ち望んでいた製品だと述べる。メルカリでは既存環境の移行をテストするために、クラウド環境でPoCを実施。このときの性能目標に150万QPS(Queries Per Second)を掲げたが、PoCではこれを十分に達成できたと話す。100台を超えるクラスター構成で検証をしており、ノードを追加すればR/W性能が向上することも確認されている。
一方、MySQLとの互換性は高いが「そもそもアーキテクチャが異なるので、まったく同じものと思って使ってしまうと痛い目を見るでしょう。別物だと思って使い始めた方がサプライズは少なくお勧めです」と三谷氏。たとえば、デフォルトの照合順序がMySQLとTiDBでは異なる。そのため、明示的に照合順序を指定する必要もあったという。
三谷氏は、将来的にスケールアウトしていくことが想定されるならばTiDBを選び、そうでなければMySQLで一旦始めてみても十分だろうと述べる。MySQLには既にオープンソースのさまざまなツールが揃っており、それらが使える点に優位性があるからだ。ただ、MySQLで困ったり、性能面や運用面など明らかに厳しいと感じたりした場合は、選択肢としてTiDBを検討するのも良いだろう。林氏もTiDBはMySQLの互換データベースとして使う人は多いが、三谷氏の「最初から違うものとして扱うほうが良い」という指摘は鋭いという。
MySQLでシャーディングするなら、最初からTiDBで
続いて、「TiDBに特化したような設計や運用は必要か」との質問がなされた。これに対し北川氏は、書き込み時の性能を見ると高い並列度で処理し、拡張していくとQPSが少しずつ伸びることがTiDBの特長の1つであり、そこを意識して設計すべきだと指摘する。また、性能が発揮されない原因となるホットスポットを解消するために、“分割リージョン”のオプションを有効にしたと北川氏。他にも「TiUP」では監視などでも活用でき、当初から運用を容易にすることを念頭に置いてTiDBは構築されているようだとも話す。
一方、気になった点としては、パラメーターの設定方法が統一されていないことだと指摘すると、「監視などのメトリックが多すぎるとも感じますね」と北川氏。メトリックが多ければ状況は詳細に把握できるが、多すぎると情報の取捨選択に頭を悩ますことにもなる。さらに、アラートのレベルがクリティカル(Critical)、エマージェンシー(Emergency)、ワーニング(Warning)と3つに分かれているが、ワーニングの量が多いとも話す。
とはいえ、1年半ほどTiDBを稼働させている中、多くのワーニングアラートが上がってくる一方、障害はこれまで発生していないとのことだ。
また、MySQLとの使い分けについてはゲーム向けのサービスなど、シャーディングを用いて分散させることが想定されるような場合、最初からTiDBを採用しても問題ないと北川氏。
三谷氏は、指定したカラム(フィールド)にデータが追加されると、一意の値を自動的に付与する機能“AUTO_INCREMENT”の動きには注意が必要だと指摘する。TiDBでは性能を担保するために、PD(Placement Driver)から発番されたa-i番号をキャッシュするアーキテクチャとなっており、発番は単調増加にはならず順番がとばされるという。これはMySQLとは異なる動きでありTiDB独自の挙動のため、適宜発番がとばないような設定に変更する必要があるだろう。なお、メトリックがMySQLとは異なるため「自前の監視ツールなどを利用している場合、そのまま動かない可能性があります」ともアドバイスする。
これらTiDBに実際に触ったからこその意見を踏まえた上で、林氏から「MySQLからの移行にTiDBが利用できるか」との質問があらためて投げかけられた。LINEヤフーでは移行のための検証はしていないが「『LINEマンガ』のように急成長のため、MySQLのシャーディングに苦労しているようなサービスでは、TiDBに移行できると助かるでしょう」と北川氏。MySQLでは、シャーディングを想定していないものを変更することは大変であり、既存のMySQLをそのままTiDBに移行できるのならば負担は少なく、かなり便利だろうと述べる。
三谷氏は、MySQLとの互換性は高く、その上でデータベースのサイズが10TBと大きいケースでも、移行が1日で済んだと高く評価する。また、移行後のデータチェックツールなども標準で用意されている点は便利だという。その上で、実際にメルカリのサービスで利用しているMySQLをTiDBに移行させるかどうかは、レイテンシーへの要件次第だと三谷氏。TiDBは分散構成となるため、どうしてもレイテンシーの観点からは不利な側面もあるが、移行における課題となるケースもあると林氏も述べる。
なお、講演の中では、「検証において想定外の性能劣化などはあったか」との質問も投げかけられた。分散型データベースの構成では、多くのノードからデータを集めてくるようなクエリの場合、どうしてもレイテンシーに係わる問題が発生する。しかし三谷氏は、それは想定内であり、メルカリでは大きな問題はなかったという。JOINクエリについても問題は見られず、特にインデックスを追加することなく既存のMySQLのままで利用できたとした。
今回のパネルディスカッションでは「TiDBは使えるか討論 MySQLのプロがTiDBを斬る」をテーマに、TiDBの特長だけでなく実際に運用する上での注意点など、今後TiDBを検討しているイベント参加者に向けて、ユーザー目線の深い知見が共有された。大規模な本番環境を想定したTiDBの検証については、詳細な日本語情報がまだ多いわけでない。そのためもあってか、MySQLをよく知る両氏のリアリティのある話に満席となった会場では多くの参加者が熱心に耳を傾けていた。