OSS探訪GitHubでログイン

open・half-open・closed stateで失敗中のdependencyへのrequestを遮断するGo Circuit Breaker

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
3,702
主要言語
Go
ライセンス
MIT
リポジトリ最終更新
2026/02/07
ページ内ナビ

概要

sony/gobreakerはCircuit Breaker patternをGoで実装するlibraryです。request resultを成功/失敗としてcountし、thresholdを超えるとclosedからopenへ遷移してrequestを即拒否し、timeout後にhalf-openで復旧可否をprobeします。v2はgeneric return typeに対応します。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

failure countとReadyToTripでclosedからopenへの遷移条件を定義する

連続失敗やcustom ReadyToTrip関数をもとにbreakerをopenへ遷移させ、失敗中のdependencyへrequestを送り続けることを防げます。

出典:[2]

rolling window・half-open・excluded errorでservice特性へ合わせる

Interval/BucketPeriodでcount windowを構成し、MaxRequestsでhalf-open probe数、Timeoutでopen期間を設定できます。IsExcludedでcontext cancellation等をbreakerの成功/失敗countから除外できます。

出典:[2]

向いている用途

外部API・DB・RPC等のfailure propagationを抑えたいmicroserviceに向く

timeoutやretryと組み合わせ、downstream障害時にrequest・goroutine・connection消費を増幅させずfast-failさせたいGo serviceに適します。

出典:[2]

導入前の確認

v2.4.0のv2 moduleはGo 1.22/toolchain 1.22.10。panicはcount後に再panicする

v2.4.0のv2/go.modはGo 1.22.0とtoolchain go1.22.10を指定します。Execute内のrequestがpanicした場合、breakerは失敗として扱った後に同じpanicを再送出します。breaker単体ではtimeoutを強制しないため、request側context/timeoutやretry budgetを別途設計してください。

出典:[3][2][4]

参考にした公式資料

  1. [1]sony/gobreaker — GitHub repository(2026-10-06)
  2. [2]gobreaker v2.4.0 — README(2026-10-06)
  3. [3]gobreaker v2.4.0 — v2/go.mod(2026-10-06)
  4. [4]gobreaker v2.4.0 tag(2026-10-06)
  5. [5]gobreaker MIT license(2026-10-06)
編集部からの補足

HTTP clientやDB、外部APIのfailureを単純retryだけで増幅させないための小さなresilience primitiveです。failure判定、open時間、half-open時の試行数はdependencyのSLOとtimeout/retry policyに合わせて設計してください。

3ステップで試す

  1. 1

    ソースを取得

    git clone --depth 1 https://github.com/sony/gobreaker.git
  2. 2

    リポジトリへ移動

    cd gobreaker
  3. 3

    公式手順を確認

    READMEのInstallation / Quick Start / Getting Startedにある公式コマンドを続けて実行してください。

    find . -maxdepth 1 -iname 'README*' -exec sed -n '1,220p' {} \; -quit
公式READMEで確認

成長

成長の推移 · 直近30日

3,702 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
0
Open PR
18

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • golang
  • circuit-breaker
  • microservice
Stars
3,702
Forks
230
Watchers
38
Open Issues
10
Contributors
17
所有者種別
Organization
主要言語
Go
ライセンス
MIT
リポジトリ最終更新
2026/02/07

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?