TiDBでデータベース運用における課題を解決したい
イオンスマートテクノロジーがTiDBを導入する背景としては、データベース運用におけるいくつかの課題があったからだ。スケーラビリティやシャーディングによる運用コストと複雑性の増加、メンテナンスビリティの問題とメンテナンス時の運用負荷の増加、MySQL 8への対応がせまっていることなどが具体的な課題として挙げられる。
これら課題に対し、「TiDBのことを知れば知るほど、TiDBしか勝たんのでは、との気持ちにさせられました」と香西氏。そのため、2024年2月7日にはTiDB Cloudの導入を視野に、PingCAPと共同検証を開始するプレス発表もしている。3月からは、さまざまな検証を実施し、本格的な導入を進めることとなる。
イオンスマートテクノロジーでは、マイクロサービスアーキテクチャを採用しており、それによる課題もある。通常、マイクロサービスに期待するのは、開発スコープを小さくし開発スピードを上げる、開発スコープを分離しコストを適切に管理する、サービス分離による障害の影響範囲を極小化するなどがある。
イオンスマートテクノロジーは、3年目の新しい企業だ。設立当初にサービスを新規構築する際、上記のようなメリットを考慮し、これからの時代はマイクロサービス開発が主流となりKubernetesだとの方針が打ち出される。そのため最初からKubernetesとマイクロサービスでの開発となった。
ところで、香西氏が尊敬する米国のソフトウェア技術者のマーティン・ファウラー氏も言うように、「成功したマイクロサービスのストーリーのほとんどは、大きくなりすぎたモノリスを分割するところから始まっている。そして、マイクロサービスシステムとしてゼロから構築されたシステムは、ほとんどのケースで深刻なトラブルに見舞われている」との話がある。この言葉の通り、ゼロからマイクロサービスに取り組んでいるイオンスマートテクノロジーでは、さまざまなトラブルに遭遇しており「アンチパターンを踏み抜いています」と言う。
マイクロサービスがかなり難しいアーキテクチャであることに直面しており、導入後にさまざまな課題が出ているのが現状だ。たとえば、ドメイン境界設定に起因するサービス分割の失敗がある。これは、マイクロサービス間に依存関係を持たせることなく分割するのが難しく、適切に切り分けるには深いドメイン知識が必要になるためだ。結果的にマイクロサービス間の依存度に応じたインターフェイスの増加、多発する循環参照なども発生し、デプロイの複雑度が上昇してしまう。そのため、もともとシンプルなものを求めていたのに、逆にマイクロサービスの導入で複雑化してしまっている。
また、マイクロサービス間のトランザクション管理も難易度が高い。これはいわゆる分散トランザクションであり、「分散トランザクションは、単純に設計や実装の難易度がかなり高いと思います」とも言う。いくつか推奨されるパターンはあるが、パターンに従って実装しても、上手く分散トランザクションが実現できるとは限らないのだ。