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

SRE不在のチームに入って2ヶ月でやったこと - 負荷試験ツールからはじめるSREプラクティスの導入

SRE不在のチームに入って2ヶ月でやったこと - 負荷試験ツールからはじめるSREプラクティスの導入

TechFeed Experts Night#17 〜 事例で学ぶSRE 〜 ツール、プラクティスから組織づくりまで
https://techfeed.io/events/techfeed-experts-night-17

FUJIWARA Shunichiro

April 26, 2023
Tweet

More Decks by FUJIWARA Shunichiro

Other Decks in Technology

Transcript

  1. SREとしてチームに加わった背景 きっかけはEoL ElastiCache Redis 3 - 2023年7月31日 RDS for PostgreSQL

    10 - 2023年7月18日 強制アップデートを伴うEoLがあるが手が回らない…他にも サーバーコストを削減したい CIに強すぎる権限がついているので絞りたい サービスの安定性を高めたい、監視を整備したい 1億行のテーブルから9000万行消してALTERしたい (とりあえず期間限定で) SREの手助けが欲しい
  2. (専任)SRE不在だが、よくメンテされている Rails 5.1 → 6.1 Dependabotによる定期的なアップデート ElasticBeanstalk → ECS 手作業でのインフラ管理

    → Terraform デプロイ → CircleCI やる気も能力もある。DevOpsできている (自分は期間限定なので) 今後も使える考え方や手法を導入するのがよさそう 単に「作業を代わりにやりました」で終わらないように
  3. 最初にやったこと - Grafana k6 による負荷テストシナリオ Grafana k6 is an open-source

    load testing tool that makes performance testing easy and productive for engineering teams. k6 is free, developer-centric, and extensible. OSSの負荷試験ツール JavaScriptでシナリオを記述できる import http from 'k6/http' import { check, sleep } from 'k6' export default function () { const data = { username: 'username', password: 'password' } let res = http.post('https://myapi.com/login/', data) check(res, { 'success login': (r) => r.status === 200 }) sleep(0.3) }
  4. 用意したシナリオ 1. トップページにアクセス 2. トップページから呼ばれるAPI(認証なし)を複数並列で叩く 3. ログインフォームにアクセス 4. ユーザー名とパスワードをPOSTしてログインする 5.

    ログインセッションが必要なAPI(要認証)を叩く コンポーネント(CDN, LB, WebApp, MySQL, Redis)を一通り通過する ストレージからの読み込み、書き込み処理が両方ある これを回しながら作業すると、各コンポーネントのエラーの発生と回復が検知できる
  5. 他にもやったことはいろいろ(略) Cache専用Memcached廃止 → Redisに統合 1億行のテーブルから9000万行削除してALTER 出たばかりの RDS Blue/Gren Deployments を使ってノーメンテで

    MySQL DBのインデックス最適化 インデックスショットガン状態で書き込み負荷が高かった sys.schema_unused_indexes を見て不要なインデックス削除 最適な複合インデックス作成 インスタンスサイズ半分のRI購入でコスト大幅削減 Redash 5(EC2) → 10(ECS) CircleCI OIDC化 Mackerel導入