負荷対策
概要 通常データベースへの負荷を軽減するためにキャッシュレイヤを導入します。 しかしよくあるのは正常系のみキャッシュしており、 ゲームのイベント前でまだ404 ゲームのイベント期間が終了して404 動画の配信前でまだ404 動画の配信期間が終了して404 と…
概要 キャッシュにおけるアーキテクチャパターンをまとめておきます。 表形式にすると次のようになります。 パターン 読み取り速度 書き込み速度 データ整合性 主な用途 Cache Aside 高 中(キャッシュ層がオーバーヘッドにならない) 中(期限切れ考慮) 一般的…
概要 christina04.hatenablog.com ではEnvoyでのCircuit Breakerの設定や挙動について説明しました。 IstioではDataPlaneにEnvoyを使っているので同じ様にCircuit Breakerを使えますが、設定するコンポーネントとしてはDestination Ruleになります。 Istio /…
概要 christina04.hatenablog.com の中でconfig.route.v3.RouteActionに重み付き負荷分散(weighted load balancing)の設定がありました。 これを利用することで カナリアリリース リクエストのサンプリング 一部だけ詳細なログやstatsを出す Mountebankのよ…
概要 christina04.hatenablog.com で説明したように、Circuit Breakerのパラメータ調整は大変です。 実際のキャパシティよりパラメータを小さくしてしまうと、リソースはまだ余裕があるのにOpenしていまいます。 逆にパラメータが大きすぎると、Openが遅れサ…
概要 サービスの信頼性を高めるため、依存するマイクロサービスが落ちても障害範囲をそこだけに留め、それ以外のマイクロサービスは稼働し続けるのが理想です。 自分たちのサービスであれば各マイクロサービスにCircuit Breakerを設定することで、スローダウ…
背景 EnvoyにはCircuit Breakerがあり、依存するサービスがスローダウンした際にそれ以上リクエスト送らず即座に503を返すことでサービスが死なないようにする仕組みがあります。 しかしパラメータの調節が難しく、期待した挙動にならないことが多いため1つ…
概要 gRPCでのバランシングをClient-Sideで直接実装する方法の紹介です。 gRPCはPolyglot(様々な言語で扱う)を意識しているので、gRPC自体の仕様が策定→各言語がそれに則って実装となります。 なので「元々はこういう実装だったけど、他の言語と統一してこ…
概要 gRPCはHTTP/2プロトコルをベースとしたRPCです。 なのでコネクションが永続化され、その中で複数のストリームがリクエスト・レスポンスを取り扱うため負荷分散に注意する必要があります。 今回はEnvoyというgRPCに向いたproxyを使うことでそれを実現し…