カスタムコントローラを利用したスパイクに耐えるオートスケーリングの仕組みを構築
by
TomoyukiSugiyama
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
カスタムコントローラを利用した スパイクに耐えるオートスケーリ ングの仕組みを構築 2023/08/29 SaaSプロダクトを支えるSREの取り組み 1
Slide 2
Slide 2 text
杉山 智之 / すぎやま ともゆき 経歴 2015年 (株)デンソートリム入社 生産技術部 2016年 (株)デンソーに1年間出向 2017年 設備設計、自動化ラインの立ち上げ 2021年 再び、(株)デンソーに1年間出向 2022年 検査の標準化 2022年11月 (株)ユーザベースへ入社 SRE 工場のインフラ から Webサービスのインフラ へ 2 自己紹介
Slide 3
Slide 3 text
ユーザベースのSaaS事業 SaaS事業の開発組織とSREの位置付け SREでの実験的な取組み事例紹介 本日お伝えすること ● Webエンジニア歴10ヶ月 SREとの向き合い方 01 02 03 3 Product Development Team SRE ※実装までの内容であり、運用に至っていないです
Slide 4
Slide 4 text
| 01 | ユーザベースのSaaS事業 4
Slide 5
Slide 5 text
NewsPicks事業 5 経済情報の力で、誰もがビジネスを楽しめる世界をつくる SaaS事業
Slide 6
Slide 6 text
| 02 | SaaS事業の 開発組織とSREの位置付け 6
Slide 7
Slide 7 text
技術力で、ビジネスをリードする 7 SaaS事業の開発組織について 規模・在籍メンバー属性 約100名 ※2022年4月時点 ソフトウェアエンジニア SRE テストエンジニア データサイエンティスト 開発チーム構成 各プロダクト・機能ごとに開発チームを作り ペアプロ、TDDで開発 A チーム (4 ~ 5 名) B チーム (4 ~ 5 名) C チーム (4 ~ 5 名) and more …
Slide 8
Slide 8 text
開発チーム 8 開発組織におけるSREの位置付け SREチーム 在籍メンバー・責務 責務 各開発チーム (4~5 名) が 機能の開発・運用する 7 名 各開発チームが機能の開発・運用 できるようにサポートする 各開発チームにSREの考え方を 伝承する 各開発チームが自律的に信頼性の高いサービスを開発・運用できることを目指す
Slide 9
Slide 9 text
サービスの構成 マイクロサービスアーキテクチャを採用 9 マイクロ サービス Kubernetes 環境 (以下、K8s) マイクロ サービス マイクロ サービス マイクロ サービス マイクロ サービス マイクロ サービス 安定運用のために導入する仕組み GitOps :Argo CD B/Gデプロイ :Istio 監視 :Prometheus、Grafana SLO/SLI :Datadog IaC :Terraform 上記の構成により、開発チームの運用負荷を抑え、サービスの成長を加速する ただし、信頼できるサービスの実現には、多くの要求を満たす必要がある
Slide 10
Slide 10 text
信頼できるサービスに求められること スケーラビリティ 高可用性 災害対策 高セキュリティ 10 信頼できるサービスの実現 開発チーム 機能の開発に注力する必要があるため、機能以外の要件を全て満たすことは困難 SREチーム 効率よく、機能以外の要件を満たす仕組みを提供
Slide 11
Slide 11 text
| 03 | SREでの実験的な取組み事例紹介 11 ※実装までの内容であり、運用に至っていないです
Slide 12
Slide 12 text
大規模研修の実施 12 SaaS事業においても、通常以上の負荷が特定の箇所に集中することがある ユーザベースのSaaS事業における負荷が高い状況 研修時でも耐えられるキャパシティの確保が必要
Slide 13
Slide 13 text
改善方法による違い 13 制限なく必要十分なキャパシティを確保するためには ● 速いアプリケーションに書換え ● キャッシュ ● スケールアウト(、スケールアップ) 改善効果 効率 スケールアウト(水平スケーリング)は、 改善効果が得にくい ものの、簡単に導入できる K8s標準のHPAを例に、説明する
Slide 14
Slide 14 text
水平スケーリング (HPA : Horizontal Pod Autoscaler ) HPA は、PodのメモリやCPUのリソース、リクエスト数を指標として、 実際のリソースの使用量に合わせて、Podの台数を動的に変更する仕組み 14 K8s標準のHPAの利用(1/2) 急激なリクエストの増加に合わせてスケールすることは困難 → リクエストが増加する前に、事前にスケールしておくことで解決 pods minReplicas maxReplicas 時間
Slide 15
Slide 15 text
事前にスケールしてもスケーラビリティが失われては意味がない 15 K8s標準のHPAの利用(2/2) 通常時・研修時でレンジ(minReplicas/maxReplicas)を変更することで、 スケーラビリティを確保できるが、標準のHPAで対応できない pods minReplicas maxReplicas 時間 通常時 研修時
Slide 16
Slide 16 text
HPAの拡張 ● 急激なリクエストの増加に合わせてスケールすることは困難 → ①メトリクスを用意 ● 事前にスケールしてもスケーラビリティが失われては意味がない → ②Replicas を動的に変更 16 ここまでの整理 pods minReplicas maxReplicas 時間 通常時 研修時 メトリクス ① ② メトリクスに応じて、minReplicas/maxReplicas を動的に変更
Slide 17
Slide 17 text
カスタムコントローラを利用して HPA を拡張した Custom Horizonral Pod Autoscaler (以下、CustomHPA) を実装する 17 https://github.com/TomoyukiSugiyama/custom-horizontal-pod-autoscaler
Slide 18
Slide 18 text
カスタムリソースとカスタムコントローラ 機能を拡張する仕組み カスタムリソース:Kubernetes API を拡張 カスタムコントローラ:カスタムリソースで定義したあるべき状態を維持し管理する仕組み 18 カスタムコントローラとは
Slide 19
Slide 19 text
サスティナブルな仕組み ● 掃除のし易さ CustomHPAが不要になっても、容易に削除可能 ● 拡張容易性 Prometheus以外でも対応しやすい構造 ● 監視性 コントローラの状態をGrafanaで確認できる 19 CustomHPAを実装する上で考慮した点
Slide 20
Slide 20 text
掃除のし易さ:容易に削除可能 20 CustomHPAの構成 ①メトリクスを登録 ②メトリクスに応じて、 minReplicas/maxReplicasを変更
Slide 21
Slide 21 text
拡張容易性:Prometheus以外に対応しやすい構造 21 CustomHPAコントローラの実装 メトリクスを取得 HPAの状態を変更
Slide 22
Slide 22 text
22 監視性:Grafana で監視 参考:コントローラの状態確認
Slide 23
Slide 23 text
実装を通して得たもの ● 10ヶ月のエンジニア ( Webエンジニア歴 , SRE歴 , K8s歴 ) がカスタムコントローラを実装 K8sの基本的な仕組みを少し学ぶことができた ● SREの位置付けや責務を学ぶきっかけになった 23 最後に
Slide 24
Slide 24 text
最後までご清聴ありがとうございました。 Thank you 24