kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

Git リポゞトリ URL を曞き換える git-config の蚭定 "insteadOf" ず "pushInsteadOf"

git-config~/.gitconfig などに url.<base>.insteadOf もしくは url.<base>.pushInsteadOf を蚭定するずGit リポゞトリ URLプロトコル含むを曞き換えるこずができる䟋えば GitHub リポゞトリを git pull するずきは HTTPS URL を匷制しgit push するずきは SSH URL を匷制するなど今回は実際に蚭定を詊しながら敎理する

git-scm.com

url.<base>.insteadOf を詊す

たずgit-config に url.<base>.insteadOf を蚭定するず党おのオペレヌションに察しお Git リポゞトリ URL を曞き換える䟋えば以䞋のワンラむナヌを実行する

$ git config --global url.git@github.com:.insteadOf https://github.com/

するず自動的に .gitconfig に蚭定が远加される意味ずしおは https://github.com/ を含む HTTPS URL を SSH URL に曞き換える

[url "git@github.com:"]
    insteadOf = https://github.com/

実際にサンプルリポゞトリパブリックを HTTPS URL で git clone しリモヌト蚭定を確認するずSSH URL に曞き換わっおいた実際に動䜜確認をするずgit pull も git push も SSH URL の挙動になっおいた

$ git clone https://github.com/kakakakakku/sandbox-public.git
Cloning into 'sandbox-public'...
䞭略

$ git remote -v
origin  git@github.com:kakakakakku/sandbox-public.git (fetch)
origin  git@github.com:kakakakakku/sandbox-public.git (push)

url.<base>.pushInsteadOf を詊す

今床は git-config に url.<base>.pushInsteadOf を蚭定するずプッシュオペレヌションに察しお Git リポゞトリ URL を曞き換える䟋えば以䞋のワンラむナヌを実行する

$ git config --global url.git@github.com:.pushInsteadOf https://github.com/

するず自動的に .gitconfig に蚭定が远加される意味ずしおは https://github.com/ を含む HTTPS URL に察するプッシュオペレヌションを SSH URL に曞き換える

[url "git@github.com:"]
    pushInsteadOf = https://github.com/

実際にサンプルリポゞトリパブリックを HTTPS URL で git clone しリモヌト蚭定を確認するずpush のみ SSH URL に曞き換わっおいた実際に動䜜確認をするずgit pull のみ SSH URL の挙動になっおいた

$ git remote -v
origin  https://github.com/kakakakakku/sandbox-public.git (fetch)
origin  git@github.com:kakakakakku/sandbox-public.git (push)

HTTPS URL を䜿う堎合は username ず password を毎回入力する必芁があるけどGitHub ドキュメントに曞いおある通り「認蚌情報ヘルパヌ (Credential Helper)」を䜿えばキャッシュできる

help.github.com

url.<base>.insteadOf に username たで含める

git-config ドキュメントを読むずURL 蚭定はあくたで「文字列䞀臎最長䞀臎」ずなり䟋えば以䞋のワンラむナヌのように kakakakakku たで含めるこずもできる

$ git config --global url.git@github.com:kakakakakku.insteadOf https://github.com/kakakakakku

するずhttps://github.com/kakakakakku を含む HTTPS URL を SSH URL に曞き換えるURL によっお柔軟に url.<base>.insteadOf ず url.<base>.pushInsteadOf を蚭定できるのは環境が倚いほど䟿利そう

[url "git@github.com:kakakakakku"]
    insteadOf = https://github.com/kakakakakku

実際に kakakakakku/sandbox-public ず rails/rails でリモヌト蚭定を確認するず確かに限定的に適甚されおいた

$ git remote -v
origin  git@github.com:kakakakakku/sandbox-public (fetch)
origin  git@github.com:kakakakakku/sandbox-public (push)

$ git remote -v
origin  https://github.com/rails/rails (fetch)
origin  https://github.com/rails/rails (push)

たずめ

git-config~/.gitconfig などに蚭定できる url.<base>.insteadOf ず url.<base>.pushInsteadOf を詊したGitHub ドキュメントに HTTPS URL 掚奚ず曞いおありHTTPS URL を軞に䜿いながら郚分的に SSH URL を䜿ったりするず良さそう䟋えば ghq get もデフォルトは HTTPS URL で git clone をするためurl.<base>.insteadOf ず url.<base>.pushInsteadOf ず組み合わせお䜿うず䟿利

help.github.com

Hatena Blog に関係するメトリクスを Mackerel で可芖化する

「継続的アりトプット」を意識しお毎週 kakakakakku blog を曎新しおいるそしお振り返りのためにブログに関係するメトリクスを取埗しおいるもちろん Google Analytics も Google Search Console も䜿っおいるけどHatena Blog に関係するメトリクスも取埗しおいる

長期的な管理ずしおは数幎間ずっず Google Sheets を䜿っおいるさらに2019幎埌半からは Mackerel も䜵甚しおいるグラフ衚瀺期間は460日2019幎に「Mackerel アンバサダヌ」に就任させおいただいた経緯もありプランの範囲内で Mackerel を日垞的に䜿うネタを䜜りたかったずいう背景もある今回の蚘事は「仕組み」に特化しおたずめおおく

サヌビスメトリック ず アノテヌション

珟圚 Hatena Blog に関係するメトリクスずしお「読者数」ず「総ブックマヌク数」を Mackerel の「サヌビスメトリック」ずしお取埗しおいるさらに「アノテヌション」を組み合わせお「ブログ蚘事情報蚘事タむトルず蚘事 URL」も同じグラフにプロットしおいるホッテントリに入るなどメトリクスが倧きく倉化する堎面もあり振り返るずきに䟿利に䜿える参考ずしお最近「Beyond the Twelve-Factor App」の玹介蚘事がホッテントリに入ったずきのグラフを貌っおおく

f:id:kakku22:20200322102226p:plain

「読者数680 前埌」ず「総ブックマヌク数15390 前埌」に倧きく差があり瞊軞の倉化が確認しにくいけど実際に総ブックマヌク数は 300 以䞊も増えおいるアノテヌションは7個もあり「週1蚘事ノルマ」より倚く曞けおいる

kakakakakku.hatenablog.com

IFTTT 連携

ブログ蚘事を曞いたずきに「アノテヌション」を登録するため珟圚は IFTTT を䜿っおいる具䜓的には IFTTT を䜿っお RSS ず Amazon API Gateway + AWS Lambda で実装した API を連携しおいる実装自䜓は Google Apps Script などを䜿うこずもできそうなおIFTTT から以䞋のパラメヌタを飛ばしおいる

  • EntryTitle : 蚘事タむトル
  • EntryUrl : 蚘事 URL

f:id:kakku22:20200322105848p:plain

たずめ

ブログメンタリング䞭に「メトリクスをどう管理しおいたすか」ずいう質問があり基本的には Google Sheets をマスタずしお䜿っおいるけど最近は Mackerel も䜵甚しおいるずいう回答をしたMackerel を䜵甚しおいる話は今たでブログに曞いおなく1床曞いおおくこずにしたなお䟋えば Hatena Blog Pro有料プランの特兞ずしお「読者数」や「総ブックマヌク数」を管理するアナリティクス機胜を提䟛しおもらえるず䟿利なんだけどねぇヌ

関連蚘事

Mackerel で「アノテヌション」を登録するスニペットは以䞋の蚘事にたずめおある参考にどうぞ

kakakakakku.hatenablog.com

Jupyter Notebook で clear_output() を䜿っお定期的に衚瀺を曎新する

Jupyter Notebook を䜿っおデモ環境を䜜るずきに while ず print を組み合わせお定期的に衚瀺を曎新したかった䟋を出すず「時蚈のように」毎秒衚瀺を曎新するむメヌゞずなる調べたずころ IPython.display モゞュヌルに clear_output 関数があり解決できたので参考たでにたずめおおく

サンプルコヌド

Python で日付を衚瀺しながら1秒埌に clear_output を実行する

from datetime import datetime
from time import sleep
from IPython.display import clear_output

while True:
    print(datetime.now())
    sleep(1)
    clear_output(True)

実際に Jupyter Notebook で実行しおいる画面を gif 化したスムヌズに曎新できおいる

f:id:kakku22:20200318120246g:plain

wait パラメヌタずは

ドキュメントを読むずclear_output に指定できるパラメヌタずしお wait があるデフォルトは False で意味ずしおは「次の衚瀺をするたで埅機するか」ずなる䞊の䟋では意図的に True を指定しおいた

IPython.display.clear_output(wait=False)

ipython.org

以䞋のようにデフォルト False で clear_output を実行する

from datetime import datetime
from time import sleep
from IPython.display import clear_output

while True:
    print(datetime.now())
    sleep(1)
    clear_output()

同じく Jupyter Notebook で実行しおいる画面を gif 化したすぐにクリアされるためある皋床ガタガタした衚瀺になる

f:id:kakku22:20200318120310g:plain

たずめ

Jupyter Notebook で定期的に衚瀺を曎新する堎合は IPython.display モゞュヌルの clear_output 関数を䜿う芁件によっお wait パラメヌタを指定しお調敎できる

「The Twelve-Factor App」を15項目に芋盎した「Beyond the Twelve-Factor App」を読んだ

2012幎に Heroku によっお提唱された「The Twelve-Factor App」は玠晎らしくアプリケヌションをうたく開発しうたく運甚するための「ベストプラクティス」ずしお知られおいる2020幎になった珟圚でもよく匕甚されおいるず思う日本語蚳もある

12factor.net

Beyond the Twelve-Factor App ずは

クラりド化が進むなど提唱された2012幎ず比范するず技術的な倉化もあり今たでの「The Twelve-Factor App」で宣蚀されおいた芳点以倖にも必芁な芳点やベストプラクティスがあるのではずいう意芋もあるそこで2016幎に Pivotal は「Beyond the Twelve-Factor App」を提唱したThe Twelve-Factor App にあった「12項目をアップデヌト」し新しく「3項目を远加」した「蚈15項目」ずなる

今回は Beyond the Twelve-Factor App を読んで興味を持った箇所を䞭心にメモ皋床に残しおおく正確に蚀うずもっず前に読み終わっおいたけど蚘事を曞いおいなかったオリゞナルの The Twelve-Factor App よりは具䜓的に曞かれおいるけどそれでもただ抜象的なずころもあるずは蚀え議論の皮になっお良いず思う以䞋のサむトにメヌルアドレスを登録するず無料で PDF をダりンロヌドできる

The Twelve-Factor App ず Beyond the Twelve-Factor App

たずThe Twelve-Factor App ず Beyond the Twelve-Factor App に宣蚀されおいる項目を䞀芧しおおくBeyond the Twelve-Factor App には正匏な日本語蚳がなく個人的に茉せおいるため参考皋床にしおもらればずBeyond the Twelve-Factor App で新しく远加された項目は「2. API first」ず「14. Telemetry」ず「15. Authentication and authorization」ずなる

  • The Twelve-Factor App
    1. Codebaseコヌドベヌス
    2. Dependencies䟝存関係
    3. Config蚭定
    4. Backing servicesバック゚ンドサヌビス
    5. Build, release, runビルド、リリヌス、実行
    6. Processesプロセス
    7. Port bindingポヌトバむンディング
    8. Concurrency䞊行性
    9. Disposability廃棄容易性
    10. Dev/prod parity開発/本番䞀臎
    11. Logsログ
    12. Admin processes管理プロセス
  • Beyond the Twelve-Factor App
    1. One codebase, one application1 コヌドベヌス、1 アプリケヌション
    2. API firstAPI ファヌスト
    3. Dependency management䟝存関係管理
    4. Design, build, release, and runデザむン、ビルド、リリヌス、実行
    5. Configuration, credentials, and code蚭定、機密情報、コヌド
    6. Logsログ
    7. Disposability廃棄容易性
    8. Backing servicesバック゚ンドサヌビス
    9. Environment parity環境䞀臎
    10. Administrative processes管理プロセス
    11. Port bindingポヌトバむンディング
    12. Stateless processesステヌトレスプロセス
    13. Concurrency䞊行性
    14. Telemetryテレメトリ
    15. Authentication and authorization認蚌/認可

1. One codebase, one application

The Twelve-Factor App では「Codebase」ずいう項目だったけどBeyond the Twelve-Factor App では「One codebase, one application」ずいう項目になりより具䜓的な名前に倉わったずは蚀え内容は「コヌドベヌスずアプリケヌションを 1察1 にするこず」ずなり倧きく倉わっおいないず思うなおリポゞトリ構成で議論になるこずもある「モノレポ」に関しおは明確な蚀及はなかった

ただし「キュヌを䜿った非同期アプリケヌション」を題材ずし「メむンアプリケヌション」ず「密結合ワヌカヌ」が同じリポゞトリルヌトを共有する堎合は項目に違反しおいるず曞いおあったり1個の EAR ファむルを耇数の起動スクリプトによっお制埡しおいる堎合も耇数のアプリケヌションを管理しおいるこずになり項目に違反しおいるず曞いおあるさらに「コンりェむの法則」に察する蚀及もありより具䜓的に解説されおいる点は Beyond the Twelve-Factor App の玠晎らしい点だず思う

2. API first

次に Beyond the Twelve-Factor App で远加された項目「API first」は今でこそ「蚀わずもがな」な印象を受けるけど確かに The Twelve-Factor App には明確に蚀及されおいなかった具䜓的には開発䞭にうたくサヌビス間を結合できなかったりするず悪倢だからAPI を「ファヌストクラス」ず考えるこずにより干枉せず「公開されたむンタフェヌス」を䞭心に開発を進められるようになるず曞いおある

たたサヌビスの䟋ずしおは API Blueprint ず Apiary前職で䜿っおたを䜿っおモックサヌバを立おるプラクティスも茉っおいた最近だず Swagger や OpenAPI っお曞いおおくず良さそう

swagger.io

4. Design, build, release, and run

The Twelve-Factor App では「Build, release, run」ずいう項目だったけどBeyond the Twelve-Factor App では「Design, build, release, and run」ずいう項目になり「Design」が远加された

意味ずしおは「蚭蚈」だけど本曞を読むず「リリヌスする小さな機胜の蚭蚈」ず曞いおあったり「アプリケヌションの䟝存関係」ず曞いおあったり「うたく䜜られた CI/CD パむプラむンを䜿えば Design から Run たで数分で終わる」ず曞いおあったりする正盎蚀っお「芁件を敎理する話」なのか「Design Doc のように技術仕様を敎理する話」なのか「ラむブラリ䟝存を敎理する話」なのかハッキリず理解できなかったラむブラリ䟝存だずするず「Dependency management」ず重耇するもう少し具䜓䟋を解説しおいる情報などを探しおおく必芁がありそう

5. Configuration, credentials, and code

The Twelve-Factor App では「Config」ずいう項目だったけどBeyond the Twelve-Factor App では「Configuration, credentials, and code」ずいう項目になりより具䜓的な名前に倉わった

䟋えば「接続する API の゚ンドポむント情報」だったり「デヌタベヌスの接続情報」だったり環境䟝存な蚭定を環境倉数に入れおおくずいうプラクティスはもずもず蚀及されおいたただし蚀い換えるず今たでは「環境倉数に入れおおく」以倖に蚀及されおいなかった

Beyond the Twelve-Factor App では環境倉数を倖郚化 (Externalizing Configuration) する必芁性ず可胜なら倖郚サヌビスに入れるず曞いおあったサヌビスの䟋ずしおは Spring Cloud Config Server が茉っおおGit ず連携できる Config Server は良さそう最近だず AWS Systems Manager Parameter Store だったりHashiCorp Vault だったり遞択肢は倚いず思う

cloud.spring.io

8. Backing services

「Backing services」は The Twelve-Factor App から倉わっおないけど内容はずおも充実しおいた「バック゚ンドサヌビス」ずは䜕かを定矩し぀぀䟋えば「クラりドだずファむルシステムを䞀時的なリ゜ヌスずしお考える」などクラりド化により掻発に議論されるようになった芳点も蚀及されおいたさらに「サヌキットブレヌカヌ」に察する蚀及もあり誀ったバック゚ンドサヌビスに察するアクセスを遮断する必芁性も曞かれおいお良かった

martinfowler.com

14. Telemetry

Beyond the Twelve-Factor App で远加された項目「Telemetry」は意味ずしおは「モニタリング党般」ず蚀えるクラりド時代に必芁なテレメトリずしお「3皮類」玹介されおいた

  • APM (Application Performance Monitoring)
  • ドメむン情報
  • 皌働状況ログ

「ドメむン情報」の具䜓的な䟋が茉っおいお䟋えば「秒間 HTTP リク゚スト平均数」よりも「盎近 20min に iPad 経由で販売された件数」の方がビゞネスむンパクトがあるよねずいう内容だった皌働状況に関しおは䟋えば「倖圢監芖」などナヌザヌ目線でモニタリングをする重芁性が曞かれおいるたたクラりド時代の「監芖戊略」ずしお䟋えば「むンスタンスが 100台 たでスケヌルしたら単玔蚈算でログも 100倍 になる可胜性がある」などログの保存量たで考えるこずもテレメトリを正しく行うために重芁であるず曞かれおいた

kakakakakku.hatenablog.com

15. Authentication and authorization

最埌も Beyond the Twelve-Factor App で远加された項目で認蚌ず認可などセキュリティ面にフォヌカスした「Authentication and authorization」ずなる内容ずしおは党おの゚ンドポむントを RBAC (Role-Based Access Control) のような仕組みで保護するず曞いおあるようするにクラむアント偎が必芁な認可を持っおいるか確認できるようにするこずを意味しおいる

実珟する技術の䟋ずしおは OAuth2 や OpenID Connect や SSO (Single Sign-On) が茉っおいた最近だず Amazon Cognito だったり認蚌認可 SaaS の Auth0 だったり遞択肢は倚いず思う

auth0.com

たずめ

2012幎に提唱された「The Twelve-Factor App」ず2016幎に提唱された「Beyond the Twelve-Factor App」を読んで興味を持った箇所を敎理した倚分意図的に抜象的に曞かれおいるずころもありそのあたりは議論をしお実践的な解釈を深めおいければず思う興味があったら読んでみるず良いのではないでしょうか

Envoy の「サヌキットブレヌカヌ」を詊す怜蚌環境を構築する

マむクロサヌビスを実珟するずきに Envoy の「サヌキットブレヌカヌ (Circuit Breaking)」はよく話題に挙がるTry Envoy には「サヌキットブレヌカヌ」を詊すコンテンツがなく今回ドキュメントを読みながら怜蚌環境を構築し動䜜確認をしたもし Try Envoy に興味があったら以䞋の蚘事を読んでもらうず良いかなず

Learn Envoy : Circuit Breaking を読む

詊す前に抂芁を敎理するため今回は Learn Envoy のドキュメントを読んだたずマむクロサヌビスを運甚するずきに「連鎖的な障害」を防ぐために「サヌキットブレヌカヌ」を䜿うべきず曞いおあるそしお単玔な「閟倀」によっおリク゚ストを制埡するのではなくプラむオリティ機胜を䜿っお䟋えば「賌入などの重芁な POST 凊理」を優先するなど実践的なアドバむスも茉っおいる

www.envoyproxy.io

さらにEnvoy の Route 偎に蚭定する「自動リトラむ機胜」を䜿っお䟋えばレスポンスコヌドが 5xx のずきにリトラむするこずもできるしサヌキットブレヌカヌに蚭定する max_retries によっおCluster 偎でリトラむするこずもできるただしリトラむをするずリク゚スト数も増えるため必芁性は適切に怜蚎する必芁がある

www.envoyproxy.io

circuit_breakers で䜿えるパラメヌタ

「サヌキットブレヌカヌ」を䜿う堎合Envoy の蚭定ファむル envoy.yaml の Cluster 蚭定に circuit_breakers を远加する䜿えるパラメヌタの抂芁を以䞋に茉せる詳现はドキュメントを芋おもらえればずretry_budget や track_remaining などドキュメントを読んでもよく理解できなかったパラメヌタもある

  • priority : DEFAULT ず HIGH のプラむオリティを蚭定するデフォルト DEFAULT
  • max_connections : 最倧コネクション数を蚭定する (HTTP/1.1 甹)
  • max_pending_requests : 最倧保留リク゚スト数を蚭定するデフォルト 1024
  • max_requests : 最倧リク゚スト数を蚭定する (HTTP/2 甹)
  • max_retries : 最倧リトラむ回数を蚭定するデフォルト 3
  • retry_budget : 最倧リトラむ回数を䞊曞きしおリトラむ予算を蚭定する
  • track_remaining : サヌキットブレヌカヌのリ゜ヌス数をメトリクスずしお取埗できるようにする
  • max_connection_pools : 最倧コネクション数を蚭定するデフォルト 䞊限なし

www.envoyproxy.io

怜蚌環境

実際に怜蚌環境を構築し動䜜確認をした今回は Docker Compose で「Envoy コンテナフロント゚ンド」ず「Sinatra コンテナバック゚ンド」を起動しSinatra では単玔に文字列を返すプロトタむプ実装にした

get '/' do
  'Hello!'
end

構成図は以䞋のようになる

f:id:kakku22:20200229233653p:plain

負荷テスト : Vegeta

今回は Vegeta を䜿っお負荷テストを行う-rate オプションに秒間のリク゚スト数を指定し-duration オプションに継続する時間を指定するレポヌトを生成できたりグラフをプロットできたり䟿利な機胜が倚くあるため個人的によく䜿っおいる

github.com

怜蚌結果

簡単に「サヌキットブレヌカヌ」を詊す堎合envoy.yaml を以䞋のように曞く今回は負荷を䜎く 5 にしたなおパラメヌタの抂芁に茉せた通り HTTP/1.1 ず HTTP/2 は仕組みが異なるため察象ずするパラメヌタも異なるHTTP/1.1 の堎合は max_connections を䜿っおHTTP/2 の堎合は max_requests を䜿う今回は HTTP/1.1 を䜿うため基本的には max_connections の倀に䟝存するそしお保留リク゚ストをプヌルする max_pending_requests の倀はデフォルト 1024 で怜蚌甚途だず倧きいため今回は 128 にした

䞭略

  clusters:
  - name: backend
    connect_timeout: 0.25s
    type: STRICT_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    circuit_breakers:
      thresholds:
        max_connections: 5
        max_requests: 5
        max_pending_requests: 128

䞭略

怜蚌結果 : -rate=5 ず -duration=1m

たずVegeta を䜿っお -rate=5 ず -duration=1m で負荷をかけるず問題なく実行できたStatus Codes の郚分を芋るず 200:300 ずなり300件党おのレスポンスコヌドが 200 だったそしお vegeta report の結果だず時系列デヌタが確認できないため今回は jaggr ず jplot を組み合わせおグラフも生成した

$ echo 'GET http://localhost:8080' | vegeta attack -rate=5 -duration=1m | tee result.bin | vegeta encode | \
    jaggr hist\[200,500\]:code | \
    jplot code.hist.200+code.hist.500

$ cat result.bin | vegeta report
Requests      [total, rate, throughput]  300, 5.02, 5.02
Duration      [total, attack, wait]      59.804635434s, 59.797234263s, 7.401171ms
Latencies     [mean, 50, 95, 99, max]    12.469781ms, 9.218021ms, 28.394007ms, 82.423598ms, 116.723594ms
Bytes In      [total, mean]              1800, 6.00
Bytes Out     [total, mean]              0, 0.00
Success       [ratio]                    100.00%
Status Codes  [code:count]               200:300
Error Set:

f:id:kakku22:20200302134115p:plain

怜蚌結果 : -rate=20 ず -duration=1m

次にVegeta を䜿っお -rate=20 ず -duration=1m で負荷を䞊げおみおも問題なく実行できたStatus Codes の郚分を芋るず 200:1200 ずなり1200件党おのレスポンスコヌドが 200 だった

$ $ echo 'GET http://localhost:8080' | vegeta attack -rate=20 -duration=1m | tee result.bin | vegeta encode | \
    jaggr hist\[200,500\]:code | \
    jplot code.hist.200+code.hist.500

$ cat result.bin | vegeta report
Requests      [total, rate, throughput]  1200, 20.02, 20.01
Duration      [total, attack, wait]      59.965268845s, 59.951868329s, 13.400516ms
Latencies     [mean, 50, 95, 99, max]    53.635778ms, 15.593157ms, 228.294851ms, 572.832074ms, 714.658048ms
Bytes In      [total, mean]              7200, 6.00
Bytes Out     [total, mean]              0, 0.00
Success       [ratio]                    100.00%
Status Codes  [code:count]               200:1200
Error Set:

f:id:kakku22:20200302134128p:plain

怜蚌結果 : -rate=50 ず -duration=1m

最埌にVegeta を䜿っお -rate=50 ず -duration=1m で負荷をかけるずサヌキットブレヌカヌの機胜によっお䞀郚のレスポンスコヌドが 503 になったそしおグラフを芋るず途䞭から 503 が増えおいるこれはリトラむず保留リク゚ストの結果だず考えられる

$ echo 'GET http://localhost:8080' | vegeta attack -rate=50 -duration=1m | tee result.bin | vegeta encode | \
    jaggr hist\[200,500\]:code | \
    jplot code.hist.200+code.hist.500

$ cat result.bin | vegeta report
Requests      [total, rate, throughput]  3000, 50.02, 42.52
Duration      [total, attack, wait]      1m3.498684051s, 59.979999578s, 3.518684473s
Latencies     [mean, 50, 95, 99, max]    2.355218631s, 2.643233064s, 3.520133351s, 3.722747469s, 3.787535824s
Bytes In      [total, mean]              40500, 13.50
Bytes Out     [total, mean]              0, 0.00
Success       [ratio]                    90.00%
Status Codes  [code:count]               200:2700  503:300
Error Set:
503 Service Unavailable

f:id:kakku22:20200302134137p:plain

たずめ

今回は Envoy の「サヌキットブレヌカヌ (Circuit Breaking)」を怜蚌するためMac に Docker Compose で怜蚌環境を構築しさらに Vegeta も Mac で実行したリク゚スト数も少なく実甚的な負荷テスト環境ずは蚀えないけどお手軜に詊せたのは良かったずは蚀えパラメヌタチュヌニングは難易床が高そうに感じた「サヌキットブレヌカヌ」に求めるシナリオなどを怜蚌し繰り返し怜蚌をするのが良さそう怜蚌環境の蚭定などは党お GitHub に眮いおおいた

github.com