Azure と AWS の L4 ロードバランサーの主要な違いを個人的に比較

L4 ロードバランサーは、ざっくりいうと、TCP/UDP のプロトコルでの負荷分散です。

Azure の場合は Standard Load Balancer(以降、Azure LB と表記) / Basic Load Balancer、AWS の場合は Network Load Balancer(以降、AWS NLB と表記)が該当します。

ただ、 Azure Basic Load Balancer は[廃止予定](https://azure.microsoft.com/ja-jp/updates/azure-basic-load-balancer-will-be-retired-on-30-september-2025-upgrade-to-standard-load-balancer/)なので、今回の比較に含めません。

## 機能面の比較

| 項目                            | Azure LB                | AWS NLB                                         |
| ------------------------------- | ----------------------- | ----------------------------------------------- |
| SLA                             | 99.99%[^2]              | 99.99%[^3]                                      |
| バックエンド / ターゲットの種類 | IP、NIC[^2]             | IP、インスタンス、Application Load Balancer[^1] |
| プロトコルリスナー              | TCP、UDP[^2]            | TCP、UDP、**TLS**[^1]                           |
| PrivateLink のサポート          | ○[^2]                   | ○[^1]                                           |
| 存続期間の長い TCP 接続         | ○[^6]                   | ○[^1]                                           |
| WebSocket 対応                  | ○（TCP 透過的）[^4]     | ○[^1]                                           |
| ヘルスチェック                  | TCP、HTTP、HTTPS[^2]    | TCP、HTTP、HTTPS[^1]                            |
| SSL のオフロード                | ×[^5]                   | ○[^1]                                           |
| Server Name Indication (SNI)    | ×(TLS のリスナーがない) | ○[^1]                                           |

AWS NLB は TLS に対応しているのが特徴的ですね。
Azure の場合は、Application Gateway や Front Door を使用することで TLS の対応や SSL のオフロード等が可能になります。

また、Azure LB は WebSocket が × となっていますが、WebSocket は TCP をベースとしたプロトコルのため WebSocket トラフィックを透過的に通過させることができると考えられます。

https://datatracker.ietf.org/doc/html/rfc6455

Azure LB は L7（アプリケーション層）での処理を行わないため、WebSocket プロトコル自体を解釈したりはしない、と捉えるのが良さそうです。

[^1]: https://aws.amazon.com/jp/elasticloadbalancing/features/
[^2]: https://learn.microsoft.com/ja-jp/azure/load-balancer/load-balancer-basic-upgrade-guidance#basic-load-balancer-sku-vs-standard-load-balancer-sku
[^3]: https://aws.amazon.com/jp/elasticloadbalancing/sla/
[^4]: https://learn.microsoft.com/ja-jp/azure/application-gateway/application-gateway-faq
[^5]: https://learn.microsoft.com/en-us/azure/load-balancer/load-balancer-faqs#does-azure-load-balancer-support-tls-ssl-termination-
[^6]: https://learn.microsoft.com/ja-jp/azure/load-balancer/load-balancer-tcp-reset

## 性能面の比較

| 項目                               | Azure LB                | AWS NLB                                    |
| ---------------------------------- | ----------------------- | ------------------------------------------ |
| 秒間最大接続数                     | (数百万の同時接続)[^B3] | (数百万の同時接続)[^B4]                    |
| NLCU あたりの秒間接続数            | -                       | TCP:800 / UDP:400[^B2]                     |
| NLCU あたりのスループット          | -                       | 1 時間あたり 1 GB [^B2]                    |
| NLCU あたりのアクティブな TCP 接続 | -                       | TCP:100,000 / UDP:50,000 (1 分あたり)[^B2] |

Azure は性能面で明確な指標がありませんでした。
このため秒間最大接続数のところに概要ドキュメントを引用しまして、十分な性能を持った仕組みであることはお伝えできればと思います。

どちらも非常に強力な性能ですね !

[^B1]: https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/network/load-balancer-limits.html
[^B2]: https://aws.amazon.com/jp/elasticloadbalancing/pricing/
[^B3]: https://learn.microsoft.com/ja-jp/azure/load-balancer/load-balancer-overview#why-use-azure-load-balancer
[^B4]: https://aws.amazon.com/jp/elasticloadbalancing/features/

## 料金の違い

料金は変動する可能性があるので注意が必要ですが重要な要素です。

Azure LB の料金は下記から確認できます。

https://azure.microsoft.com/ja-jp/pricing/details/load-balancer/#pricing

東日本リージョンの場合、はじめの 5 ルールが 1 時間あたり `$0.025`、データ処理量に対して 1 GB あたり `$0.005` です。
データ処理量によりますが、数千円から使えそうですね。
Capacity Unit のような概念がないので、変動費はデータ処理量に対するものが多くを占めるでしょうか。

こちらに対して AWS NLB の料金は下記から確認できます。

https://aws.amazon.com/jp/elasticloadbalancing/pricing/

東京リージョンの場合、固定料金が 1 時間あたり `$0.0243`、NLCU あたり 1 時間につき `$0.006` ということで、こちらも 料金の例 に記載の通り数千円から使えそうです。
AWS NLB の場合は変動費が NLCU の消費量によって変わるので、データ処理量以外のパラメータも関わってきます。