Slide 1

Slide 1 text

Copyright coconala Inc. All Rights Reserved. 徹底解説! Insight SQL Testingを活用した データベース移行の実践ポイント 株式会社ココナラ 川崎 雄太・片桐 英斗 2024/07/11 db tech showcase 2024

Slide 2

Slide 2 text

Copyright coconala Inc. All Rights Reserved. 自己紹介(川崎 雄太) 2 川崎 雄太 Yuta Kawasaki @yuta_k0911 株式会社ココナラ システムプラットフォーム部 部長 / Head of Information SRE / 情シス / セキュリティ領域のEM SRE NEXT 2024のコアメンバー 今年の抱負:現状打破✨

Slide 3

Slide 3 text

Copyright coconala Inc. All Rights Reserved. 自己紹介(片桐 英斗) 3 片桐 英斗(かたぎり えいと) システムプラットフォームグループ インフラ・SREチーム所属 2022年4月 ココナラ入社 プロダクトインフラの運用・改善をしています マイブームは家で挽きたてコーヒーを淹れる こと☕

Slide 4

Slide 4 text

Copyright coconala Inc. All Rights Reserved. 4 ココナラの事業内容

Slide 5

Slide 5 text

Copyright coconala Inc. All Rights Reserved. ココナラのエンジニア数の変遷 5 事業拡大に合わせて3年で約3倍の組織規模に成長 2020年 2023年 フェーズ 上場前 上場後 エンジニア数 20人強 70人強 リポジトリ数 45 170以上

Slide 6

Slide 6 text

Copyright coconala Inc. All Rights Reserved. 短期間で会社・プロダクトが成長している =「技術負債解消 < プロダクトのグ ロース」の年月が長いです。 ※ベンチャーあるあるかも…🤔 6

Slide 7

Slide 7 text

Copyright coconala Inc. All Rights Reserved. もちろん(?)データベースに関する技 術課題もたくさんありました。 本セッションではココナラで実施した 打ち手とともにご紹介します😁 7

Slide 8

Slide 8 text

Copyright coconala Inc. All Rights Reserved. 8 Agenda ココナラで抱えていたデータベースの課題 課題にどう向き合ったか? Insight SQL Testingの利活用 振り返り 今後の取り組み 1 2 3 4 5

Slide 9

Slide 9 text

Copyright coconala Inc. All Rights Reserved. ココナラで抱えていたデータベースの課題 Chapter 01 9

Slide 10

Slide 10 text

Copyright coconala Inc. All Rights Reserved. 「データベースの課題」といっても、 さまざまな切り口がありますよね🤔 ココナラでもたとえば、QCDの バランス確保やライフサイクルへの 追随で悩んできました😓 10

Slide 11

Slide 11 text

Copyright coconala Inc. All Rights Reserved. ひとことで言うと、スケーラビリティが確保できていなかった 11 設定したKPIより、AWS RDSのSLAの方が低い KPIとして設定している目標はリクエ スト成功率が99.96%以上。 一方で、Amazon RDS(マルチAZ クラスタ)のSLAは99.95%となって おり、そもそも自社でコントロールでき ないところで、KPI達成が難しい状況 … イコール、意図せずKPIとして無理が ある設定になっていた。

Slide 12

Slide 12 text

Copyright coconala Inc. All Rights Reserved. IOPS(1秒あたりのI/Oアクセスの数)も限界が迫っていた 12 このままだと、近い未来にIOPSの上限に抵触する Amazon RDSのインスタンスサイズは 適切なものを利用していたので、CPU やメモリなどは問題なかったが、 IOPSの上限に抵触しそうになっ た。 暫定的にデータベースのデータ量と無 関係にストレージを拡張すること で、IOPSの上限を上げていった が、一時しのぎであった。

Slide 13

Slide 13 text

Copyright coconala Inc. All Rights Reserved. 前述の課題に加えて、MySQL 5.7 EOL 対応も迫ってきた…😓 放っておいても数年後には限界を 迎えることも自明😭 本腰を上げたのが、2022年の春頃! 13

Slide 14

Slide 14 text

Copyright coconala Inc. All Rights Reserved. 課題にどう向き合ったか? Chapter 02 14

Slide 15

Slide 15 text

Copyright coconala Inc. All Rights Reserved. Amazon Auroraへの移行 15 設定したKPIの達成に向けてAmazon Auroraを採用 Amazon AuroraのSLA(マルチ AZクラスタ)は99.99%なので、定 めているリクエスト成功率(99.96%) よりも高い。 また、IOPSの上限も撤廃されるた め、2つの課題を一気にクリアできる ことを期待して、Amazon Auroraへ 移行することに意思決定した。 Amazon Aurora Amazon RDS

Slide 16

Slide 16 text

Copyright coconala Inc. All Rights Reserved. DB移行は一大プロジェクトなので、マイルストーンを設定し、経営層と合意形成 16 MySQL5.7 EOL期限をデッドラインとして、計画を策定 経営層に「技術課題として、一番リスクと 難易度が大きいもの」とインプットするため に対応するタスクの整理と、マイルストーン 設定から着手。 MySQL5.7 EOL期限から逆算して、1年半が かりのプロジェクトを立ち上げ、ナレッジを 徐々に蓄積できるように5つのデータ ベースを影響が少ないところから順に対 応していく計画とした。

Slide 17

Slide 17 text

Copyright coconala Inc. All Rights Reserved. AWS社とディスカッションを進め、最速で品質の高いアプローチを模索する 17 定例MTGで議論を進めていき、検討を加速化

Slide 18

Slide 18 text

Copyright coconala Inc. All Rights Reserved. メンテナンス時間削減を目的としたブルーグリーンデプロイの採用 18

Slide 19

Slide 19 text

Copyright coconala Inc. All Rights Reserved. それらに加えて、8億本ものSQLを どのようにしてテストをするか?を 全力で考えていきました🤔 次のアジェンダで上記課題に対する 打ち手をご紹介します! 19

Slide 20

Slide 20 text

Copyright coconala Inc. All Rights Reserved. Insight SQL Testingの利活用 Chapter 03 20

Slide 21

Slide 21 text

Copyright coconala Inc. All Rights Reserved. プロダクトで利用しているDBのなかでも 「メインDB」は常時膨大な量のSQLが流れており、 MySQLメジャーバージョンアップ&Auroraへの移行後 (AuroraMySQL3化)に問題なく動作するか懸念されてい た。 検証環境ではワークロードが違いすぎて網羅的にSQL動 作の確認がしきれない点が浮き彫りになった。 そのため、メインDBは本番環境相当のSQLを使った 性能テストを実施して移行時の品質向上を狙う。 重厚に性能テストを行うワケ 21 メインDBは桁違いに難易度の高い移行対象

Slide 22

Slide 22 text

Copyright coconala Inc. All Rights Reserved. 22 一度、スロークエリを対象に新旧バージョンの2DBにSQL 実行したが、SQL 200本程度でも実行から結果をまとめ るのに時間・労力がかかった… これでは全量だと年単位で時間がかかってしまう恐れ があり、残された期間で効率的に実施できる方法を模索 していた

Slide 23

Slide 23 text

Copyright coconala Inc. All Rights Reserved. 重要ポイントを満たす選択肢として Insight SQL Testingを採用 23 移行後の品質を担保するために ・実際に流れているSQL(クエリログ: general log)を利用できること ・新旧バージョンの2DBに同一SQLを実行して結果を比較できること を重要視しており、それを満たしていたのが決め手。

Slide 24

Slide 24 text

Copyright coconala Inc. All Rights Reserved. Insight SQL Testing利用イメージ 24

Slide 25

Slide 25 text

Copyright coconala Inc. All Rights Reserved. 事前にPoCを行うことで、一発本番のリスクを軽減させる 25 進めるなかで「クエリログのサイズが大きいとInsight SQL Testing側のクエ リログ取り込みに失敗してしまう」問題に直面 ただ、PoCでありながらインサイトテクノロジー社が親身にサポートくださり、 回避策に切り替えることで先に進めた。その後の正式利用時にはパッチが 適用され、この問題は解消された。 PoCの機会をいただき、一連の流れを経験

Slide 26

Slide 26 text

Copyright coconala Inc. All Rights Reserved. ただ、都合によりPoC時点では本番相当のクエリログを充分に用意 できていなかった😭 そのため今後イレギュラーが起きることを考慮して、予定よりも性能 テストフェーズの開始時期を前倒して更に2段階に分けて性能 テストを実施できるよう計画を変更した。 また、本来は1週間分取得して行う予定だったが、 ・1時間分のクエリログのテスト実行だけで4時間かかる ・取得したクエリログの保管コストがバカにならない ことがわかったため、取得範囲を狭めた。 26

Slide 27

Slide 27 text

Copyright coconala Inc. All Rights Reserved. ・連続24時間分 ・週次・月次定期バッチ処理の時間分 ・月次社内処理の時間分  網羅性を担保しつつテストする  全体量を削減することができた👏 27 実際に利用したクエリログ

Slide 28

Slide 28 text

Copyright coconala Inc. All Rights Reserved. 実際に利用した構成がコチラ 新旧バージョンの2DBに対し て並列でSQLを実行し、 その結果から ・新DBのみ失敗 ・2DBで取得結果が異なる ・新DBで性能劣化 と判定されたSQLの影響度合い を調査した。 指定時間分メインDBからクエリログを取得して性能テストを実施する仕組みを構築 28

Slide 29

Slide 29 text

Copyright coconala Inc. All Rights Reserved. ただ、正式に性能テストを実施していくなかで問題が出た。 PoCはGUIベースで性能テストを試していたが、 ・性能テストの実施オプションを毎回入力する必要があり非効率 ・単一クエリログサイズが大きく(≒SQL本数が多い)、時短のために  性能テストの「SQL並列実行数」オプションを大きくすると  途中でInsight SQL TestingのインスタンスがOOM  になってしまい、テストがFailしてやり直しに 本番相当の性能テスト構成での詰まりポイント 29

Slide 30

Slide 30 text

Copyright coconala Inc. All Rights Reserved. REST APIが提供されていたので bashスクリプトを作成してテスト実行・結果取得の処理を効率化した。 ※APIリファレンス参照にはライセンスが必要なため具体スクリプト内容は割愛 本番相当の性能テスト構成での詰まりポイント(対策) 30 テストのオプションを毎回入力 途中でInsight SQL TestingのインスタンスがOOM インスタンスのメモリを増設しても解消しなかったので、 インサイトテクノロジー社サポートを頼りつつ、 1回のテストに使うクエリログ時間を1時間→1分に 分割して回すことで、性能テストが失敗したときの影響を軽減させた

Slide 31

Slide 31 text

Copyright coconala Inc. All Rights Reserved. 最終的にテスト対象のSQLは約8億本、 「新DBのみ失敗、2DBで取得結果が異なる、新 DBで性能劣化」結果から重複排除などを行い 影響調査が必要だったのは約200本、 事前に改修が必要だったのは約30本 となった。 事前に改修を終えることができ、 「その他は問題なし」と言い切れる安心感ができ た。 性能テストを実施してどうなったか? 31 事前に注力するべきSQLの本数は激減した

Slide 32

Slide 32 text

Copyright coconala Inc. All Rights Reserved. それでも念の為イレギュラーを考慮して切り 替え当日は厚めに体制を敷いて臨んだが AuroraMySQL3への移行は無事に完了! 現在もサービス影響なく稼働 させることができています😁 事前に問題点を洗い出すことができ、切り替え当日は無風 32 Amazon Aurora

Slide 33

Slide 33 text

Copyright coconala Inc. All Rights Reserved. 振り返り Chapter 04 33

Slide 34

Slide 34 text

Copyright coconala Inc. All Rights Reserved. 影響の大きいメインDBのAuroraMySQL3化が無事故で終えられた のは性能テストで事前に問題点を洗い出せたから。 Insight SQL Testingを利用することで性能テストの品質を担保し つつかける工数を削減できた。 また、サポートという正式に頼るルートがあったおかげで、詰まった ときにも自分たちだけで抱え込まずに済んだ。 メインDBのAuroraMySQL3化はココナラ史上最大の課題だった 34

Slide 35

Slide 35 text

Copyright coconala Inc. All Rights Reserved. 社内外さまざまな協力・支援があったおかげで、1年半という期間 を計画的かつ大きな問題なく進めることができた。 途中でイレギュラーが起きた際にも計画を見直すことで死守する べき期限を変えずに完遂できた。 ただ、性能テストはPoC前にMTGなどでイメージ感や具体 ユースケースのすり合わせなど、もう少し解像度高く取り組むこ とができたはず。こちらからもう少し熱量を持ってコミュニケー ションできれば良かった。 対応してみてどうだったか? 35 確実に自分たちだけでは完遂できなかった

Slide 36

Slide 36 text

Copyright coconala Inc. All Rights Reserved. IOPS上限問題 抱えていた課題はどうなった? 36 SLO未達問題 EOL期限問題

Slide 37

Slide 37 text

Copyright coconala Inc. All Rights Reserved. 今後の取り組み Chapter 05 37

Slide 38

Slide 38 text

Copyright coconala Inc. All Rights Reserved. データベース移行はやっぱり事前の準備が大事 38 集められる情報は集めて、自社としての最適解を見つける 「データベース移行」といっても、システム構 成やシステム特性によって、考慮するポイ ントはさまざま。 類似したアーキテクチャーを採用しているシ ステムの情報を参考に「自社のベストプラク ティス」を探すことが重要。 なんといっても、数年に一度は必ず訪れる イベント・・・

Slide 39

Slide 39 text

Copyright coconala Inc. All Rights Reserved. システムメンテナンスの無い世界を目指していきたい 39 無停止でメンテナンスイベントをこなす最適解を見つける クラウドサービスを使っている限り、「基盤の メンテナンス」は切っても切れないイベント になる。(全てがライブマイグレーションにな れば、みんなHappyだけど…) ココナラは「全てがそろうスキルマーケット」を 目指しているので、極力システムメンテナ ンスがない世界を実現するための机上 / 実機検証を続ける。

Slide 40

Slide 40 text

Copyright coconala Inc. All Rights Reserved. ココナラでは、Insight SQL Testing なしではQCDのバランスの取れた 移行作業はできませんでした。 1年近く伴走していただき、 本当にありがとうございました!! 40

Slide 41

Slide 41 text

Copyright coconala Inc. All Rights Reserved. データベースはどの企業でも利用してい るので、ナレッジを公開している企業も たくさんあります。 過去の知見や、AWS等のベンダーを 使い倒して、長きに渡るデータベース 移行を安全に乗り切りましょう!!😁 41

Slide 42

Slide 42 text

Fin