ZOZOTOWN Azure SQL Database 節約術 / ZOZOTOWN SQL Database Cost Reduction

A0c23843dd06fec78990f19f37538c5e?s=47 tsurumi
May 24, 2019

ZOZOTOWN Azure SQL Database 節約術 / ZOZOTOWN SQL Database Cost Reduction

ZOZOTOWN で Azure SQL Database のコスト削減を行いました。
その具体的な方法についてお伝えします。

A0c23843dd06fec78990f19f37538c5e?s=128

tsurumi

May 24, 2019
Tweet

Transcript

  1. Copyright © ZOZO Technologies, Inc. All Rights Reserved. 株式会社ZOZOテクノロジーズ 開発部

    リーダー 鶴見 純一 / 杉山 弘二 ZOZOTOWN Azure SQL Database 節約術
  2. Copyright © ZOZO Technologies, Inc. All Rights Reserved. プロフィール 2016年株式会社スタートトゥデイ工務店

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Read Scale-Out ユーザ
  26. 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 することが可能となる。 同期
  27. 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つのみ。
  28. Copyright © ZOZO Technologies, Inc. All Rights Reserved. SQL Database

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

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

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

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

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

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

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

    Read Scale-Out を使用する場合でも、 CPU、メモリ、ディスクI/Oのメトリクスは必要。
  36. Copyright © ZOZO Technologies, Inc. All Rights Reserved. 監視システムに必要な仕様 ・Secondary

    Replica も含めた、定期的なメトリクス取得 ・ジョブやレプリケーションなどの、各種カスタムメトリクス取得 ・台数増減に合わせた稼働しているデータベースのメトリクスを動的に取得 ・安定した定期実行 など
  37. Copyright © ZOZO Technologies, Inc. All Rights Reserved. 定期実行を行うシステムを構築する場合の選択肢 ・Virtual

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

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

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

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

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

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

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

    のスケジュール実行の際、Node の空きスペースを考慮して、 いい感じに Pod を配置してくれるため、安定して稼働する。
  45. 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内で名前解決させる。
  46. Copyright © ZOZO Technologies, Inc. All Rights Reserved. メトリクス収集システムの構成

  47. Copyright © ZOZO Technologies, Inc. All Rights Reserved. Datadogによる、メトリクスの可視化 ・Read

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

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

    OnCall ・緊急時には、PagerDuty で監視担当者へオンコール
  50. Copyright © ZOZO Technologies, Inc. All Rights Reserved. ちなみに、メトリクス収集システムを稼働している kubernetes

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

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