Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Site Reliability を向上するためにやったことすべて

Site Reliability を向上するためにやったことすべて

ペパボ・はてな技術大会で発表した内容になります

Takuya TAKAHASHI

May 14, 2020
Tweet

More Decks by Takuya TAKAHASHI

Other Decks in Programming

Transcript

  1. アジェンダ
 • 自己紹介
 • SRE をやることになった経緯
 • SRE を進めるためにやったこと
 ◦

    「SRE できた」とは?
 ◦ 現状の確認
 ◦ 必要なものの洗い出し
 ◦ がんばる
 • うまくいったこと
 • うまくいかなかったこと
 • まとめ

  2. 高橋 拓也 (takutaka)
 自己紹介
 • 所属: 技術部 技術基盤チーム (joined at

    2019/10)
 ◦ 事業部のお手伝いをしたり、
 ◦ 全社的なインフラ基盤を開発したりするチーム
 • 好きなもの: k8s, OpenStack, kvm, zfs, drbd, etc…
 • 好きなこと: 開発すること、アーキテクチャを考えること、冗長化すること
 • https://github.com/takutakahashi
 • https://www.takutakahashi.dev
 • https://twitter.com/takutaka1220
 写真
  3. SUZURI について
 補足
 • 2020年度第一四半期の決算によると...
 ◦ 売上高約 2.5億円 
 ◦

    前年比 220% 成長
 ◦ 2019年はTシャツ累計10万枚売ったらしい

  4. 目指す終着点 SRE やってよかったね
 と誰もが思う状態にする
 
 1. SRE に関わるエンジニア 2. 開発エンジニア

    3. CS、マーケター、ステークホルダー 4. サービスを利用いただくユーザー
  5. サービスが成長できる
 「 ができた」とは? 
 • サービス規模が10倍、100倍になったときに健全に運営できるのか?
 ◦ 100倍のヒト、モノ、カネのコストが発生しないか? 
 ◦

    線形で増えるようではまずい
 • 成長限界が(暗黙的に)定まってないか?
 ◦ アーキテクチャの制限によりボトルネックが解消できない
 ◦ あるいは解消に膨大な工数が必要となる

  6. サービスが成長できる
 「 ができた」とは? 
 • サービス規模が10倍、100倍になったときに健全に運営できるのか?
 ◦ 100倍の手作業が発生しないか?
 ◦ 100倍のヒト、モノ、カネのコストが発生しないか?

    
 ◦ 100倍で済めばまだいい
 ▪ 1000倍、10000倍コストがかからないか? 
 • 成長限界が(暗黙的に)定まってないか?
 ◦ アーキテクチャの制限によりボトルネックが解消できない
 ◦ あるいは解消に膨大な工数が必要となる
 だいたい 手遅れになってから知る
  7. サービスが成長できる
 「 ができた」とは? 
 • サービス規模が10倍、100倍になったときに健全に運営できるのか?
 ◦ 100倍の手作業が発生しないか?
 ◦ 100倍のヒト、モノ、カネのコストが発生しないか?

    
 ◦ 100倍で済めばまだいい
 ▪ 1000倍、10000倍コストがかからないか? 
 • 成長限界が(暗黙的に)定まってないか?
 ◦ アーキテクチャの制限によりボトルネックが解消できない
 ◦ あるいは解消に膨大な工数が必要となる
 手遅れになる前に 検知できる状態になっている
  8. サービスが成長できる
 「 ができた」とは? 
 • サービス規模が10倍、100倍になったときに健全に運営できるのか?
 ◦ 100倍の手作業が発生しないか?
 ◦ 100倍のヒト、モノ、カネのコストが発生しないか?

    
 ◦ 100倍で済めばまだいい
 ▪ 1000倍、10000倍コストがかからないか? 
 • 成長限界が(暗黙的に)定まってないか?
 ◦ アーキテクチャの制限によりボトルネックが解消できない
 ◦ あるいは解消に膨大な工数が必要となる
 手遅れになるまでの リードタイムを最大化する
  9. サービスである 「 ができた」とは? • ユーザー × 単価 = 売上
 ◦

    単価を上げるためにシステムでできることは?
 ◦ → 回遊しやすいシステム
 ◦ → ページ表示速度を速く保つ必要がある

  10. ゴールとの距離を測る とある対象 A を最適にする (ex: レイテンシ)
 1. A の最適な状態を定義する
 2.

    A が今どの状態にあるのか確認する
 3. A が最適な状態に移行するための要素を出す
 4. がんばる
 5. A が最適に近づいたか計測する

  11. ゴールとの距離を測る とある対象 A を最適にする (ex: レイテンシ)
 1. A の最適な状態を定義する
 2.

    A が今どの状態にあるのか確認する
 3. A が最適な状態に移行するための要素を出す
 4. がんばる
 5. A が最適に近づいたか計測する

  12. ゴールとの距離を測る とある対象 A を最適にする (ex: レイテンシ)
 1. A の最適な状態を定義する
 2.

    A が今どの状態にあるのか確認する
 3. A が最適な状態に移行するための要素を出す
 4. がんばる
 5. A が最適に近づいたか計測する

  13. では? • heroku addon の newrelic insights を使った
 • exporter

    → prometheus → grafana
 • 計測開始当初はだいたい平均 1.2s くらい
 
 

  14. ゴールとの距離を測る とある対象 A を最適にする (ex: レイテンシ)
 1. A の最適な状態を定義する
 2.

    A が今どの状態にあるのか確認する
 3. A が最適な状態に移行するための要素を出す
 4. がんばる
 5. A が最適に近づいたか計測する

  15. ゴールとの距離を測る とある対象 A を最適にする (ex: レイテンシ)
 1. A の最適な状態を定義する
 2.

    A が今どの状態にあるのか確認する
 3. A が最適な状態に移行するための要素を出す
 4. がんばる
 5. A が最適に近づいたか計測する

  16. ゴールとの距離を測る とある対象 A を最適にする (ex: レイテンシ)
 1. A の最適な状態を定義する
 2.

    A が今どの状態にあるのか確認する
 3. A が最適な状態に移行するための要素を出す
 4. がんばる
 5. A が最適に近づいたか計測する

  17. ゴールとの距離を測る とある対象 A を最適にする (ex: レイテンシ)
 1. A の最適な状態を定義する
 2.

    A が今どの状態にあるのか確認する
 3. A が最適な状態に移行するための要素を出す
 4. がんばる
 5. A が最適に近づいたか計測する

  18. ゴールとの距離を測る とある対象 A を最適にする (ex: レイテンシ)
 1. A の最適な状態を定義する
 2.

    A が今どの状態にあるのか確認する
 3. A が最適な状態に移行するための要素を出す
 4. がんばる
 5. A が最適に近づいたか計測する
 単一障害点がない状態 必要なキャパシティが 計測できている状態 社内クラウドに依存 キャパシティ計測できていない スケールアウトが大変 社内 k8s + GKE で マルチクラウド化 キャパシティ計測 リソース量をメトリクス化
  19. 大規模セール時に冷静に対応できた うまくいったこと • App は heroku のオートスケールに任せる
 ◦ 以前なら dyno

    の増加が適切かわからなかった
 ◦ p95 レイテンシを維持する数に調整できた

  20. 見渡してみると • システムにとって大事な要素を定義できた
 ◦ レイテンシ、可用性
 • 大事な要素を日々確認できるようになった
 ◦ ダッシュボード化、メトリクス収集
 •

    課題を積み、消化できるようになった
 ◦ モブプロ会
 • ユーザーに改善効果を提供できた
 ◦ レイテンシ向上、負荷時のスケール、障害回避

  21. アジェンダ
 • 自己紹介
 • SRE をやることになった経緯
 • SRE を進めるためにやったこと
 ◦

    「SRE できた」とは?
 ◦ 現状の確認
 ◦ 必要なものの洗い出し
 ◦ がんばる
 • うまくいったこと
 • うまくいかなかったこと
 • まとめ

  22. GCP プライベートクラウド CloudFront GKE k8s App App App App App

    App L7LB nginx OpenStack LB Route53 k8s を使い、 キャパプラと スケールアウトを容易に
  23. GCP プライベートクラウド CloudFront GKE k8s App App App App App

    App L7LB nginx OpenStack LB Route53 同じものを GKE で動かし リクエスト増に オートスケールで対応
  24. GCP プライベートクラウド CloudFront GKE k8s App App App App App

    App L7LB nginx OpenStack LB Route53 リクエストの多くは プライベートクラウドで動かし コスト最適化
  25. GCP プライベートクラウド CloudFront GKE k8s App App App App App

    App L7LB nginx OpenStack LB Route53 Route 53 の GSLB 機能を使い 重み付けリクエスト割り振りと フェイルオーバーを実現