Aimless

AWSとAzureのL4ロードバランサを比較する

AWS Azure

AzureのLoad Balancerへの理解を深めるために、AzureのLoad BalanecrとAWSのClassic Load Balancerをロードバランサの機能ごとに比較しました。本エントリの対象は次のサービスです。いわゆるL4ロードバランサのみを対象としています。

  • AWS Classic Load Balancer(TCP/SSL)
  • Azure Load Balancer

リバースプロキシである次のサービスにもさらーっと触れます。

  • AWS Classic Load Balancer(HTTP/HTTPS)
  • AWS Application Load Balancer
  • Azure Application Gateway

同じロードバランサでもクラウドによって仕様が違いました。様々なサービスを理解するのは大変ですね。

対象プロトコル

ロードバランサを利用できるプロトコル。

Cloud 実装
AWS CLB(TCP/SSL) TCP、SSL1
Azure LB TCP、UDP2

リバースプロキシである次のサービスは、HTTPとHTTPSのみをサポートします。

  • AWS Classic Load Balancer(HTTP/HTTPS)
  • AWS Application Load Balancer
  • Azure Application Gateway

負荷分散方式

クライアントからの通信を特定のロジックにしたがって負荷分散の対象となるサーバに転送する機能。

Cloud 実装
AWS CLB(TCP/SSL) ラウンドロビン3
Azure LB 5タプルハッシュ、2タプルハッシュ、3タプルハッシュ4

なお、AWS CLB(HTTP/HTTPS)の負荷分散方式はLeast Conn(最小の未処理のリクエスト)です。3

宛先IPアドレス変換

ロードバランサに届いたパケットの宛先IPアドレスを、ロードバランサのIPアドレスから負荷分散の対象となるサーバのIPアドレスに変換する機能。ロードバランサは、どのサーバのIPアドレスに変換するかを負荷分散の方式に応じて自動的に決定します。

Cloud 実装
AWS CLB(TCP/SSL) あり
Azure LB あり。管理者による明示的な指定も可能。

Azureでは管理者が宛先IPアドレス変換の動作をカスタマイズできます。「受信NAT規則」を使うと、ロードバランサは宛先IPアドレスを特定のサーバのIPアドレスに変換します。5「Floating IP」を使うと、ロードバランサは宛先IPアドレスを変換せずにそのまま負荷分散の対象となるサーバに転送します。6

宛先ポート番号変換

ロードバランサに届いたパケットの宛先ポート番号を、負荷分散の対象となるサーバのポート番号に変換する機能。本機能があると、ロードバランサが使うポート番号とサーバが使うポート番号を別のものにできます。

Cloud 実装
AWS CLB(TCP/SSL) あり
Azure LB あり

送信元IPアドレス変換

クライアントからの通信をサーバに分散する際に、クライアントのIPアドレスを別のIPアドレスに変換する機能。

Cloud 実装
AWS CLB(TCP/SSL) 着信したELBのNICのIPアドレスに変換7
Azure LB 変換しない8

セッション維持

クライアントからの通信を同じサーバに分散し続ける機能。

Cloud 実装
AWS CLB(TCP/SSL) なし
Azure LB あり。負荷分散方式を2タプルまたは3タプルにする9

なお、AWS CLB(HTTP/HTTPS)とAWS ALBは、Cookieを利用したセッション維持をサポートします。10ただし、AWS ALB はロードバランサが生成するCookieを利用したセッション維持のみをサポートします。アプリケーションが生成するCookieを利用したセッション維持はサポートされていません。11

ヘルスチェック

動いているサーバに通信を分散するために、負荷分散の対象となるサーバが生きているかを監視する機能。

Cloud 実装
AWS CLB(TCP/SSL) ELB自身のIPアドレスを使って、負荷分散の対象となるサーバの生き死にを確認する。12
Azure LB 168.63.129.16のIPアドレスを使って、負荷分散の対象となるサーバの生き死にを確認する。13

クライアントのアクセス先

Cloud 実装
AWS CLB(TCP/SSL) FQDN。ELBのIPアドレスは変わる可能性がある。14
Azure LB IPアドレス。LBをインターネットに公開する場合は、LBに設定するPublic IP AddressのFQDNでもアクセス可能。15

Connection Draining

負荷分散の対象となるサーバがロードバランサから手動で切り離されたときに、クライアントと切り離されたサーバ間の既存セッションを指定された時間分維持し続ける(=強制的に切断しない)機能。この機能があると、負荷分散の対象となるサーバをメンテナンスする際にユーザ影響を小さくできる。

Cloud 実装
AWS CLB(TCP/SSL) サポートする16
Azure LB サポートしない?17

SSL終端

クライアントとのHTTPS通信を、負荷分散の対象となるサーバではなくロードバランサで処理する機能。

Cloud 実装
AWS CLB(TCP/SSL) サポートしない。AWS CLB(HTTP/HTTPS)とALBではサポートする。18
Azure LB サポートしない。Application Gatewayでサポートする。19

ログ記録

通信ログと性能ログを記録する機能

Cloud 実装
AWS CLB(TCP/SSL) アクセスログ20、監査ログ21、メトリクス22
Azure LB 監査ログ、アラートイベントログ、ヘルスチェックログ23

クライアントアドレスの通知

負荷分散の対象となるサーバに対して、クライアントのIPアドレスを通知する機能

Cloud 実装
AWS CLB(TCP/SSL) ProxyProtocolをサポート
Azure LB そもそも送信元NATしないので、本機能は不要

  1. http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/userguide/what-is-load-balancing.html [return]
  2. https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-overview [return]
  3. http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html [return]
  4. https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-distribution-mode#a-namehash-based-distribution-modeaハッシュベースの分散モード [return]
  5. https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-get-started-internet-arm-ps [return]
  6. http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/enable-proxy-protocol.html [return]
  7. 公式ドキュメント見当たらず [return]
  8. 公式ドキュメント見当たらず [return]
  9. https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-distribution-mode#a-namesource-ip-affinity-modeaソース-ip-アフィニティ-モード [return]
  10. http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-sticky-sessions.html#enable-sticky-sessions-duration [return]
  11. http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-target-groups.html#sticky-sessions [return]
  12. 公式ドキュメント見当たらず [return]
  13. https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-custom-probe-overview | [return]
  14. https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2016-elastic-load-balancing [return]
  15. ロードバランサのアーキテクチャいろいろ - yunazuno.log [return]
  16. http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/config-conn-drain.html) [return]
  17. https://feedback.azure.com/forums/217313-networking/suggestions/8156781-provide-explicit-drain-stop-capabilities-for-load [return]
  18. http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-ssl-security-policy.html [return]
  19. https://docs.microsoft.com/ja-jp/azure/application-gateway/application-gateway-ssl-portal [return]
  20. http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/access-log-collection.html(http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/access-log-collection.html) [return]
  21. http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/ELB-API-Logs.html [return]
  22. http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-cloudwatch-metrics.html#loadbalancing-metrics-clb [return]
  23. https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-monitor-log [return]

1 Aug 2017