概要 Obsidianというメモアプリを使っていますが、 基本はMacBook Proでメモする たまにiPadで見たりメモすることもある という使い方に加え、 パッと思いついたアイデアはスマホ(Android)で書く といった使い方もしたくなりました。 しかし iCloudでデー…
概要 Bigtableは数十億行、数千列規模に拡張可能な分散型NoSQLですが、 特定のカラムファミリのみ持つ行を全て抽出する といった時にcbt(CLIツール)やSDKではiterateしてデータをハンドリングするため、大規模データ分析の用途では使いづらさがあります。 そ…
背景 次のようなwildcardを含んだpathをフレームワークに頼らず、自前で実装する場合にどうパターンマッチさせるか考えてみます。 /users/:id /articles/:id/comments 単純に考えると正規表現で次のようなパターンを使ってforループで回す、といったものがあ…
背景 gRPCを利用していると、デプロイを含む一時的なネットワーク断で以下のようなエラーが発生することがあります。 rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp xxx: connect: connection …
概要 複数の案を試す際にA/Bテストがありますが、検証期間中はずっと同じ割合で試行しなければいけないため、もし悪い案であった場合に全体としてその期間損失を生むことになります。 そのような損失を少なくしつつ、良いと思われる案を優先的に試行するアル…
概要 トレーシングで重要なのがSamplingです。 単純に全データを計測するとコストが増えたりパフォーマンスに影響が出たりします。 OpenTelemetryではSamplingに対する仕様が決まっているので、それに基づいて具体的な実装を紹介します。 OpenTelemetry Spec…
概要 OpenTelemetryはOpenCensusやOpenTracingをまとめた形で生まれたので、既にOpenCensusやOpenTracingの形で実装されたライブラリは移行するのが大変です。 例えばGCPの各SDKは基本的にOpenCensusで実装されています。 そのようなライブラリを使用する際…
概要 マイクロサービス構成など分散システムにおいて分散トレーシングを行いたい場合は、サービス間でのContextの伝播が必要になります。 OpenTelemetryでサービス間での伝播をしたい場合の実装方法を説明します。 環境 Go v1.20.2 go.opentelemetry.io/otel…
概要 OpenTelemetryはObservabilityの三本柱であるLogs、Metrics、Tracesをベンダーに依存せず実装するための仕様&実装です。 今回はそのうちのTracesをGoで試してみます。 環境 Go v1.20.2 go.opentelemetry.io/otel/trace v1.14.0 前提知識 登場人物 Open…
背景 普段プログラミングでは特定の言語を使っていますが、シェルスクリプトはビルドスクリプトをいじる時くらいしか使わず都度検索して調べ直す事が多いです。 また使い方が間違っていてもテストする文化が浸透していないため、期待しない挙動になっていて…
背景 前回はyttに基本的な使い方を説明しました。 christina04.hatenablog.com 今回は少し実践的に、変数を外部ファイルとして扱ってサービス毎だったりdev/prdといった環境毎にYAMLを生成できるようにします。 環境 ytt 0.44.3 イメージ図 前回はテンプレー…
背景 似たようなYAMLを毎回コピペするのは運用が辛い ConfigMapのYAMLをdev, stg, prdで出し分けたい CircleCIのpath filteringでparameterを自動的に増やしたい といったようなケースでは、似たようなYAMLをパラメータだけ変更して自動生成したくなります。…
背景 仕事だと定期的にPCを交換しますが、そのたびにsshキーを全て最初から登録し直すのは非常に大変です。 かといって.sshをdotfilesとしてGitHubに管理したり、手動でコピーするのも転送経路をどうするかとか前PCから消し忘れたりとセキュリティ的に心配に…
概要 MongoDB AtlasではContinuous Cloud Backupという機能を用いることでRPO(Recovery Point Objective)を1分にすることが可能です。 Dedicated Cluster Backups — MongoDB Atlas その他のストレージやデータベースではPoint in Time Recover/Restoreとい…
概要 christina04.hatenablog.com ではEnvoyでのCircuit Breakerの設定や挙動について説明しました。 IstioではDataPlaneにEnvoyを使っているので同じ様にCircuit Breakerを使えますが、設定するコンポーネントとしてはDestination Ruleになります。 Istio /…
概要 前回KubernetesのPodの安全な終了方法について図を交えて解説しました。 christina04.hatenablog.com 今回はistio-proxy(envoy sidecar)がある場合の安全な終了方法について説明します。 環境 Kubernetes v1.21.14 Istio 1.16.0 Envoy 1.24.1
背景 Prometheusでメトリクスを可視化する際にPromQLを使います。その中で最もよく使うのがrate()関数ですが、 window, interval, resolutionの違い irate()関数との違い など疑問に思ったので一度きちんと整理してみます。 環境 Prometheus v2.40.5 range v…
概要 ラベルという名前ゆえか若干軽視されがちですが、Kubernetesにおいてlabelはリソースを識別する上で非常に重要な要素です。 そのlabelについてKubernetesの初学者が気になる(自身も気になった)ことを挙げて行きます。 気になること Deploymentにあるl…
概要 KubernetesのPodを安全に終了する際に気をつけるべき事前知識と設定方法について説明します。 あらかじめまとめると 新規リクエストのルーティングがなくなるまでpreStopでPodのアプリケーションコンテナの終了開始を待たせる 既存リクエストが全て処理…
概要 christina04.hatenablog.com の中でconfig.route.v3.RouteActionに重み付き負荷分散(weighted load balancing)の設定がありました。 これを利用することで カナリアリリース リクエストのサンプリング 一部だけ詳細なログやstatsを出す Mountebankのよ…
概要 EnvoyのルーティングはListener > Network filter chain > HCM(HTTP connection manager)のVirtual Hostで適用されます。 設定の一部は配列で複数設定することができますが、ものによっては 一致率が高いものから順に適用する(完全一致→部分一致→ワイ…
概要 前回PipelineやMultiでは読み出したデータを意思決定に使えないという課題があり、代わりにWatchで楽観ロックを用いるという旨を説明しました。 christina04.hatenablog.com Lua Scriptを使えば楽観ロックを用いずとも上記の課題を解決することができま…
概要 RedisのPipeline, Multi, Watchの区別をする上であまりシーケンス図を用いた説明がなかったので図示してみました。 解説 Pipeline 課題 通常複数の処理を実行しようとすると以下のような流れになります。 シンプルではありますが都度サーバ通信が入ると…
背景 以前以下の対応を行いましたが、 christina04.hatenablog.com 最後に書いてあるようにある程度ファイルは小さくなったもののクリップボード経由だとまだまだ大きく、結局スクリーンショットを保存したディレクトリから貼り付ける習慣になってしまいまし…
背景 CloudFrontにはキャッシュのTTLの設定値が3つあり、 Minimum TTL Default TTL Maximum TTL かつオリジンのヘッダーによって挙動が変わります。 docs.aws.amazon.com 久々に触ると忘れてしまうのでフローチャートにしてすぐ理解できるようにします。
概要 Too many open files のエラーが出た際の対策として、ファイルディスクリプタの上限を変更することがあります。 方法として以下の4つがあります。 ulimitで変更する /etc/security/limits.confで設定する systemdのサービスの設定でLimitNOFILEを設定…
背景 Kubernetes上でサクッと動作検証でPodを立てたい時に kubectl run \ --generator run-pod/v1 \ --namespace $NAMESPACE \ --image google/cloud-sdk:alpine \ --rm -it gcloud-test とやりますが、今実行すると以下のようにエラーになります。 error: u…
概要 重み付き乱択アルゴリズムは結果に偏りのある抽選で ソシャゲのガチャのようにレアリティによって出現確率を変えたい リクエストを重み付けして分散したり、A/Bテストで99:1のように振り分けたい といった用途で使えます。 今回はその説明と実装方法の…
背景 PythonはGILがあるためマルチコアの恩恵を受けづらいです。そのためGunicornのようなプロセスマネージャを利用してマルチプロセスで稼働させ、パフォーマンスを上げるといった手法があります。 しかしマルチプロセスにした場合、Prometheusのメトリクス…
概要 Bigtableのデータを他プロジェクトに移したい場合、公式のDataflowテンプレートを用いて以下の図のようにExport & Importできます。 しかしBigtableのデータが多すぎるとImportする際に、 Error message from worker: java.lang.IllegalArgumentExcepti…