Carpe Diem

備忘録

Envoy の Adaptive Concurrency で動的に流量制限をする

概要

christina04.hatenablog.com

で説明したように、Circuit Breakerのパラメータ調整は大変です。

実際のキャパシティよりパラメータを小さくしてしまうと、リソースはまだ余裕があるのにOpenしていまいます。
逆にパラメータが大きすぎると、Openが遅れサービス側に過負荷がかかってしまいます。

また一度適切に設定してからも、実装によってキャパシティが変更されればそれに合わせてCircuit Breaker側も変更が必要になります。

そのようなCircuit Breakerの課題を解決するものとしてAdaptive Concurrencyというものがあるので紹介します。

環境

  • Envoy v1.22.0
続きを読む

EnvoyのYAMLの読み方

概要

Envoyのyamlは非常に長大で初めて読む人からするととても分かりにくいです。

しかし実際は各要素の役割を理解するととてもシンプルに構成されていることが分かります。

そのための手助けとしてこちらで図を交えながら説明します。

環境

  • Envoy 1.22.0

要素の説明

downstreamとupstream

要素 説明
downstream Envoyからみたクライアント
upstream Envoyがサービスに対するリクエストを転送する際に接続するエンドポイント(ネットワークノード)
続きを読む

外部サービスへのリクエストにEnvoyのCircuit Breakerを設定する

概要

サービスの信頼性を高めるため、依存するマイクロサービスが落ちても障害範囲をそこだけに留め、それ以外のマイクロサービスは稼働し続けるのが理想です。

自分たちのサービスであれば各マイクロサービスにCircuit Breakerを設定することで、スローダウンした際に即座に503を返しリクエストをスタックさせずに迅速に返すことが可能です。

一方外部サービスの場合はCircuit Breakerを備えているかはサービスによって異なります。場合によってはスローダウンした場合ずっとリクエストが返らず、依存しているマイクロサービスはリクエストがどんどんスタックしてOOMが発生する可能性があります。

Envoyを使うと外部サービスへのリクエストに対しても簡単にCircuit Breakerを設定することが可能です。

環境

  • Envoy v1.22.0
  • Go v1.18.3
続きを読む

Envoy Circuit Breakerの挙動を確認する

背景

EnvoyにはCircuit Breakerがあり、依存するサービスがスローダウンした際にそれ以上リクエスト送らず即座に503を返すことでサービスが死なないようにする仕組みがあります。

しかしパラメータの調節が難しく、期待した挙動にならないことが多いため1つ1つのパラメータの挙動をメトリクスとともに書いておきます。

環境

  • Envoy v1.22.0

構成図は以下です。

続きを読む

MongoDBでindexを整理する際に使ったコマンド

概要

MongoDBで使っていないindexを整理する際に使ったコマンドのチートシートです。

バックアップ用途の吐き出しコマンドとスプレッドシートで確認しやすくするためのコマンドを主に書きます。

環境

  • MongoDB v3.6.23

コマンド

以下にそれぞれのケースでのスクリプトを書きます。実行時は

$ mongo mongodb://{YOUR_HOSTNAME}:27017/{YOUR_DB_NAME} < script.js > output.txt

といった形で行います。

続きを読む

YAMLのような設定ファイルで環境変数を扱う

背景

christina04.hatenablog.com

ではconfig.yamlを読み込ませてサーバを起動するのですが、その中にSlackのAPIトークンを入れる箇所がありました。

config.yaml自体はConfigMapで渡しているのですが、中に記述されているAPIトークンは環境変数でSecretで管理できないかなぁと思ったのがきっかけです。

環境

  • go 1.18.2
続きを読む

macOSのスクリーンショットをJPEGでクリップボードに保持させる

背景

macOSではcmd+shift+ctrl+4スクリーンショットクリップボードに直接保持させることができます。

これを使ってSlackやらNotionやらに直接貼り付ける事がよくあるのですが、データ量が非常に大きいというデメリットがあります。

というのもmacOSでは

という設定になっているためです。
なのでちょっとピクセル数が多いと簡単に10MBなどの画像になってしまいます。

画像保存時にjpegにするという以下のコマンドもありますが、

$ defaults write com.apple.screencapture type jpg

これはディレクトリなどに保存するは有効ですが、クリップボードから直接ペーストする時はうまく働きません。

似たような問題にぶつかっている人は多々いますが、どれも解決策までたどり着いていませんでした。

そんな中、Automatorを使うことでやりたいことが”ほぼ”実現できたので紹介します。

続きを読む