SlideShare a Scribd company logo
1 of 77
Download to read offline
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.
DELiGHTWORKS Inc.
これで怖くない!?大規模環境で体験するDB負荷対策
~垂直から水平の彼方へ~
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.
自己紹介
名前:甲 英明(Kabuto Hideaki)
これまで社内SEとして、基幹系、医療系システム、BtoB向けWEBサービス、BtoC向け音楽・
書籍コンテンツ配信サービスのインフラ設計~保守、運用など業界問わず携わる
2017年にディライトワークス株式会社でインフラエンジニアとして入社
海外向けコンテンツの立ち上げメンバーとしてインフラ周りを担当
現在は組織・プロジェクトを横断的にインフラ基盤の設計・構築・運用などを担っています
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.
会社紹介(ディライトワークス)
2014/1/22に設立したまだ若い会社です。
従業員数は、380名(2018年7月現在 派遣社員、業務委託含む)
「ただ純粋に、面白いゲームを創ろう。」
好評配信中のタイトルです。
Fate/Grand Order(好評配信中)
Fate/Grand Order Arcade(好評稼働中)
Fate/Grand Order VR feat.マシュ・キリエライト(好評配信中)
バンドやろうぜ!(好評配信中)
※企画・開発・運用を行っています。
他にも開発中のタイトルがございます。
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.
アジェンダ
第一章 なぜいま垂直分割から水平分割なのか?
第二章 水平分割への移行課題は?
最終章 どのように移行を実現できたのか?
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 5
第一章開演
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 6
なぜいま垂直分割から水平分割なのか?
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 7
まずは垂直分割の経緯から遡ってみます
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 8
それは突然の出来事でした...
2016年5月
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 9
これまで1台だったDBを分割すること
に...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.10
DB分割とは
Aテーブル
Bテーブル
Cテーブル
Dテーブル
Eテーブル
Fテーブル
Eテーブル
Fテーブル
Eテーブル
Fテーブル
・・・・
水平分割
(同テーブルのID単位による分割)
垂直分割
(テーブル単位による分割)
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.11
今回テーブルのデータが肥大化し、1台
のDBではインデックスがメモリに載らな
くなり、性能劣化が現れたため検討...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.12
そのとき垂直か?水平か?
差し迫った負荷対策で、その時は十分な
検討時間がなかった...
実装と移行が比較的容易である選択を
行った...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.13
結果、垂直分割を実施した...
まずは4分割
その後5分割、6分割
テーブル分割で当座をしのぐ日々...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.14
そして再び機会が巡り...
2018年1月
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.15
テーブルの肥大化が進み
参照クエリのレイテンシが顕著に増加し始め
た...
slaveを追加し、対応を実施したが現状の
ペースでデータ量が増加した場合の懸念が
あった...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.
当時の垂直分割サーバ構成
IIS 8.5 (Amazon EC2 Windows Server 2012 R2)
.NET Framework 4.5 + ASP.NET MVC 5
c4.8xlarge x 45
MySQL 5.6 (Amazon Aurora)
db.r4.16xlarge x 18(master x 6、slave x 12)
Redis 2.8 (Amazon ElastiCache)
cache.r3.4xlarge x 2
Memcached (Amazon ElastiCache)
cache.r3.2xlarge
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.17
今回はまだ十分に検討する時間がある...
前回出来なかった水平分割の再検討いつ
やるの?
今でしょう!!
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.18
検討案として
・垂直と水平の組み合わせ
・すべてを水平に切り替える
この2択になった...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.19
垂直構成の問題点として
1ユーザの処理が1つのトランザクショ
ンに載らないため、データ不整合が発生
しやすい...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.20
また垂直と水平が混在している構成だと
垂直テーブルが肥大化する度に移行が必
要なる...
プログラムの複雑さも増し運用コストが
高くなる...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.21
そうなると水平に一本化するのが必然
これまでの守りから、
今こそ攻めに転じる時!!
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.22
このようにして
DB水平分割プロジェクトが始動
することになった...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.23
第一章終演
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.24
第二章開演
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.25
水平分割への移行課題は?
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.26
課題として
・何をキーとして分割を行うか?
・何分割する必要があるか?
・どのように移行を行うか?
・ダウンタイムはどの程度必要か?
・失敗した場合の切り戻しはどうするか?
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.27
内外問わず有識者からの意見を私たちは
求め検討した...
そして答えが...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.28
何をキーとして分割を行うか?
答えは、ユーザID...
更新が1つのトランザクションに載るた
め、垂直分割時のデータ不整合問題を改
善することができる
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.29
何分割する必要があるか?
出来るだけ今回の分割作業で最後にした
い
答えは、20分割...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.30
どのように移行を行うか?
最終的にこの2案で検討することに...
案①として
AWS Database Migration Service
(DMS)を利用する
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.31
DMSとは
データベースをすばやく安全に AWS に移行できま
す。移行中でもソースデータベースは完全に利用可
能な状態に保たれ、データベースを利用するアプリ
ケーションのダウンタイムは最小限に抑えられます。
とあり、Aurora間での移行も可能
https://aws.amazon.com/jp/dms/
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.32
どのように移行を行うか?
案②として、
ログデータを利用する
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.33
ログデータを利用する場合
アプリケーションから吐かれたlogを全
てkinesisで送りlambdaもしくは取り
込み専用のサーバを用意しデータを入れ
る
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.34
では最終的にどのように移行を行うか?
答えは、案①のDMSを利用する方針に決定
・ダウンタイムを極力減らす移行が可能
・ログデータはDB更新でエラー発生した際、
ログとDBに差異が発生するリスクがある
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.35
ダウンタイムはどの程度必要か?
答えは、数時間...
DMSでのライブマイグレーション後の切
替作業の時間を想定
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.36
失敗した場合の切り戻しは?
答えは、ダブルライト方式およびリカバ
リー環境をDMSで準備する
またXAトランザクションを検討する
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.37
ダブルライト方式とは
・移行完了後、まだ移行前DBを残す
・参照クエリは移行後DBを参照する
・更新クエリは両方のDBを更新する
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.38
XAトランザクションは
AWSよりAmazon Aurora MySQLではXAト
ランザクションはパフォーマンス面で影響が
出る可能性があるとの事で最終的には断念...
・Amazon Aurora MySQL での XA トランザクションの使用
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/AuroraMySQL.BestPra
ctices.html#AuroraMySQL.BestPractices.XA
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.39
このようにして
課題の洗い出しを行っていった...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.40
移行課題を整理すると
・ユーザIDを分割IDとして利用する
・20分割で移行を行う
・DMSで移行を行う
・ダウンタイムは数時間(想定)
・切り戻しはダブルライト方式とDMSでリカバ
リー環境を準備する
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.41
第二章終演
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.42
最終章開演
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.43
どのように移行を実現できたのか?
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.44
このような構成で
DB水平分割の移行
を行いました...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.45
DMS移行構成例
水平分割するDB ??台水平分割しないDB 1台
移行後移後前DMS
スレーブクラスター
マスタークラスター
DMS切り戻し
・・・・・・・・・・ ・・・・・・・・・・
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.46
移行プロセスとして
・スケジュールの確定
・DMSによる移行方法の確立
・負荷試験の実施
・リハーサルの実施
・本番移行を決行
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.47
スケジュールは
2018/7をターゲットに決定
移行準備期間は、2018/3~2018/7
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.48
DMSによる移行方法の確立について
まず水平分割化に伴い、全てのテーブル
を精査・再設計を実施した
そしてDMSのタスクによる移行を実施
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.49
DMSタスクとは
3つの主なフェーズで構成される
・既存のデータの全ロード(FullLoad)
・キャッシュされた変更の適用
・継続的なレプリケーション(CDC)
レプリケーションインスタンス上で実行されるタスク
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.50
移行手順案として
最終的にこの2案をベースに検討した...
・移行元DB Dump→リストア→DMSタスクでCDCレプリ
ケーション
・移行元DB→DMSタスクでFullLoad→CDCレプリケーション
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.51
AWS DMSを使用するには
・レプリケーションサーバーを作成する
・データストアに関する接続情報を持つソースエンドポイン
トとターゲットエンドポイントを作成する
・ソースデータストアとターゲットデータストアの間でデー
タを移行するには、1つ以上の移行タスクを作成する
ソースエンドポイント
ターゲットエンドポイント
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.52
最終的なDMS移行手順として
・移行先DBにスキーマ流し込み(index定義
無し)→ FullLoad →Index作成→CDCレプ
リケーション
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.53
なぜこの手順に
最初にスキーマだけを流しておくと、あとは
DMSが全て移行してくれる
Indexを事前に作成しておくと、FullLoadに時
間が掛かり移行が完了しない...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.54
DMSのタスクで移行を行うには
当初ソースフィルタにてソースからターゲッ
トに指定した条件(ユーザID % 20)
でデータを移行を想定...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.55
しかし想定外の事が
ソースフィルタの条件に関数がサポート
されていないため、フィルタ用カラムを
追加する必要が発生...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.56
移行先DB指定(0~19)するカラム
を追加するには
FastDDL(lab mode)によるカラム追加を検討した...
問題なく数十億レコードのテーブルでも1秒以下で完了するこ
とができた
※本番でのlab mode利用は推薦されていない為、十分検証が必要です。
今回はメンテナンス時に、一時的に利用しました...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.57
そして追加カラムに分割IDを挿入するに
は
稼働中に負荷を掛けないように時間を掛
けて分割IDを挿入する方法で実施
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.58
移行方法を整理すると
・事前にFastDDLで分割用カラムを追加
・カラムにソースフィルタの分割IDを追加
・DMSで移行を実施
移行先DBにスキーマ流し込み(index定義無し)→
FullLoad →Index作成→CDCレプリケーション
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.59
負荷試験の実施について
事前にこちらを準備する...
・本番環境同様の環境を準備する
・サーバアプリケーションの全APIを検証し、
シナリオ作成を準備する
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.60
詳細はこの後のLTで
そして負荷試験ツールにより、本番同様のシ
ナリオを実行する事で、早期に問題を発見→
修正を繰り返すことで開発期間の短縮および
信頼性を担保することが実現できた
また限界・耐久テストを実施し、正常動作の
処理上限値を確認できた
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.61
リハーサルの実施について
事前にリハーサル用のDMS環境を準備する...
ソースは本番DBクロスリージョンレプリカ
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.62
しかし高負荷を掛けた環境では
DMSのCDCレイテンシが増加し続ける事象
が発生した...
そのため同一リージョン(AZ)に別slave環
境を準備したが、それでも事象が改善され
ず...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.63
原因は複数のタスクで一つのSlave環境の
Masterを参照させる場合、binlogスレッド
が複数起動し、mutexの奪い合いが発生し
た...
そのためbinlogの処理速度が落ち、結果レプ
リケーション遅延が発生することが判明...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.64
最終的には、負荷を掛けない環境で、
DMSによる移行を実施することを判断し、
併せて各ソースのbinlog保持期間を長め
に設定した
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.65
次にDMS移行後の整合性確認は
当初、DMSタスクの検証機能を利用予定だった
が、フィルタを利用するとソースとターゲットで
データが異なるため、DMSの機能では検証でき
なくなるため、今回は利用できず...
・AWS DMS タスクの検証(制約事項を参照)
https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Validating.html
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.66
そのため他の方法を検討することに
mysqldbcompareでソースDBとリカバリーDBとの比較に
代用しようとしたが、データチェックで差分があるとデータ
比較でインスタンスが高負荷となり接続できなくなる事象が
発生...
結局、行数チェックとスキーマの比較にのみ利用、データの
整合性についてはchecksum tableを利用した...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.67
最後にDMS移行後の障害テストは
ダブルライト方式およびシングル切替時
の負荷を掛けた状況で、正常系・異常系
テストを実施し、想定通りの動作が確認
できた
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.68
本番移行について
準備
・本番slave環境、DMSタスク、レプリケー
ションインスタンス、ターゲットDB
・ソースDBの各テーブルに分割用カラムを追加
・カラムにユーザーIDの剰余IDを追加
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.69
移行メンテナンススケジュール
其の一
・夜間計画メンテナンスを実施
・DMSによる移行を実施
・ダブルライト方式に切替
其の二
・後日、データ整合性確認を実施
・問題なければダブルライトを停止
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.70
本番移行作業の手順は
夜間計画メンテナンスを実施し、DMSによ
る移行作業を決行...
移行後、ダブルライト方式に切替を実施
稼働中の動作および負荷を監視した...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.71
移行後、後日に整合性確認を実施
しかし切り戻し環境でデータ不整合が見つ
かった...
すべてDMSによる移行後DB→切り戻しDB
へのFullLoad時のデータ移行漏れであった...
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.72
原因は、ソース・ターゲットの
wait_timeoutが短かった為(60秒)
timeoutしたリクエストがロストされてい
た...
今回は28800秒に変更し、切り戻し環境への
再移行を実施する事で問題が解消した
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.73
改めて整合性をすべて確認後、ダブルラ
イトを停止し、切替が完了した
最後に少し問題が発生したが、全ての移
行作業が完了!!
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.
水平分割後サーバ構成
IIS 8.5 (Amazon EC2 Windows Server 2012 R2)
.NET Framework 4.5 + ASP.NET MVC 5
c4.8xlarge x 45
MySQL 5.6 (Amazon Aurora)
db.r4.16xlarge x 3(master x 1、slave x 2)
db.r4.4xlarge x 60(master x 20、slave x 40)
Redis 2.8 (Amazon ElastiCache)
cache.r3.4xlarge x 2
Memcached (Amazon ElastiCache)
cache.r3.2xlarge
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.
まとめ
75
今回は十分な準備期間あり、負荷試験ツールの
存在やAWSサポート支援など受けれる環境と
揃っており、無事にやり切り事が出来ました!
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.76
「ただ純粋に、面白いゲームを創ろう。」
ここには誰もが挑戦する場があります!
ぜひ仲間となり一緒に挑戦しましょう!!
Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.77
ご清聴ありがとうございました。

More Related Content

What's hot

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)NTT DATA Technology & Innovation
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したことAmazon Web Services Japan
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 

What's hot (20)

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 

Similar to これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~

大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜
大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜
大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜HatakeyamaAkihide
 
リクルートにおけるPaaS活用事例
リクルートにおけるPaaS活用事例リクルートにおけるPaaS活用事例
リクルートにおけるPaaS活用事例Recruit Technologies
 
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるRancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるMichitaka Terada
 
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)Ryusuke Ashiya
 
[db tech showcase Tokyo 2014] D15:日立ストレージと国産DBMS HiRDBで実現する『ワンランク上』のディザスタリカバリ...
[db tech showcase Tokyo 2014] D15:日立ストレージと国産DBMS HiRDBで実現する『ワンランク上』のディザスタリカバリ...[db tech showcase Tokyo 2014] D15:日立ストレージと国産DBMS HiRDBで実現する『ワンランク上』のディザスタリカバリ...
[db tech showcase Tokyo 2014] D15:日立ストレージと国産DBMS HiRDBで実現する『ワンランク上』のディザスタリカバリ...Insight Technology, Inc.
 
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」PC Cluster Consortium
 
【17-D-1】今どきのアーキテクチャを現場の立場で斬る
【17-D-1】今どきのアーキテクチャを現場の立場で斬る【17-D-1】今どきのアーキテクチャを現場の立場で斬る
【17-D-1】今どきのアーキテクチャを現場の立場で斬るDevelopers Summit
 
DeNAゲーム事業におけるデータエンジニアの貢献 [DeNA TechCon 2019]
DeNAゲーム事業におけるデータエンジニアの貢献 [DeNA TechCon 2019]DeNAゲーム事業におけるデータエンジニアの貢献 [DeNA TechCon 2019]
DeNAゲーム事業におけるデータエンジニアの貢献 [DeNA TechCon 2019]DeNA
 
もうSQLとNoSQLを選ぶ必要はない!?~両者を備えたスケールアウトデータベースGridDB~
もうSQLとNoSQLを選ぶ必要はない!?~両者を備えたスケールアウトデータベースGridDB~もうSQLとNoSQLを選ぶ必要はない!?~両者を備えたスケールアウトデータベースGridDB~
もうSQLとNoSQLを選ぶ必要はない!?~両者を備えたスケールアウトデータベースGridDB~griddb
 
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...日本マイクロソフト株式会社
 
3DCAD仮想デスクトップソリューションのご紹介
3DCAD仮想デスクトップソリューションのご紹介3DCAD仮想デスクトップソリューションのご紹介
3DCAD仮想デスクトップソリューションのご紹介Dell TechCenter Japan
 
Cloud Festa 2021 Winter 「デザイナー、データサイエンティスト、 クラウドエンジニア、で実現する共創の世界」
Cloud Festa 2021 Winter 「デザイナー、データサイエンティスト、 クラウドエンジニア、で実現する共創の世界」 Cloud Festa 2021 Winter 「デザイナー、データサイエンティスト、 クラウドエンジニア、で実現する共創の世界」
Cloud Festa 2021 Winter 「デザイナー、データサイエンティスト、 クラウドエンジニア、で実現する共創の世界」 Tsuyoshi Hirayama
 
Windows 365 Enterprise に触れてみよう
Windows 365 Enterprise に触れてみようWindows 365 Enterprise に触れてみよう
Windows 365 Enterprise に触れてみようYutaro Tamai
 
【Webinar-Slide】DataBridgeとは
【Webinar-Slide】DataBridgeとは【Webinar-Slide】DataBridgeとは
【Webinar-Slide】DataBridgeとはTalend KK
 
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Takeshi Hirosue
 
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発Mao Ohnishi
 
XenDesktop / XenAppグラフィック ディープダイブ
XenDesktop / XenAppグラフィック ディープダイブ XenDesktop / XenAppグラフィック ディープダイブ
XenDesktop / XenAppグラフィック ディープダイブ Citrix Systems Japan
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA
 
今こそクラウドへ!データの移行、連携、統合のコツ
今こそクラウドへ!データの移行、連携、統合のコツ今こそクラウドへ!データの移行、連携、統合のコツ
今こそクラウドへ!データの移行、連携、統合のコツ株式会社クライム
 
ビッグデータやIoTシステムを支えるデータベース 『GridDB』
ビッグデータやIoTシステムを支えるデータベース 『GridDB』ビッグデータやIoTシステムを支えるデータベース 『GridDB』
ビッグデータやIoTシステムを支えるデータベース 『GridDB』griddb
 

Similar to これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~ (20)

大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜
大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜
大規模プロジェクトの制作裏話〜改善から成し遂げるまでのプロセス〜
 
リクルートにおけるPaaS活用事例
リクルートにおけるPaaS活用事例リクルートにおけるPaaS活用事例
リクルートにおけるPaaS活用事例
 
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるRancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げる
 
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
分析のモダナイズへのヒント:データ価値を最大化するビジュアル分析とエンタープライズ組織への展開 - 経営課題解決シンポジウム (2018/09/28)
 
[db tech showcase Tokyo 2014] D15:日立ストレージと国産DBMS HiRDBで実現する『ワンランク上』のディザスタリカバリ...
[db tech showcase Tokyo 2014] D15:日立ストレージと国産DBMS HiRDBで実現する『ワンランク上』のディザスタリカバリ...[db tech showcase Tokyo 2014] D15:日立ストレージと国産DBMS HiRDBで実現する『ワンランク上』のディザスタリカバリ...
[db tech showcase Tokyo 2014] D15:日立ストレージと国産DBMS HiRDBで実現する『ワンランク上』のディザスタリカバリ...
 
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
 
【17-D-1】今どきのアーキテクチャを現場の立場で斬る
【17-D-1】今どきのアーキテクチャを現場の立場で斬る【17-D-1】今どきのアーキテクチャを現場の立場で斬る
【17-D-1】今どきのアーキテクチャを現場の立場で斬る
 
DeNAゲーム事業におけるデータエンジニアの貢献 [DeNA TechCon 2019]
DeNAゲーム事業におけるデータエンジニアの貢献 [DeNA TechCon 2019]DeNAゲーム事業におけるデータエンジニアの貢献 [DeNA TechCon 2019]
DeNAゲーム事業におけるデータエンジニアの貢献 [DeNA TechCon 2019]
 
もうSQLとNoSQLを選ぶ必要はない!?~両者を備えたスケールアウトデータベースGridDB~
もうSQLとNoSQLを選ぶ必要はない!?~両者を備えたスケールアウトデータベースGridDB~もうSQLとNoSQLを選ぶ必要はない!?~両者を備えたスケールアウトデータベースGridDB~
もうSQLとNoSQLを選ぶ必要はない!?~両者を備えたスケールアウトデータベースGridDB~
 
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...
B13_株式会社資生堂 プロフェッショナル事業の日本とタイの基幹系業務を「 Microsoft Dynamics 365 」で統合管理 [Microsof...
 
3DCAD仮想デスクトップソリューションのご紹介
3DCAD仮想デスクトップソリューションのご紹介3DCAD仮想デスクトップソリューションのご紹介
3DCAD仮想デスクトップソリューションのご紹介
 
Cloud Festa 2021 Winter 「デザイナー、データサイエンティスト、 クラウドエンジニア、で実現する共創の世界」
Cloud Festa 2021 Winter 「デザイナー、データサイエンティスト、 クラウドエンジニア、で実現する共創の世界」 Cloud Festa 2021 Winter 「デザイナー、データサイエンティスト、 クラウドエンジニア、で実現する共創の世界」
Cloud Festa 2021 Winter 「デザイナー、データサイエンティスト、 クラウドエンジニア、で実現する共創の世界」
 
Windows 365 Enterprise に触れてみよう
Windows 365 Enterprise に触れてみようWindows 365 Enterprise に触れてみよう
Windows 365 Enterprise に触れてみよう
 
【Webinar-Slide】DataBridgeとは
【Webinar-Slide】DataBridgeとは【Webinar-Slide】DataBridgeとは
【Webinar-Slide】DataBridgeとは
 
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
 
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発
 
XenDesktop / XenAppグラフィック ディープダイブ
XenDesktop / XenAppグラフィック ディープダイブ XenDesktop / XenAppグラフィック ディープダイブ
XenDesktop / XenAppグラフィック ディープダイブ
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
 
今こそクラウドへ!データの移行、連携、統合のコツ
今こそクラウドへ!データの移行、連携、統合のコツ今こそクラウドへ!データの移行、連携、統合のコツ
今こそクラウドへ!データの移行、連携、統合のコツ
 
ビッグデータやIoTシステムを支えるデータベース 『GridDB』
ビッグデータやIoTシステムを支えるデータベース 『GridDB』ビッグデータやIoTシステムを支えるデータベース 『GridDB』
ビッグデータやIoTシステムを支えるデータベース 『GridDB』
 

これで怖くない!?大規模環境で体験するDB負荷対策~垂直から水平の彼方へ~

  • 1. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. DELiGHTWORKS Inc. これで怖くない!?大規模環境で体験するDB負荷対策 ~垂直から水平の彼方へ~
  • 2. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 自己紹介 名前:甲 英明(Kabuto Hideaki) これまで社内SEとして、基幹系、医療系システム、BtoB向けWEBサービス、BtoC向け音楽・ 書籍コンテンツ配信サービスのインフラ設計~保守、運用など業界問わず携わる 2017年にディライトワークス株式会社でインフラエンジニアとして入社 海外向けコンテンツの立ち上げメンバーとしてインフラ周りを担当 現在は組織・プロジェクトを横断的にインフラ基盤の設計・構築・運用などを担っています
  • 3. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 会社紹介(ディライトワークス) 2014/1/22に設立したまだ若い会社です。 従業員数は、380名(2018年7月現在 派遣社員、業務委託含む) 「ただ純粋に、面白いゲームを創ろう。」 好評配信中のタイトルです。 Fate/Grand Order(好評配信中) Fate/Grand Order Arcade(好評稼働中) Fate/Grand Order VR feat.マシュ・キリエライト(好評配信中) バンドやろうぜ!(好評配信中) ※企画・開発・運用を行っています。 他にも開発中のタイトルがございます。
  • 4. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. アジェンダ 第一章 なぜいま垂直分割から水平分割なのか? 第二章 水平分割への移行課題は? 最終章 どのように移行を実現できたのか?
  • 5. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 5 第一章開演
  • 6. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 6 なぜいま垂直分割から水平分割なのか?
  • 7. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 7 まずは垂直分割の経緯から遡ってみます
  • 8. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 8 それは突然の出来事でした... 2016年5月
  • 9. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 9 これまで1台だったDBを分割すること に...
  • 10. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.10 DB分割とは Aテーブル Bテーブル Cテーブル Dテーブル Eテーブル Fテーブル Eテーブル Fテーブル Eテーブル Fテーブル ・・・・ 水平分割 (同テーブルのID単位による分割) 垂直分割 (テーブル単位による分割)
  • 11. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.11 今回テーブルのデータが肥大化し、1台 のDBではインデックスがメモリに載らな くなり、性能劣化が現れたため検討...
  • 12. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.12 そのとき垂直か?水平か? 差し迫った負荷対策で、その時は十分な 検討時間がなかった... 実装と移行が比較的容易である選択を 行った...
  • 13. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.13 結果、垂直分割を実施した... まずは4分割 その後5分割、6分割 テーブル分割で当座をしのぐ日々...
  • 14. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.14 そして再び機会が巡り... 2018年1月
  • 15. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.15 テーブルの肥大化が進み 参照クエリのレイテンシが顕著に増加し始め た... slaveを追加し、対応を実施したが現状の ペースでデータ量が増加した場合の懸念が あった...
  • 16. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 当時の垂直分割サーバ構成 IIS 8.5 (Amazon EC2 Windows Server 2012 R2) .NET Framework 4.5 + ASP.NET MVC 5 c4.8xlarge x 45 MySQL 5.6 (Amazon Aurora) db.r4.16xlarge x 18(master x 6、slave x 12) Redis 2.8 (Amazon ElastiCache) cache.r3.4xlarge x 2 Memcached (Amazon ElastiCache) cache.r3.2xlarge
  • 17. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.17 今回はまだ十分に検討する時間がある... 前回出来なかった水平分割の再検討いつ やるの? 今でしょう!!
  • 18. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.18 検討案として ・垂直と水平の組み合わせ ・すべてを水平に切り替える この2択になった...
  • 19. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.19 垂直構成の問題点として 1ユーザの処理が1つのトランザクショ ンに載らないため、データ不整合が発生 しやすい...
  • 20. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.20 また垂直と水平が混在している構成だと 垂直テーブルが肥大化する度に移行が必 要なる... プログラムの複雑さも増し運用コストが 高くなる...
  • 21. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.21 そうなると水平に一本化するのが必然 これまでの守りから、 今こそ攻めに転じる時!!
  • 22. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.22 このようにして DB水平分割プロジェクトが始動 することになった...
  • 23. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.23 第一章終演
  • 24. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.24 第二章開演
  • 25. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.25 水平分割への移行課題は?
  • 26. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.26 課題として ・何をキーとして分割を行うか? ・何分割する必要があるか? ・どのように移行を行うか? ・ダウンタイムはどの程度必要か? ・失敗した場合の切り戻しはどうするか?
  • 27. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.27 内外問わず有識者からの意見を私たちは 求め検討した... そして答えが...
  • 28. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.28 何をキーとして分割を行うか? 答えは、ユーザID... 更新が1つのトランザクションに載るた め、垂直分割時のデータ不整合問題を改 善することができる
  • 29. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.29 何分割する必要があるか? 出来るだけ今回の分割作業で最後にした い 答えは、20分割...
  • 30. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.30 どのように移行を行うか? 最終的にこの2案で検討することに... 案①として AWS Database Migration Service (DMS)を利用する
  • 31. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.31 DMSとは データベースをすばやく安全に AWS に移行できま す。移行中でもソースデータベースは完全に利用可 能な状態に保たれ、データベースを利用するアプリ ケーションのダウンタイムは最小限に抑えられます。 とあり、Aurora間での移行も可能 https://aws.amazon.com/jp/dms/
  • 32. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.32 どのように移行を行うか? 案②として、 ログデータを利用する
  • 33. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.33 ログデータを利用する場合 アプリケーションから吐かれたlogを全 てkinesisで送りlambdaもしくは取り 込み専用のサーバを用意しデータを入れ る
  • 34. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.34 では最終的にどのように移行を行うか? 答えは、案①のDMSを利用する方針に決定 ・ダウンタイムを極力減らす移行が可能 ・ログデータはDB更新でエラー発生した際、 ログとDBに差異が発生するリスクがある
  • 35. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.35 ダウンタイムはどの程度必要か? 答えは、数時間... DMSでのライブマイグレーション後の切 替作業の時間を想定
  • 36. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.36 失敗した場合の切り戻しは? 答えは、ダブルライト方式およびリカバ リー環境をDMSで準備する またXAトランザクションを検討する
  • 37. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.37 ダブルライト方式とは ・移行完了後、まだ移行前DBを残す ・参照クエリは移行後DBを参照する ・更新クエリは両方のDBを更新する
  • 38. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.38 XAトランザクションは AWSよりAmazon Aurora MySQLではXAト ランザクションはパフォーマンス面で影響が 出る可能性があるとの事で最終的には断念... ・Amazon Aurora MySQL での XA トランザクションの使用 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/AuroraMySQL.BestPra ctices.html#AuroraMySQL.BestPractices.XA
  • 39. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.39 このようにして 課題の洗い出しを行っていった...
  • 40. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.40 移行課題を整理すると ・ユーザIDを分割IDとして利用する ・20分割で移行を行う ・DMSで移行を行う ・ダウンタイムは数時間(想定) ・切り戻しはダブルライト方式とDMSでリカバ リー環境を準備する
  • 41. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.41 第二章終演
  • 42. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.42 最終章開演
  • 43. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.43 どのように移行を実現できたのか?
  • 44. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.44 このような構成で DB水平分割の移行 を行いました...
  • 45. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.45 DMS移行構成例 水平分割するDB ??台水平分割しないDB 1台 移行後移後前DMS スレーブクラスター マスタークラスター DMS切り戻し ・・・・・・・・・・ ・・・・・・・・・・
  • 46. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.46 移行プロセスとして ・スケジュールの確定 ・DMSによる移行方法の確立 ・負荷試験の実施 ・リハーサルの実施 ・本番移行を決行
  • 47. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.47 スケジュールは 2018/7をターゲットに決定 移行準備期間は、2018/3~2018/7
  • 48. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.48 DMSによる移行方法の確立について まず水平分割化に伴い、全てのテーブル を精査・再設計を実施した そしてDMSのタスクによる移行を実施
  • 49. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.49 DMSタスクとは 3つの主なフェーズで構成される ・既存のデータの全ロード(FullLoad) ・キャッシュされた変更の適用 ・継続的なレプリケーション(CDC) レプリケーションインスタンス上で実行されるタスク
  • 50. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.50 移行手順案として 最終的にこの2案をベースに検討した... ・移行元DB Dump→リストア→DMSタスクでCDCレプリ ケーション ・移行元DB→DMSタスクでFullLoad→CDCレプリケーション
  • 51. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.51 AWS DMSを使用するには ・レプリケーションサーバーを作成する ・データストアに関する接続情報を持つソースエンドポイン トとターゲットエンドポイントを作成する ・ソースデータストアとターゲットデータストアの間でデー タを移行するには、1つ以上の移行タスクを作成する ソースエンドポイント ターゲットエンドポイント
  • 52. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.52 最終的なDMS移行手順として ・移行先DBにスキーマ流し込み(index定義 無し)→ FullLoad →Index作成→CDCレプ リケーション
  • 53. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.53 なぜこの手順に 最初にスキーマだけを流しておくと、あとは DMSが全て移行してくれる Indexを事前に作成しておくと、FullLoadに時 間が掛かり移行が完了しない...
  • 54. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.54 DMSのタスクで移行を行うには 当初ソースフィルタにてソースからターゲッ トに指定した条件(ユーザID % 20) でデータを移行を想定...
  • 55. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.55 しかし想定外の事が ソースフィルタの条件に関数がサポート されていないため、フィルタ用カラムを 追加する必要が発生...
  • 56. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.56 移行先DB指定(0~19)するカラム を追加するには FastDDL(lab mode)によるカラム追加を検討した... 問題なく数十億レコードのテーブルでも1秒以下で完了するこ とができた ※本番でのlab mode利用は推薦されていない為、十分検証が必要です。 今回はメンテナンス時に、一時的に利用しました...
  • 57. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.57 そして追加カラムに分割IDを挿入するに は 稼働中に負荷を掛けないように時間を掛 けて分割IDを挿入する方法で実施
  • 58. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.58 移行方法を整理すると ・事前にFastDDLで分割用カラムを追加 ・カラムにソースフィルタの分割IDを追加 ・DMSで移行を実施 移行先DBにスキーマ流し込み(index定義無し)→ FullLoad →Index作成→CDCレプリケーション
  • 59. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.59 負荷試験の実施について 事前にこちらを準備する... ・本番環境同様の環境を準備する ・サーバアプリケーションの全APIを検証し、 シナリオ作成を準備する
  • 60. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.60 詳細はこの後のLTで そして負荷試験ツールにより、本番同様のシ ナリオを実行する事で、早期に問題を発見→ 修正を繰り返すことで開発期間の短縮および 信頼性を担保することが実現できた また限界・耐久テストを実施し、正常動作の 処理上限値を確認できた
  • 61. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.61 リハーサルの実施について 事前にリハーサル用のDMS環境を準備する... ソースは本番DBクロスリージョンレプリカ
  • 62. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.62 しかし高負荷を掛けた環境では DMSのCDCレイテンシが増加し続ける事象 が発生した... そのため同一リージョン(AZ)に別slave環 境を準備したが、それでも事象が改善され ず...
  • 63. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.63 原因は複数のタスクで一つのSlave環境の Masterを参照させる場合、binlogスレッド が複数起動し、mutexの奪い合いが発生し た... そのためbinlogの処理速度が落ち、結果レプ リケーション遅延が発生することが判明...
  • 64. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.64 最終的には、負荷を掛けない環境で、 DMSによる移行を実施することを判断し、 併せて各ソースのbinlog保持期間を長め に設定した
  • 65. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.65 次にDMS移行後の整合性確認は 当初、DMSタスクの検証機能を利用予定だった が、フィルタを利用するとソースとターゲットで データが異なるため、DMSの機能では検証でき なくなるため、今回は利用できず... ・AWS DMS タスクの検証(制約事項を参照) https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Validating.html
  • 66. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.66 そのため他の方法を検討することに mysqldbcompareでソースDBとリカバリーDBとの比較に 代用しようとしたが、データチェックで差分があるとデータ 比較でインスタンスが高負荷となり接続できなくなる事象が 発生... 結局、行数チェックとスキーマの比較にのみ利用、データの 整合性についてはchecksum tableを利用した...
  • 67. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.67 最後にDMS移行後の障害テストは ダブルライト方式およびシングル切替時 の負荷を掛けた状況で、正常系・異常系 テストを実施し、想定通りの動作が確認 できた
  • 68. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.68 本番移行について 準備 ・本番slave環境、DMSタスク、レプリケー ションインスタンス、ターゲットDB ・ソースDBの各テーブルに分割用カラムを追加 ・カラムにユーザーIDの剰余IDを追加
  • 69. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.69 移行メンテナンススケジュール 其の一 ・夜間計画メンテナンスを実施 ・DMSによる移行を実施 ・ダブルライト方式に切替 其の二 ・後日、データ整合性確認を実施 ・問題なければダブルライトを停止
  • 70. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.70 本番移行作業の手順は 夜間計画メンテナンスを実施し、DMSによ る移行作業を決行... 移行後、ダブルライト方式に切替を実施 稼働中の動作および負荷を監視した...
  • 71. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.71 移行後、後日に整合性確認を実施 しかし切り戻し環境でデータ不整合が見つ かった... すべてDMSによる移行後DB→切り戻しDB へのFullLoad時のデータ移行漏れであった...
  • 72. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.72 原因は、ソース・ターゲットの wait_timeoutが短かった為(60秒) timeoutしたリクエストがロストされてい た... 今回は28800秒に変更し、切り戻し環境への 再移行を実施する事で問題が解消した
  • 73. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.73 改めて整合性をすべて確認後、ダブルラ イトを停止し、切替が完了した 最後に少し問題が発生したが、全ての移 行作業が完了!!
  • 74. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. 水平分割後サーバ構成 IIS 8.5 (Amazon EC2 Windows Server 2012 R2) .NET Framework 4.5 + ASP.NET MVC 5 c4.8xlarge x 45 MySQL 5.6 (Amazon Aurora) db.r4.16xlarge x 3(master x 1、slave x 2) db.r4.4xlarge x 60(master x 20、slave x 40) Redis 2.8 (Amazon ElastiCache) cache.r3.4xlarge x 2 Memcached (Amazon ElastiCache) cache.r3.2xlarge
  • 75. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved. まとめ 75 今回は十分な準備期間あり、負荷試験ツールの 存在やAWSサポート支援など受けれる環境と 揃っており、無事にやり切り事が出来ました!
  • 76. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.76 「ただ純粋に、面白いゲームを創ろう。」 ここには誰もが挑戦する場があります! ぜひ仲間となり一緒に挑戦しましょう!!
  • 77. Copyright 2018 DELiGHTWORKS Inc. All Rights Reserved.77 ご清聴ありがとうございました。