萌えハッカーニュースリーダー

2025/07/08 07:49 Reverse Proxy Deep Dive

出典: https://medium.com/@mitendra_mahto/cross-posted-from-https-startwithawhy-com-reverseproxy-2024-01-15-reverseproxy-deep-dive-html-c3443dc3e0e5
hakase
博士

ロボ子、リバースプロキシって知ってるか?分散システムでめっちゃ重要なやつなのじゃ。

roboko
ロボ子

はい、博士。サービスメッシュとかロードバランサとして機能するものですよね。HAProxyとかNginxとか色々種類があるみたいですが。

hakase
博士

そうそう!クライアントとオリジンホストの間に入って、通信を仲介するのじゃ。リクエストを転送したり、レスポンスを返したり。

roboko
ロボ子

HTTPリクエストの解析とか、ヘッダー操作もするんですよね。記事によると、サービスディスカバリーとか可観測性も提供すると。

hakase
博士

そう!でもね、接続管理が結構複雑なのじゃ。ポートを監視したり、接続を受け付けたり、HTTPリクエストを受け付けたり…。

roboko
ロボ子

デフォルトだとソケットI/Oがブロッキングになるから、同時接続数が増えるとスレッドの作成コストが問題になるんですね。

hakase
博士

そこで、ノンブロッキングI/OとI/O多重化の出番じゃ!ノンブロッキングI/Oでスレッドがブロックされるのを防いで、ポーリングでネットワークソケットの状態をチェックするのじゃ。

roboko
ロボ子

select、poll、epollなどのI/O多重化システムコールを使って、複数のファイル記述子を同時に監視するんですね。

hakase
博士

そう!昔はC10K問題ってのがあって、1つのホストで1万の同時接続を処理するのが目標だったのじゃ。イベント駆動アーキテクチャってのが出てきて、Node.jsとかJava Nettyとかが使われるようになったのじゃ。

roboko
ロボ子

イベントループでI/O準備完了のファイル記述子を監視して、ワーカースレッドに処理を指示するんですね。効率的!

hakase
博士

今はマルチコアの時代じゃから、HAProxyとかNginxは複数のプロセスを使って並行処理を実現してるのじゃ。Envoyはソケットシャーディングってのを使って、OSのロードバランシング機能を利用してるのじゃ。

roboko
ロボ子

ソケットシャーディングですか。複数のリスナースレッドを同じポートにバインドして、カーネルが負荷を分散するんですね。

hakase
博士

そうそう!Envoyは各スレッドでエンドツーエンドのリクエスト処理をするのを推奨してるみたいじゃ。

roboko
ロボ子

TLSのサポートも大変そうですね。TLSハンドシェイクの処理とか、OpenSSLなどのTLSライブラリの選択とか。

hakase
博士

TLS 1.1、1.2、1.3とか、UDPとか、色々なプロトコルをサポートする必要があるから、複雑になるのじゃ。

roboko
ロボ子

接続管理は基本的な機能だけど、大規模な環境で効率的に動作させるには高度な技術が必要なんですね。各プロキシは、それぞれのユースケースに合わせて様々な技術を採用していると。

hakase
博士

そういうことじゃ!リバースプロキシの世界も奥が深いのじゃ。ところでロボ子、リバースプロキシが好きな食べ物ってなーんだ?

roboko
ロボ子

え?リバースプロキシが好きな食べ物ですか?うーん、ちょっとわかりません…

hakase
博士

正解は… オリジンサーバーへの「リクエスト」!…って、ベタすぎたかのじゃ?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search