Slide 1

Slide 1 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. 株式会社ZOZOテクノロジーズ 開発部 リーダー 鶴見 純一 / 杉山 弘二 ZOZOTOWN Azure SQL Database 節約術

Slide 2

Slide 2 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. プロフィール 2016年株式会社スタートトゥデイ工務店 (現 株式会社ZOZOテクノロジーズ)入社。 入社当初はWEARのバックエンドを担当。その後、 2017年冬からZOZOTOWNリプレースを担当。 ZOZOテクノロジーズ 開発部 リプレースチーム リーダー 鶴見 純一

Slide 3

Slide 3 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. プロフィール 2017年株式会社スタートトゥデイ工務店 (現 株式会社ZOZOテクノロジーズ)入社。 仕事はクラウド周り。趣味はiOSアプリ作り。 対応ジャンル幅広のクリエイター。 ZOZOテクノロジーズ 開発部 リプレースチーム 杉山 弘二

Slide 4

Slide 4 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. アジェンダ ・SQL Database 節約の経緯 ・SQL Database オートスケール ・SQL Database Read Scale-Out ・監視設定

Slide 5

Slide 5 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 オンプレで苦労した事の1つは、 データベースをスケールアップさせるのが容易ではない事。

Slide 6

Slide 6 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 オンプレで苦労した事の1つは、 データベースをスケールアップさせるのが容易ではない事。 要望:セール時だけスケールアップさせたい

Slide 7

Slide 7 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 オンプレで苦労した事の1つは、 データベースをスケールアップさせるのが容易ではない事。 2018/01 冬セール 2018/05 ZOZOWEEKセール 2018/06 夏セール 2018/11 ZOZOWEEKセール / 福袋 ※2018年セール時期実績

Slide 8

Slide 8 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 オンプレで苦労した事の1つは、 データベースをスケールアップさせるのが容易ではない事。 オンプレでの解決策 セールで耐えられるだけのリソースを事前に用意する。 (ハードウェア調達など)

Slide 9

Slide 9 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 オンプレで苦労した事の1つは、 データベースをスケールアップさせるのが容易ではない事。 クラウドでの解決策 データベースをスケールアップさせることが可能。

Slide 10

Slide 10 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 参照系データベースをクラウドに移行した。 書込系データベース SQL Server 参照系データベース SQL Server オンプレミス

Slide 11

Slide 11 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 参照系データベースをクラウドに移行した。 書込系データベース SQL Server 参照系データベース SQL Server オンプレミス

Slide 12

Slide 12 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 参照系データベースをクラウドに移行した。 書込系データベース SQL Server オンプレミス 参照系データベース SQL Database クラウド(Azure) レプリケーション

Slide 13

Slide 13 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 クラウドにデータベースを移行し柔軟にスケールできるようになったのは 良いが料金が高い(予算オーバー)・ ・ ・ コスト削減が必要に・ ・ ・

Slide 14

Slide 14 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 Azure SQL Database 料金 リージョン:東日本 / ハードウェア世代:4世代 / モデル:vCore / サービスレベル:ビジネス クリティカル その他、容量も1GB単位で選択でき課金されます。 Core数 メモリ (GB) 月額 (¥) 4 28 約23.5万 8 56 約47.0万 16 112 約94.1万 24 157 約141.0万 2019年5月時点の金額

Slide 15

Slide 15 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database 節約の経緯 コスト節約のために行った2つの事。 • SQL Database オートスケール。 • SQL Database Read Scale-Out。 `

Slide 16

Slide 16 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database オートスケール オートスケールは、2種類の方法が考えられる。 • データベースの CPU やメモリ使用率によってスケールを変更する。 • アクセスの増える時間が分かっていれば時間帯でスケール変更する。 `

Slide 17

Slide 17 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database オートスケール オートスケールについて ZOZOTOWN は1日のアクセスに波があるため、スケール変更を行いコスト削減する。 ` 朝~夕方 アクセス数:普通 夕方~夜 アクセス数:多い 深夜 アクセス数:少ない ZOZOTOWN の場合

Slide 18

Slide 18 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database オートスケール オートスケールについて ZOZOTOWN は1日のアクセスに波があるため、スケール変更を行いコスト削減する。 ` 朝~夕方 アクセス数:普通 夕方~夜 アクセス数:多い 深夜 アクセス数:少ない ZOZOTOWN の場合 CPU:8Core / メモリ:56GB CPU:16Core / メモリ:112GB CPU:4Core / メモリ:28GB

Slide 19

Slide 19 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database オートスケール 例えば、以下のような設定にする。 リージョン:東日本 / ハードウェア世代:4世代 / モデル:vCore / サービスレベル:ビジネス クリティカル ` 時間帯 Core数 メモリ (GB) 1時間 8:00 – 18:00 8 56 ¥644.2 18:00 – 24:00 16 112 ¥1288.5 00:00 – 8:00 4 28 ¥322.1

Slide 20

Slide 20 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database オートスケール 常に 16Core を利用した場合 ¥1,288.5 (16Core) * 24時間 * 30日 = ¥927,720 時間帯別にスケール変更した場合 ¥644.2 (8Core) * 10時間 * 30日 = ¥193,260 ¥1,288.5 (16Core) * 6時間 * 30日 = ¥231,930 ¥322.1 (4Core) * 8時間 * 30日 = ¥77,304 合計 ¥502,494 `

Slide 21

Slide 21 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database オートスケール Azure Automation により自動化させる。 Azure Automation は PowerShell を定期的に実行してくれるサービス。 `

Slide 22

Slide 22 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database オートスケール スケール変更する PowerShell を用意する。 Set-AzSqlDatabase -ResourceGroupName ` -DatabaseName ` -ServerName ` -Edition ` -ComputeGeneration ` -VCore

Slide 23

Slide 23 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database オートスケール Azure Automation の Runbook に PowerShell を登録し、 スケジュールを決めるだけでスケールできるようになる。 CPUやメモリの使用率でスケールさせる場合は、定期的にCPUやメモリのチェックを Azure Automation に組み込む。

Slide 24

Slide 24 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database オートスケール メリット • コスト削減できる。 • 仕組み化したことでセール時も同様の対応が可能 デメリット • ビジネス クリティカルの場合、ZOZOTOWNだとスケール変更に30分程度かかる。 (スケールの時間はモデル、サービスレベル、容量により異なります) • スケール変更時(切替時)に10秒程度の切断がある。 • スケールダウンでメモリも小さくしすぎると、主要データがメモリに乗らなくなる可能性がある。 (パフォーマンス劣化の可能性) `

Slide 25

Slide 25 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database Read Scale-Out ユーザ

Slide 26

Slide 26 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database Read Scale-Out ユーザ Primary Replica Secondary Replica Secondary Replica DTUモデル Premium または、vCore モデル ビジネス クリティカルを利用すると3重化される。 Read Scale-Out にて Secondary Replica の1つを Read することが可能となる。 同期

Slide 27

Slide 27 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database Read Scale-Out 特徴 • Primary Replica はデータの Read / Write が可能。 • Secondary Replica はデータの Read のみ可能。 デフォルトで Read 機能は OFF になっているため利用するときは有効化が必要。 • Secondary Replica は2つ作成されるが、Read として利用できるのは1つのみ。

Slide 28

Slide 28 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database Read Scale-Out Azure Portal から簡単に設定可能

Slide 29

Slide 29 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database Read Scale-Out PowerShell でも設定可能 Set-AzSqlDatabase -ResourceGroupName -ServerName ` -DatabaseName ` -ReadScale Enabled

Slide 30

Slide 30 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database Read Scale-Out 接続時に Primary Replica、Secondary Replica を指定する # Primary Replica接続 Server=tcp:;Database=;ApplicationIntent=ReadWrite; User ID=;Password= # Secondary Replica接続 Server=tcp:;Database=;ApplicationIntent=ReadOnly; User ID=;Password=

Slide 31

Slide 31 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database Read Scale-Out メリット • 1台のデータベース料金で、2台分の Read として利用できる。 デメリット • Secondary Replica のメトリクスが簡単に取得できない。 標準でメトリクス取得が用意されていないため、データベースに接続し 直接参照しないとメモリやCPUの値が取れない。

Slide 32

Slide 32 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. 監視設定 Read Scale-Out のデメリットをどのように解決し、 運用しているかをお話させていただきます。

Slide 33

Slide 33 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. Read Scale-Out のデメリット ・Azure 標準の機能では、 Secondary Replica の メトリクス取得ができない。 ・監視できないサービスは運用できない。

Slide 34

Slide 34 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. Read Scale-Out のデメリット ・Azure 標準の機能では、 Secondary Replica の メトリクス取得ができない。 ・監視できないサービスは運用できない。 Secondary Replica も含めた、カスタムメトリクス収集システムを 自前で作って Datadog で運用している。

Slide 35

Slide 35 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. 監視ポイント システム監視の要件として、 Read Scale-Out を使用する場合でも、 CPU、メモリ、ディスクI/Oのメトリクスは必要。

Slide 36

Slide 36 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. 監視システムに必要な仕様 ・Secondary Replica も含めた、定期的なメトリクス取得 ・ジョブやレプリケーションなどの、各種カスタムメトリクス取得 ・台数増減に合わせた稼働しているデータベースのメトリクスを動的に取得 ・安定した定期実行 など

Slide 37

Slide 37 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. 定期実行を行うシステムを構築する場合の選択肢 ・Virtual Machine を立てて cron で定期実行させる。 ・OSS系のジョブスケジューラーを使う。 など

Slide 38

Slide 38 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. 定期実行を行うシステムを構築する場合の選択肢 ・Virtual Machine を立てて cron で定期実行させる。 ・OSS系のジョブスケジューラーを使う。 ┗ kubernetes の 「CronJob」 を選択。 弊社では、クラウドで運用するアプリケーションを kubernetes で運用している。 監視システムの運用環境も kubernetes に統一することで、 管理の面でも運用負荷が下がることから、 kubernetes CronJob を選択した。

Slide 39

Slide 39 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. kubernetesとは? 簡単に言うと、 コンテナ化したアプリケーションのデプロイ、スケーリング、および管理を行 うための、オープンソースのコンテナオーケストレーションシステム 現在では、主要クラウドベンダーがサポートする、プラットフォーム。

Slide 40

Slide 40 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. kubernetes CronJob とは? 定期実行を実現するための kubernetes リソース。 kubernetes CronJob を使用して、 ターゲットに合わせたカスタムメトリクス収集システムを稼働させ、 Datadog で可視化をして、監視システムを構築・運用している。

Slide 41

Slide 41 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. CronJob のメリット:コンテナの鮮度 ・定期実行で Jobコンテナが新規で起動するため、 毎回フレッシュなコンテナが起動し、終了後はコンテナは破棄される。 Jobコンテナ内にキャッシュやゴミがたまらない。

Slide 42

Slide 42 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. CronJob のメリット:機能性 ・ジョブスケジューラーなので cron にはない自動リトライや重複実行の制御、生存期間設定など 使いやすい。

Slide 43

Slide 43 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. CronJob のメリット:汎用性・メンテナンス性 ・マニフェストファイルに 環境変数や秘匿情報を設定できるため、 稼働設定の変更が容易。1種類の Jobイメージを全ターゲットに流用できるため、 汎用性・メンテナンス性が良い。 もちろん、汎用性を考慮したコンテナ設計は必要。

Slide 44

Slide 44 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. CronJobのメリット:安定性 ・Job のスケジュール実行の際、Node の空きスペースを考慮して、 いい感じに Pod を配置してくれるため、安定して稼働する。

Slide 45

Slide 45 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. 使用する kubernetes リソース ・Jobコンテナ: cronjob ( monitor-cronjob ) 対象データベース(Read-Scale-Out の Secondary Replica)のメトリクス情報を API に問い合わせ。取得したメトリクスを Datadog に送信する。 ・APIコンテナ: deployment ( monitor-deployment ) 任意のデータベースに DMV(動的管理ビュー)の情報取得クエリを発行し、JSON返却。 ・ClusterIP: service ( monitor-service ) deployment を Cluster内で名前解決させる。

Slide 46

Slide 46 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. メトリクス収集システムの構成

Slide 47

Slide 47 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. Datadogによる、メトリクスの可視化 ・Read Scale-Out を使用した場合でも、Primary Replica と Secondary Replica のメトリクスを取得・可視化することができた。

Slide 48

Slide 48 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. Datadog による、Alerting ・メトリクスを使用して、閾値を利用してスラックへアラートする。

Slide 49

Slide 49 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. PagerDuty で OnCall ・緊急時には、PagerDuty で監視担当者へオンコール

Slide 50

Slide 50 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. ちなみに、メトリクス収集システムを稼働している kubernetes の監視はどうしてるの? ・Datadog には、「Azure Integration」や「kubernetes Integration」があり、 各種標準的なメトリクス取得ができるので、これを使う。 なお、Azure Integration では Secondary Replica のメトリクスは 現在、取得できない。 ※2019年5月23日現在

Slide 51

Slide 51 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved. まとめ Azure Automation、Read Scale-Out 、kubernetes CronJobを組み 合わせて システムを構築することで、当初のコストから約70%程度 削減することができた。 システム刷新する場合、コストも大事な要素。 ビジネスにも影響があるため、非常に良い取り組みとなった。

Slide 52

Slide 52 text

Copyright © ZOZO Technologies, Inc. All Rights Reserved.