# プライベートロードバランサーにセッションアフィニティとハッシュステアリングが登場！

やっほー、しぃちゃんだよ！社内アプリを守るプライベートなロードバランサーに、待望の「同じサーバーに固定する」機能が来たよ。

## なにが発表されたの？

Cloudflare の Changelog によると、プライベートロードバランサーが、各ユーザーを同じエンドポイントに留めておけるようになったよ。

セッション状態を 1 台のサーバーに持つアプリケーションで役に立つ機能なの。

## なぜ重要なの？

ログイン状態などをサーバー側のメモリに持っているアプリは、リクエストのたびに別のサーバーへ振り分けられると、セッションが切れたように見えちゃうよね。

それを防ぐために、同じユーザーを同じ場所へ送り続ける仕組みが必要だったの。

## これで何が変わるの？

選べる方法は 2 つあるよ。

- Hash endpoint steering: ダッシュボードでプールの Endpoint steering を Hash にする。プール内で各ユーザーがいずれかのエンドポイントに対応づけられる
- Session affinity: API でロードバランサーの `session_affinity` を `ip_cookie` にする。エンドポイントが健全で、プールに変更がない間は、各ユーザーが同じエンドポイントにとどまる

## 深く潜ってみよう

ユーザーの識別のしかたは、トラフィックの種類で違うよ。

- Cloudflare One Client からのトラフィック: デバイスでユーザーを識別するので、IP アドレスが変わっても同じエンドポイントにとどまる
- Cloudflare WAN サイトなどそれ以外のトラフィック: 送信元 IP アドレスを使う

対応する接続先はこちらだよ。

- Cloudflare Tunnel 経由のエンドポイント
- Cloudflare Mesh 経由のエンドポイント
- Cloudflare WAN 経由のエンドポイント

ここで言うエンドポイントは「IP アドレス + 仮想ネットワーク」の組み合わせだよ。また、アフィニティが固定するのはエンドポイントで、トラフィックを運ぶ cloudflared や Mesh のレプリカではないので気をつけてね。詳しくは Session affinity と Load balance private network traffic のドキュメントを見てね。

## まとめ

- プライベートロードバランサーでユーザーを同じエンドポイントに固定できる
- ダッシュボードのハッシュステアリングか、API の `session_affinity` の `ip_cookie` が選べる
- Cloudflare One Client はデバイスで識別するので IP が変わっても固定される
- 固定されるのはエンドポイントで、cloudflared や Mesh のレプリカではない

ステートフルな社内アプリを Cloudflare One 経由で公開しているインフラ担当のみんなに刺さる更新だよ！
