カスタムコントローラを利用したスパイクに耐えるオートスケーリングの仕組みを構築
by
TomoyukiSugiyama
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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