Carpe Diem

備忘録

Envoyで重み付き負荷分散を試してみる

概要

christina04.hatenablog.com

の中でconfig.route.v3.RouteActionに重み付き負荷分散(weighted load balancing)の設定がありました。

これを利用することで

  • カナリアリリース
  • リクエストのサンプリング
    • 一部だけ詳細なログやstatsを出す
    • Mountebankのようなリクエストをレコードしてリプレイできるモックサーバに流す

といったことが容易に実現できます。

今回はこの機能を試してみます。

環境

  • v1.24.0
続きを読む

EnvoyのVirtual hostを読み解く

概要

EnvoyのルーティングはListener > Network filter chain > HCM(HTTP connection manager)のVirtual Hostで適用されます。

設定の一部は配列で複数設定することができますが、ものによっては

  • 一致率が高いものから順に適用する(完全一致→部分一致→ワイルドカードなど)
  • 先に設定した順で走査し、マッチしたものを適用する

といった違いがあったりなど、きちんと理解していないとハマることがあるので1つ1つ読み解いていきます。

環境

  • Envoy v1.24.0
続きを読む

RedisのLua Scriptを使う

概要

前回PipelineやMultiでは読み出したデータを意思決定に使えないという課題があり、代わりにWatchで楽観ロックを用いるという旨を説明しました。

christina04.hatenablog.com

Lua Scriptを使えば楽観ロックを用いずとも上記の課題を解決することができます。

環境

  • Redis 6.2.7
  • Go 1.19.2

Lua Script

Lua Script機能は元々Redisに存在しない機能を使いたい場合にRedis自体のCソースを改修せずともLua言語を用いて拡張できるようにした仕組みです。

メリットとして以下があります。

続きを読む

RedisのPipeline, Multi, Watchの区別

概要

RedisのPipeline, Multi, Watchの区別をする上であまりシーケンス図を用いた説明がなかったので図示してみました。

解説

Pipeline

課題

通常複数の処理を実行しようとすると以下のような流れになります。
シンプルではありますが都度サーバ通信が入るところに無駄があります。

続きを読む

スクリーンショットをYoinkに直接送る

背景

以前以下の対応を行いましたが、

christina04.hatenablog.com

最後に書いてあるようにある程度ファイルは小さくなったもののクリップボード経由だとまだまだ大きく、結局スクリーンショットを保存したディレクトリから貼り付ける習慣になってしまいました。

しかしその場合以下の課題がありました。

  • 保存ディレクトリから貼り付けるのが手間
    • Dockに保存ディレクトリを常駐させているが、ファイルが増えると見えなくなる
  • 複数ファイルになるとDockから直接D&Dできない

そこで

を使って上記の課題を解決しました。

続きを読む

CloudFrontのキャッシュのTTLをフローチャートにした

背景

CloudFrontにはキャッシュのTTLの設定値が3つあり、

かつオリジンのヘッダーによって挙動が変わります。

docs.aws.amazon.com

久々に触ると忘れてしまうのでフローチャートにしてすぐ理解できるようにします。

続きを読む

ファイルディスクリプタ数の上限を変更

概要

Too many open files

のエラーが出た際の対策として、ファイルディスクリプタの上限を変更することがあります。
方法として以下の4つがあります。

  1. ulimitで変更する
  2. /etc/security/limits.confで設定する
  3. systemdのサービスの設定でLimitNOFILEを設定する
  4. systemdの全体設定でDefaultLimitNOFILEを設定する

環境

  • Ubuntu v22.04.1
  • Nginx v1.18.0
続きを読む