Skip to content

nafuka11/resilience_study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

resilience_study

このリポジトリは、2022年3月9日に開催された「実例で学ぶレジリエンスプログラミング教室」の ハンズオン用リポジトリ のForkです。

オリジナルのREADME.mdは README_original.md にあります。

変更点

go/ に以下の変更を加えています。

  • CircuitBreakerのstate変更時のログ出力を追加
  • CircuitBreakerを無効化したhttp.Getのwrapper関数、 weak_get を追加

確認手順

必要物

  • k6
    • 負荷テストツールです。JavaScriptで負荷テストのシナリオを記述できます。
    • ハンズオンでどのようなツールを使っていたか失念したため、自分で選定しました。

goでのCircuitBreaker発動確認

  1. 必要なパッケージのインストール
    cd go
    go mod tidy
  2. 並行性を制限してHTTPサーバを起動する
    go run main.go -c 10
  3. 別Terminalを立ち上げ、負荷テストを実施する
    k6 run ./k6_test.js --vus 10 --duration 10s
    • --vus 10 は同時接続数10、--duration 10s はテストの実行時間10秒の指定です。
  4. HTTPサーバが起動されているTerminalで以下のようなログ出力がされ、
    CircuitBreakerのstateがOpenになっていることを確認する
    {"level":"info","ts":1647323079.09885,"caller":"go/main.go:48","msg":"gobreaker state changed","from":"closed","to":"open"}

今度は、CircuitBreakerが無効な状態で負荷テストを実施します。

  1. main.go を書き換え、CircuitBreakerを無効にする
    func testEndpoint(w http.ResponseWriter, r *http.Request) {
    -       body, err := get("http://localhost:9082/api/java/slow")
    +       body, err := weak_get("http://localhost:9082/api/java/slow")
    • 本当はコマンドライン引数等で切り替えられた方がいいのですが、コード書き換えで対応しています。
  2. 並行性を制限してHTTPサーバを起動する
    go run main.go -c 10
  3. 別Terminalを立ち上げ、負荷テストを実施する
    k6 run ./k6_test.js --vus 10 --duration 10s
    • 先程よりもiterations(シナリオの実行回数)が少ないことが確認できると思います。
  4. HTTPサーバが起動されているTerminalで、state変更のログ出力がされていないことを確認する

参考URL

Secure integrations with Circuit Breaker in Go - DEV Community

k6の使い方 シンプル&軽快な負荷試験ツールを試す | フューチャー技術ブログ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published