はじめに
Xで目にした技術Tipsの紹介です。
WEBサーバー(アプリケーションサーバー)の前段に配置し通信やデータに対して何かしらの制御を行う技術として挙げられる三者ですが、それぞれの使い所や目的の違いを意識せずなんとなく運用しがちなケースが多いように思うので、知識の見直しを図るのにうってつけの情報です。
原典
Reverse proxy vs. API gateway vs. load balancer
— Bytebytego (@bytebytego) November 14, 2023
As modern websites and applications are like busy beehives, we use a variety of tools to manage the buzz. Here we'll explore three superheroes: Reverse Proxy, API Gateway, and Load Balancer.
🔹Reverse Proxy: change identity
-… pic.twitter.com/szyBYf2msC
結論
実処理を担うサーバーの存在を外から見えなくしたいならリバースプロキシ。
サービス間通信の体系化を実現するならAPIゲートウェイ。
トラフィックの制御を求めるならロードバランサー。
これらは三者択一ではない。時には全てを網羅するのも賢い選択である。
いずれを選択しても、安全かつ効率的なシステム運用に役立つ。
リバースプロキシ
🔹Reverse Proxy: change identity
- Fetching data secretly, keeping servers hidden.
- Perfect for shielding sensitive websites from cyber-attacks and prying eyes.
主目的は「アイデンティティの変更」です。
- データを秘密裏に取得し、またサーバーの存在を隠します。
- センシティブなWEBサイトをサイバー攻撃や好奇の目から保護するのに最適です。
「WEBサーバーという子供をラップする親のような存在」と言えそうです。
WEBサイトのユーザー(ブラウザ等)に対する「表の顔」として存在し、大切なWEBサーバーたちをセキュリティリスクから保護するのが主目的であると。
リバースプロキシとして代表的なサービスは何と言ってもNginxですね。
なお原文では触れられていませんが、詳細な役割としては他にも豊富にあります。SSL終端、バックエンドサーバー構成の拡張変更容易性、キャッシングによるバックエンド負荷軽減など。
Nginx公式が非常にわかりやすいです。
https://www.nginx.co.jp/resources/glossary/reverse-proxy-vs-load-balancer/
APIゲートウェイ
🔹API Gateway: postman
- Delivers requests to the right services.
- Ideal for bustling applications with numerous intercommunicating services.
喩えるなら「郵便配達人」です。
- 受信したリクエストを適切な宛先のサービスへ配送します。
- 相互通信を行う多数のサービス群で構成される複雑なアプリケーションにピッタリです。
APIゲートウェイは、異なる処理目的を持つ複数のサービスを集約する単一のエンドポイントとして公開されるのが通常で、受信したリクエストの種別(クエリストリングやPOSTボディデータで表現されることが多い)に応じて、適切な処理サービスへリクエストを振り分ける、という役割を担います。
よく使われるのはAWSが提供するAmazon API Gatewayあたりでしょうか。
その他よく求められる役割を補足すると、API使用状況モニタリング、クライアントの認証認可、Open API Specificationとの統合、流量制御、APIバージョン管理、等があります。
APIゲートウェイ自体がサーバレスなフルマネージドのサービスとして実装されていることが多いので、サーバレスアーキテクチャと組み合わせることでシステム運用上のシナジーを最大化できます。
ロードバランサー
🔹Load Balancer: traffic cop
- Directs traffic evenly across servers, preventing bottlenecks
- Essential for popular websites with heavy traffic and high demand
例えるなら「交通整理の警察官」です。
- 受信トラフィックを各サーバー間に均等に振り分けることでボトルネック発生を未然に防ぎます。
- 大量のトラフィックと高い需要に対応する人気WEBサイトで不可欠です。
ロードバランサーは冗長化された複数のバックエンドサーバー群の前段に配置され、各サーバーの処理量が均等になるように受信トラフィックを振り分けることで可用性を確保します。
よく使われるのはNginxやAWS Elastic Load Balancer(ELB)でしょうか。
おわりに
これら三つの要素がどのような主目的で存在するのかを理解することで、システム運用の適切な設計に役立てることができると思います。