menuが試してわかった、マイクロサービスとTiDBの相性
大型の機能追加において採用されたマイクロサービスとTiDBの組み合わせ、「アプリケーション開発者はTiDBの内部構造を意識せずとも、MySQLとして扱えばTiDBの利用において苦労することはありません」と窪田氏。また、「TiDBでは、一時的にサービス負荷が上昇することに対する不安がない点も評価できます。MySQLでは必要な性能を確保するために細かなチューニングが求められましたが、TiDBでは現状はチューニングを実施することなく利用できています」と木村氏は話す。
加えて、開発から運用に至るまでの状況をモニタリングダッシュボードでリアルタイムに把握可能だ。「以前、CMキャンペーンを打った際にリソースが足りず、一晩中システムに貼り付いて対処したこともありました。しかし、今ではダッシュボードで確認してコンソールで設定するだけで、簡単にスケールアウトできます。まさにTiDBは『寝られるデータベース』でしょう」と木村氏は語る。
また、拡張性を得るためにMySQLのシャーディングを利用すれば、レプリケーションの同期遅延などに悩まされることになるが「TiDBにはそういったことも一切ありません」と丹羽氏。もちろん、分散データベースである以上はネットワークのオーバーヘッドがあり、レイテンシー面で不利になるだろう。だからこそ、そうした得手不得手を認識した上でアプリケーションを設計し、TiDBを活用することが重要だ。menuにおいても、すべてがTiDBに置き換わるのではなく、適宜棲み分けて利用していく。
既存システムにおいてマイクロサービス化が難しいアプリケーションや機能は、無理して作り替えるのではなく、API化などで緩やかにマイクロサービスへ対応していく。それ以外の切り出せるものから順次マイクロサービス化を進めて、TiDBも適用する。ある程度のマイクロサービス化が進めば、たとえば配達クルーに注文を割り当てるような複雑な処理についても他サービスへの影響を意識する必要がなくなり、最適化に向けたトライ&エラーがしやすくなるという。
他にもTiDBには、「テーブルに対してオンラインでDDLでの実行ができ、リソースコントロールという機能により、異なるサービス間でのリソースの干渉を抑制することができます。これはマイクロサービスとの相性も良いでしょう」と木村氏。サービス負荷の予測が難しいようなサービスでは、TiDBを選択肢に入れるべきだと言う。既にMySQLのシャーディングで苦労しているのなら、TiDBは簡単に使えるだろう。
なお、今度は“TiFlash”(トランザクションデータのリアルタイム分析を可能にするカラムナストレージでTiDBのコンポーネントの1つ)などを利用したデータ活用なども視野に入れており、menuにおけるTiDBの適用範囲はさらに広がりそうだ。
「それぞれのデータベースに得意、不得意があります。そして、TiDBは得意な部分が多いのです。そこをしっかりと見極めて使っていきます」と丹羽氏は言い、TiDBはNoSQLの良いところとRDBMSの良いところをあわせ持ち、安心して使えるものだと評価するのだった。