Slide 1

Slide 1 text

決済システムにおけるTiDB導⼊の 検証とその効果 SBペイメントサービス株式会社 前島 竜太郎 TiDB User Day Tokyo 2023 2023/07/07

Slide 2

Slide 2 text

⾃⼰紹介 前島 ⻯太郎(@dohq) 趣味は⾃宅でサーバーを作ったり壊したり 現在の業務 : インフラ‧プラットフォームの 構築‧運⽤‧改善を担当 2

Slide 3

Slide 3 text

アジェンダ ● 会社紹介 ● NewSQLを検証した背景 ● 弊社が求めた要件 ● 検証内容 ● 検証結果のピックアップ ● まとめ 3

Slide 4

Slide 4 text

会社紹介 - SBペイメントサービス 加盟店 決済機関 通販サイト ゲーム 教育 不動産 その他 電⼦書籍/動画 決済サービス 全て⼀本化 チケット クレジット 携帯キャリア決済 コンビニ⽀払い プリペイドカード ⼝座振替 ポイント⽀払い アカウント連携 当社 当社 API型 オンライン決済サービス 画⾯リンク型 ECサイト向けに様々な決済⼿段を提供 加盟店に決済APIを提供するシステム 4

Slide 5

Slide 5 text

会社紹介 - SBペイメントサービス API型 画⾯リンク型 加盟店 決済機関 通販サイト ゲーム 教育 不動産 その他 電⼦書籍/動画 決済サービス 全て⼀本化 チケット ECサイト向けに様々な決済⼿段を提供 加盟店に決済APIを提供するシステム クレジット 携帯キャリア決済 コンビニ⽀払い プリペイドカード ⼝座振替 ポイント⽀払い アカウント連携 当社 当社 オンライン決済サービス 5 加盟店システムと決済機関システムの間に位置 する⾃社だけでは完結しないWebシステム

Slide 6

Slide 6 text

NewSQLを検証した背景 ● ⽇々増加する取扱件数に対して障害、メンテナンス時の ダウンタイムによる影響が顕著に ● 複雑化したクエリのチューニングの為DBAとのQAが増え 開発のリードタイムが増加 ● NewSQLめっちゃ興味あった 6

Slide 7

Slide 7 text

弊社が求めた要件 ● ACID txをサポートしているDB ● MySQL互換 ● マネージド‧オンプレミス両⽅の環境構築が可能 ● メンテ等での影響が限りなく少ない ● 細かいチューニングをあまり気にしなくても性能が出る ● スケールが容易 ● 環境構築でterraform等IaCが出来る ● ⼿厚いサポート 7

Slide 8

Slide 8 text

_人人人人人人人人人人人_ > TiDBいいじゃん!! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ →という事でTiDBを選定 8

Slide 9

Slide 9 text

ざっくり検証項⽬ ● 構築 ○ Webコンソールの操作性 ○ Terraform Providerの使い勝⼿ ● 開発 ○ 既存アプリを利⽤した互換性確認 ○ 性能 ● 運⽤ ○ 監視 ○ アップデート時の影響 ○ 障害時の影響 9

Slide 10

Slide 10 text

検証結果ピックアップ 既存のDBと同じ使い勝⼿を求めつつ、 更に現状の課題を解決出来るか確認したかった 為、特に以下の4点を重点的に検証しました ● 既存アプリとの互換性 ● クエリレスポンスタイムの変化 ● アップデート時の影響 ● 障害時の影響 10

Slide 11

Slide 11 text

検証環境 API Gateway App 決済機関向け サービスApp 決済機関 モック ログ 配信⽤ キュー ログシッパー App 約20r/s Total 約300q/s HTTP 同 期 ⾮同期 Select Insert Update Insert amqp 11

Slide 12

Slide 12 text

検証環境 TiDB Cloud 2 vCPU, 8 GiB x 2 2 vCPU, 8 GiB x 3 AWS Aurora for MySQL 2 vCPU, 16 GiB マルチAZ有効 Writer x 1 / Reader x 1 エンジンバージョン 5.7.mysql_aurora.2.07.8 12

Slide 13

Slide 13 text

注意事項 我々が実施したTiDBの導⼊検証は、 あくまで我々の環境と要件に基づいて⾏われたものであり、 その結果が他の環境や状況において同様に適⽤できるという 保証はありません。 導⼊を検討する際には、必ずご⾃⾝の環境と要件に基づいた 検証を実施して下さい! 13

Slide 14

Slide 14 text

検証結果ピックアップ ● 既存アプリとの互換性 ● 性能 ● アップデート時の影響 ● 障害時の影響 14

Slide 15

Slide 15 text

検証対象のアプリケーションは 元々AWS Auroraで稼働していたが 既存のコードを⼀切変更せず にTiDB環境へ適応させる事が可能でした😊 検証結果(既存アプリとの互換性) 15

Slide 16

Slide 16 text

検証結果ピックアップ ● 既存アプリとの互換性 ● 性能 ● アップデート時の影響 ● 障害時の影響 16

Slide 17

Slide 17 text

検証結果(クエリレスポンスタイム) TiDB Aurora 平均 Select: 5ms Insert: 10ms Update: 13ms 平均 Select: 0.3ms Insert: 5ms Update: 5ms Select: 約16倍 Insert: 約 2倍 Update: 約 2倍 17

Slide 18

Slide 18 text

検証結果(クエリレスポンスタイム) とはいえ… 例えば数億件を連続で捌くバッチシステムであれば クエリ速度の影響は顕著に出るが、 リアルタイムシステムであれば影響は無視しても問題無い 増加量だという結論になってます。 18

Slide 19

Slide 19 text

検証結果ピックアップ ● 既存アプリとの互換性 ● 性能 ● アップデート時の影響 ● 障害時の影響 19

Slide 20

Slide 20 text

検証結果(アップデート時の影響) Aurora DBに対する Connection reset により、5件の リクエストエラー DBインスタンス再起動時に起きた クエリ遅延によって、 3~15秒程のクエリ遅延が約60件発生 アクセスログ件数 リクエストレスポンスタイム リクエストレスポンスタイム 20

Slide 21

Slide 21 text

検証結果(アップデート時の影響) TiDB リクエストエラーは 確認出来ず🥰 Auroraと同様に遅延は認められたが、 1~1.5秒の遅延が約20件と 突出した遅延にはならず アクセスログ件数 リクエストレスポンスタイム 21

Slide 22

Slide 22 text

検証結果ピックアップ ● 既存アプリとの互換性 ● 性能 ● アップデート時の影響 ● 障害時の影響 22

Slide 23

Slide 23 text

検証結果(障害時の影響) PingCAP Japanと連携し、擬似的な障害テストとして TiDB及びTiKVをそれぞれ1台づつ落として貰い検証を実施 23

Slide 24

Slide 24 text

検証結果(障害時の影響) アップデート時と同じく、 リクエストエラーは無し! 24

Slide 25

Slide 25 text

検証結果(障害時の影響) ・・・ 25

Slide 26

Slide 26 text

検証結果(障害時の影響) TiDBを落とした際は影響無し しかしTiKVを落としたタイミングで ログシッパーアプリのInsert処理において 10秒以上のクエリ遅延が100件発生 26

Slide 27

Slide 27 text

検証結果(障害時の影響) 後⽇PingCAP Japanへ確認をとったところ、 リーダーインスタンスから応答が無くなった際の 新しいリーダー選出インターバルが10秒となっている為 仕様どおりの挙動とのこと 障害時もロールバック等はおこらず、⼀部クエリの遅延のみ におさまるのはよくできている… 27

Slide 28

Slide 28 text

まとめ ● TiDBは既存のRDBMSと⽐べても決して劣りはしない ● CRUDしか利⽤していない場合既存コードに⼿は⼊れなくてよい🥳 ● クエリのLatencyは⾼めなので向き不向きは考慮すべき ● 各種試験時に1件もエラーが起きなかったのは驚き🎉 ● ただしクエリの遅延は発⽣するのでアプリ側での リトライやタイムアウトなど適切なハンドリングは必要 ● PingCAP(Japan)のサポートめっちゃいい🥰 28

Slide 29

Slide 29 text

まとめ ユースケースを想定した 事前検証は⼤事!!

Slide 30

Slide 30 text

ご静聴ありがとうございました