Slide 1

Slide 1 text

負荷試験ツール Vegeta をラップして 結合試験ツール 「結合さん」を作ってみた

Slide 2

Slide 2 text

Copyrights©3-shake Inc. All Rights Reserved. 2 自己紹介 - 所属 - Sreake 事業部 チームリーダー (雑用) に就任しました - Terraform 書いたり - GCP / AWS - Yaml 書いたり - Kubernetes / CI・CD - アプリやツール 書いたり - Go / Python / JavaScript - あだ名 - 社内ではたらこちゃんと呼ばれています Tozawa Ryo (@tozastation)

Slide 3

Slide 3 text

Copyrights©3-shake Inc. All Rights Reserved. 3 目次 結合さんが生まれた日 1 結合さんについて 2 システムの活躍具合はいかほど 3

Slide 4

Slide 4 text

Copyrights©3-shake Inc. All Rights Reserved. 4 背景 ~ 結合さんが生まれた日 ~ ● 目的: ビジネスのスケールに耐えられるようシステム構成を一新 ○ パブリッククラウド移行(AWS) ○ Kubernetes 導入 (Elastic Kubernetes Service) ○ モノリス から マイクロサービスへの移行 ○ 監視基盤導入 (kube-prometheus-stack × PagerDuty) あるお客様とのプロジェクト

Slide 5

Slide 5 text

Copyrights©3-shake Inc. All Rights Reserved. 5 背景 ~ 結合さんが生まれた日 ~ プロジェクトで チーム組成したばかりのある日・・・ ▎ 頻繁なアプリの仕様変更 ▎ 対応していないバージョンが DEV環境に! ▎ 手作業でのプロダクトレビュー API が動作しなくなった! (デグレーションが目立ち始めた) 確認項目が多く 工数がかかる

Slide 6

Slide 6 text

Copyrights©3-shake Inc. All Rights Reserved. 6 背景 ~ 結合さんが生まれた日 ~ チームの振り返りのタイミングで Try が幾つかあがった 課題: APIが動作しなくなった ▎ ① API のバージョン更新ルール整備 ▎ ② チーム間の仕様の共有を積極化 ▎ ③ デグレーションが起きたらすぐ検知したい API が動作しなくなった! (デグレーションが目立ち始めた) 補足: バージョニング規約 / Protocol Buffer (API) 更新規約 / etc ...

Slide 7

Slide 7 text

Copyrights©3-shake Inc. All Rights Reserved. 7 背景 チームの振り返りのタイミングで Try が幾つかあがった 課題: 確認項目が多く工数がかかる ▎ 自動化できるものはツール化していこう 確認項目が多く 工数がかかる

Slide 8

Slide 8 text

Copyrights©3-shake Inc. All Rights Reserved. 8 背景 結合さんを作ろう refer: Rashni Parichha

Slide 9

Slide 9 text

Copyrights©3-shake Inc. All Rights Reserved. 9 結合さんとは API の 正常系・異常系を試験するアプリケーション ● 3段階に分けて開発 a. OSS 負荷試験ツール Vegeta を使って,正常系試験 CLI 実装 ■ なぜ Vegeta ? ● Vegeta (Go製) -> チームで Go の開発者が多い ● SRE チームで,負荷試験に流用したい b. kubernetes-event-exporter を使って試験自動化 ■ Vegeta 改造 CLI を Pod (Pod: Kubernetes) 化 ■ Webhook 連携の実装 c. DEV チームにデモ ■ チーム全員で使いたくなるものを作っていきたい ■ 機能改善や新機能など以降の開発は,DEVチームと共に

Slide 10

Slide 10 text

Copyrights©3-shake Inc. All Rights Reserved. 10 負荷試験ツール Vegeta とは Go言語製のHTTP負荷試験ツール ● Vegeta は まさに破壊王子 ○ 軽量な平行処理を生かした(Groutine)パワフルさ ○ 対象のサービス(Webサイト)を破壊 ● ここが嬉しい  ○ インストールが簡単 -> すぐ利用できる ■ Go製なのでツールがシングルバイナリ ○ Package Import でカスタムできる ■ go get -u github.com/tsenart/vegeta refer: フリー素材

Slide 11

Slide 11 text

Copyrights©3-shake Inc. All Rights Reserved. 11 Vegeta をカスタムしたツールの名前は... ファイナルフラッシュ(final-flash) アニメの名シーンを 貼る予定でしたが 社内の圧力により公開を断念.. 「くそったれええええ」 refer: フリー素材

Slide 12

Slide 12 text

Copyrights©3-shake Inc. All Rights Reserved. 12 ファイナルフラッシュ(final-flash) Vegeta ライブラリをインポート しカスタム -> CLI で指定するフラッグ・コマンドは,コードでは構造体・関数で扱う vegeta.Rate{} と duration -> HTTP リクエストを送信する 割合と期間の設定 Freq: 頻度 Per : 単位時間あたり (秒・分・時)

Slide 13

Slide 13 text

Copyrights©3-shake Inc. All Rights Reserved. 13 ファイナルフラッシュ(final-flash) vegeta.Targeter (func) -> Request の定義 (HTTP Method / URL / Body) -> Request Body を可変にしたい等の複雑なリクエストは,クロージャーを作成

Slide 14

Slide 14 text

Copyrights©3-shake Inc. All Rights Reserved. 14 ファイナルフラッシュ(final-flash) vegeta.Metrics -> 実行結果 (res) を貯めレポートを作成する attacker.Attack(targetter , rate, duration) -> 負荷試験の実行 attacker.Attack() で負荷開始 ↓ metrics に結果が溜まっていく ↓ レポート作成 (説明は割愛󰢛)

Slide 15

Slide 15 text

Copyrights©3-shake Inc. All Rights Reserved. 15 試験自動化を支える kubernetes-event-exporter Kubernetes の Event を検知 (watch kubectl get event --all-namespaces) 独自のフィルタを通し,マッチしたイベントを外部に連携してくれるツール ↓ コンフィグはこんな感じ ↓ route: - どのイベントを除外するか - どのイベントを受け付けるか receivers: - 外部連携先の指定 - Layout に ペイロード指定 - 今回は - チャットアプリ - final-flash

Slide 16

Slide 16 text

Copyrights©3-shake Inc. All Rights Reserved. 16 そんなこんなで結合さんができました 結合さん = ファイナルフラッシュ × kubernetes-event-exporter refer: Rashni Parichha

Slide 17

Slide 17 text

Copyrights©3-shake Inc. All Rights Reserved. 17 システムの活躍具合はいかほど ~実際の動作~ 各エンドポイントの正常系の試験結果をチャットアプリに通知 -> 正常系の時は,OK アイコンで教えてくれる -> おっ!とそれっぽく見せるため Summary も用意 deep stream

Slide 18

Slide 18 text

Copyrights©3-shake Inc. All Rights Reserved. 18 deep stream システムの活躍具合はいかほど ~実際の動作~ 各エンドポイントの正常系の試験結果をチャットアプリに通知 -> 異常系の時は,エラーを添えて炎上アイコンで通知 -> エラーを見る限り,自分が犯人な気もしなくも...

Slide 19

Slide 19 text

Copyrights©3-shake Inc. All Rights Reserved. 19 システムの活躍具合はいかほど 結合さんを導入してみて良かった点 早期発見して,原因究明 + 対応する文化が出来上がってきた 👍 deep stream

Slide 20

Slide 20 text

Copyrights©3-shake Inc. All Rights Reserved. 20 チームのみんなからのフィードバック 導入から4ヶ月ほど経ち DEVチームに聞いてみた 重傷なデグレに 気付けるように! by 開発T リリース判断がしやすくなった 安心して機能改修やリファクタに望 める by PO 毎回パターンを確認しなくて 済むように! by 開発T deep stream deep stream (父)

Slide 21

Slide 21 text

Copyrights©3-shake Inc. All Rights Reserved. 21 まとめ ● チーム内で課題が...! ○ 方針が定まっていない API バージョン更新 ○ 開発環境での API における デグレーション ● 取り組んだこと ○ バージョン更新ルール整備 ○ 定期的な正常系試験自動化 ● フィードバック ○ 神 ● 今後の課題 ○ Pod が起動してから試験開始まで待機時間を固定 している ■ Probe 等のチェックを導入し効率化していきたい ○ 他のチームにも積極的に使ってもらいたいので推していく 本を読む鯨

Slide 22

Slide 22 text

Copyrights©3-shake Inc. All Rights Reserved. 22 チーム全員が動きやすい環境を提供し 喜んでもらえるタイミングが一番やりがいある!!