MicoCloudとTiDBの歩み

今年は、弊社MicoworksのマーケティングサービスMicoCloudの成長の一年でもあります、そしてTiDB（PingCAP）と付き合い始めたの一年でもあります。
この一年の歩みを振り返りしてみましょう。

# MicoCloudについて
MicoCloudはMicoworksが運営している、Lineを活用したコミュニケーションツールです。
導入後の効果が期待できるLINE顧客管理ツール No.1との評価をいただいております。
![スクリーンショット 2023-12-18 15.57.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27429/10230032-8922-3471-9e14-388fc48287e8.png)

# 我々の課題
我々MicoCloudが提供するサービスでは、下記の機能を高いパフォーマンスで実現します。

* 属性データや行動履歴データの流入で大量なデータを蓄積する必要がある
* 蓄積したデータを使ってお客様のセグメンテーション（ペルソナ化）を行う必要がある

そのために、二つの機能を実現するために、最初に我々はDynamoDBやRedshiftを使い分けして、いいこと取りしようと期待しました。

* DynamoDBの高性能・高可用性から、大量データが一気に流入されたり、大量配信の結果データを更新したり、などの高負荷に耐えられる
* Redshiftが得意とするOLAPのデータ分析能力から、任意の属性・任意のイベントを任意の組み合わせで素早く検索できること


![スクリーンショット 2023-12-18 16.00.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27429/48c61aa4-ada7-949a-d2f3-4a6556cfcdd7.png)

ですが、実際このように開発を進むと、いくつかの課題と直面しました。

* システムの複雑度が高くなりました 
    - 別々のDBを利用するため、DynamoDBからRedshiftへの同期が必要になりました。
    - Redshiftはスキーマを持っているため、DynamoDBはスキーマレスであるにも関わらずDB構造の変更は慎重に行う必要があります。また、両DBの型定義が違うので、同期する時に、適切なTransformが必要です。
    - さらに、DB操作の抽象化レイヤが共通化しにくい問題もありました。
* 我々が期待するほどパフォーマンスを引き出せませんでした
    - セグメンテーションは動的に検索条件を設定される
        - RedshiftのQueryCacheなどは活用できてなかった
    - Redshiftのunique制約は我々の想定した動きにしておらず
    - Redshiftは元々同時実行にも向いてない
* 運用も複数のデータベースがあるので手間がかかってました
    - バックアップとリストアを別々のDBで行うため、整合性を取るには難しかった
    - データは複数DBに存在しているため、debugや調査を行うのも開発者の負担になっていた

そこで、我々が求めているのは、データの蓄積とデータの分析をそれぞれ十分高いパフォーマンスを実現したいということですので、新しいソリューションを探してました。
そこでNewSQLのTIDBの登場です＾＾
オンライントランザクション処理（OLTP）とオンライン分析処理 （OLAP）のワークロードを同じアーキテクチャで処理できるHTAPを実現しているTiDBなら、私たちが求めていることが実現できると思い、検証を行いました。
その検証結果はシンプルですが、我々が期待していることを実現できると、自信つけてくれました。

![スクリーンショット 2023-12-18 16.29.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27429/5419d54e-a341-296e-5bec-c10d3722f4c9.png)

# TiDBCloudの導入
実際TiDBの導入において、パフォーマンスや開発だけではなく、運用も検討しました。
TiDBはOSSであるために、自前でTiDBクラスターを構築する方法と、TiDBCloudを利用する方法があります。
TiDBCloudの利用により、我々は安定した環境で移行作業を行えると考えてました、また、オブザーバビリティ及びバックアップとリストアにおいても検討した結果、我々はTiDBCloudの利用を選びました。
![スクリーンショット 2023-12-18 16.36.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27429/0fa3306d-50e9-2e31-0120-a7fc4cb33c29.png)

Micoworks社内で多数のスーパーエンジニアもいて、そしてTiDB自体の完成度の高さ、MySqlとの高い互換性もあることで、我々は、（検証を別としても）システムのデータベースの移行をわずか1か月で完成しました。

# PingCAPからの援護射撃
実は、TiDBCloudを利用するもう一つの理由は、DB専門家部隊を抱えているPingCAPをうまく利用したい思いもあります。
そして、実際にTiDBの移行した後に、運用しながらで、幾つの問題も出会いまして、PingCAPさんとの連携で解決につながっています。

* Optimizierが適切な実行プランを選べない時もある
    - 複雑のQueryやテーブル定義などで、DBエンジンが実行プランではTiKVとTiFlashの自動選択が不適切のこともあったが、正しい実行プランの選択をDBエンジンに教えてあげればメモリー利用と速度の問題を解消できたこと。
    - SQL Hint / MPPモードの手動適用 / Queryの最適化
* ある規模のユーザー流入イベントが行った際に、特定の処理が重くなった。
    - Key VisualizerでHot Spotの発生を素早く発見し、特定のテーブルに集中したアクセスが急増したことを検知でき、障害発生後数時間で対応することができた。

それ以外にも、AWS側のインフラ障害が発生して、アラートが上がったとき、社内SREチームの素早く対応及びPingCAP社との速やかな情報共有により、事態を素早く把握し、対処することもできたりしました。

# TiDBの盛り上がり
我々Micoworksが提供するサービスMicoCloudに必要な機能は、TiDBのHTAP機能とうまく噛み合うこともあります。
そのため、今年は下記のイベントで登壇し、事例紹介させていただいたことがあります。

* [TiDB User Day 2023 【わずか1ヶ月でリプレイスを実現！】アジアNo.1のマーケティングSaaSを目指すMicoworksがNoSQLからNewSQLに移行した理由
](https://pingcap.co.jp/tidb-user-day-2023-thank-you/)
* [HTAP Summit 2023 The Reasons Why the Marketing SaaS Aiming To Be No.1 In Asia Transitioned From NoSQL To NewSQL](https://www.pingcap.com/htap-summit/agenda/)
* [DB TECH SHOWCASE 2023 アーキテクチャ多様化時代にデータベースをTiDBにまとめるという選択 (DMM.com、menu、Micoworks)](https://www.db-tech-showcase.com/2023/schedule/)

# Micoworksについて
我々Micoworksは2017年10月30日設立されましたスタートアップ企業です。
若いスタートアップ企業ですが、MicoCloudサービスが急成長していますので、我々も新しい仲間の加入を心待ちにしています。
ここまで読んでいてくれて、Micoworksは新しいことを実現するために、新しい手段を使ってどんどんチャレンジしていく会社だと理解していただけます。
ここに共感を感じる方はぜひこちらのQRコードをスキャンしていただき、仲間になってください＾＾

![スクリーンショット 2023-12-18 16.59.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27429/9235c1f3-a1d9-e472-e9d2-7618b1e9f18b.png)