all writing connectivity

Load Balancers Across AWS, Azure, and GCP. A Practitioner's Guide

Every hyperscaler sells you a load balancer. None of them sell you the same thing twice. Strip away the marketing names and you’ll find five recurring architectural patterns — but how each cloud implements, tiers, and prices them diverges enough to trip up even experienced architects moving between platforms.

This post breaks down the landscape in three passes: a high-level map of the categories, a deep dive into each cloud’s specific implementation, and a use-case reference you can pull from when designing.


Part 1: The High-Level Map

Regardless of vendor, load balancing on the public clouds falls into five functional categories:

CategoryWhat it doesLayer
Layer 4 (Network)Fast TCP/UDP forwarding, often with source IP preservationL4
Layer 7 (Application)HTTP/HTTPS-aware routing — paths, hosts, headersL7
Global/AnycastSingle global entry point, nearest-region routing, edge resilienceL4/L7 at the edge
Internal/East-WestPrivate, VPC/VNet-scoped balancing between service tiersL4/L7 internal
Appliance InsertionTransparent steering of traffic through third-party firewalls/IDSL3

The big philosophical fork is global-by-default vs. regional-by-default. GCP’s load balancers are global-first — a single anycast IP can front backends in multiple regions natively. AWS and Azure are regional-first, requiring you to bolt on a separate global layer (Global Accelerator, Front Door) to get the same effect.

The second fork is appliance insertion maturity. AWS (Gateway Load Balancer) and Azure (Gateway Load Balancer) both have a purpose-built, GENEVE-encapsulated primitive for transparently steering traffic through firewall/IDS fleets. GCP doesn’t — the closest pattern uses Private Service Connect, which is architecturally different and less standardized.

With the map in place, here’s how each cloud actually implements it.


Part 2: Deep Dive by Cloud

AWS — Elastic Load Balancing (ELB)

AWS’s ELB portfolio is the flattest of the three: four load balancer types, no internal tiering within each, consumption-based pricing built on capacity units (LCU for ALB, NLCU for NLB, GLCU for GWLB).

Application Load Balancer (ALB) — Layer 7. Terminates HTTP/HTTPS/WebSocket/gRPC, inspects the request, and routes based on path, host, header, method, or query string. Targets can be EC2 instances, IP addresses, Lambda functions, or containers via ECS/EKS. This is AWS’s default recommendation for anything web-facing — if you’re unsure which to pick, start here.

Network Load Balancer (NLB) — Layer 4. Operates on flow-hash routing, delivers single-digit millisecond latency, and scales to millions of connections per second. It allocates a static IP per Availability Zone (a common reason teams reach for it over ALB when downstream firewall allowlisting needs a fixed address) and preserves the original client source IP by default. NLB is also the load balancer of choice for PrivateLink-fronted services.

Gateway Load Balancer (GWLB) — Layer 3. Functionally distinct from the other two — it doesn’t serve application traffic at all. GWLB transparently steers traffic through a fleet of third-party virtual appliances (firewalls, IDS/IPS, DPI) using GENEVE encapsulation over port 6081. Traffic reaches it via Gateway Load Balancer Endpoints (a VPC Endpoint/PrivateLink variant), and it’s the only ELB type that interacts directly with route tables, since it operates as a network-layer next-hop rather than a traditional listener-based proxy.

Classic Load Balancer (CLB) — Legacy. No WAF integration, no WebSocket/HTTP2 support, basic round-robin or least-outstanding-requests routing. AWS’s own documentation steers customers toward ALB/NLB for any new design; CLB shows up almost exclusively in environments lifted-and-shifted from on-prem without re-architecture.

AWS Global Accelerator — worth a mention even though it’s not strictly part of ELB. It provides static anycast IPs at AWS’s edge and routes traffic into NLB, ALB, EC2, or Elastic IP backends. Notably, it accelerates any TCP/UDP application, not just HTTP — a genuine differentiator versus Azure and GCP’s more HTTP-centric global tiers.

Azure — Load Balancing & Content Delivery

Azure has the most tiered, and most recently re-tiered, lineup of the three. Two retirements matter if you’re advising customers right now:

Azure Load Balancer (Standard SKU) — Layer 4. TCP/UDP load balancing with zone redundancy, configurable outbound rules, and HTTPS health probes. This is now the only supported SKU for general-purpose L4 balancing following Basic’s retirement.

Azure Gateway Load Balancer — Layer 3, GENEVE-encapsulated. A close architectural port of AWS’s GWLB: it chains to a Standard Load Balancer’s frontend IP configuration and uses Private Link on the consumer side. Same use case — transparent NVA insertion for firewalls and inspection appliances — released after AWS’s version and following a near-identical mechanics model.

Application Gateway (Standard_v2 / WAF_v2) — Layer 7. HTTP(S)-aware, terminates client connections and proxies separately to the backend, enabling SSL offload, header rewriting, and (on WAF_v2) OWASP-based web application firewall inspection. It’s regional and requires its own dedicated subnet, separate from backend targets. The v2 generation added autoscaling, which v1 lacked — a major reason behind the v1 retirement.

Azure Front Door (Standard / Premium) — Layer 7, global anycast. Combines CDN-style edge caching with global HTTP(S) load balancing and built-in WAF. Premium adds Private Link origin support, managed rule sets, and bot protection. Front Door and Application Gateway cause more customer confusion than any other pairing in Azure’s portfolio — Front Door is edge/global, App Gateway is regional/VNet-injected, and teams frequently reach for App Gateway when they actually need Front Door for global high availability.

Traffic Manager — DNS-level routing, not a data-plane proxy at all. It resolves DNS based on performance, priority, or geography rather than terminating and forwarding traffic. Worth distinguishing clearly from Front Door, since both get pitched as “the global option.”

GCP — Cloud Load Balancing

GCP organizes its portfolio around three primitives — Application Load Balancer (L7), proxy Network Load Balancer (L4, connection-terminating), and passthrough Network Load Balancer (L4, Direct Server Return) — each available in global, regional, cross-region, or internal variants depending on need. This is architecturally the most unified model: one mental framework, multiple deployment scopes, rather than entirely separate products.

Application Load Balancer — Layer 7, built on Envoy (regional/cross-region) or Google Front Ends (global/classic). The global external Application Load Balancer uses a single anycast IP and can direct traffic to backends across multiple regions natively — this is the clearest expression of GCP’s global-by-default philosophy. The classic Application Load Balancer is the legacy global HTTP(S) LB, global in Premium Tier but regional-only in Standard Tier. Regional external and internal (regional or cross-region) variants exist for single-region or VPC-internal use.

Proxy Network Load Balancer — Layer 4, connection-terminating. Used for TCP/SSL traffic that isn’t HTTP(S) but still benefits from proxy-based termination. Available in global, regional, and internal-regional modes.

Passthrough Network Load Balancer — Layer 4, true pass-through using Direct Server Return — the load balancer doesn’t terminate the connection; backend VMs respond directly to clients, preserving source IP without proxy overhead. Built on Maglev (external) or Andromeda (internal). The internal variant supports the broadest protocol range of any GCP load balancer: TCP, UDP, ICMP, ICMPv6, SCTP, ESP, AH, and GRE.

Network Service Tiers (Premium vs. Standard) — a cross-cutting dimension unique to GCP. Premium Tier routes traffic over Google’s private global backbone; Standard Tier routes over the public internet at lower cost but with fewer global capabilities. Not every load balancer type supports Standard Tier, so this becomes a real design constraint, not just a cost lever.

No native GWLB equivalent. The closest pattern for transparent appliance insertion uses Private Service Connect producer/consumer architecture, which is fundamentally different from GENEVE-based steering and considerably less standardized — most GCP customers historically hand-rolled this with custom routes and an Internal Load Balancer, similar to how AWS customers worked before GWLB existed. GCP increasingly pushes customers toward managed third-party integrations (e.g., Palo Alto Cloud NGFW for GCP) instead.

Post-quantum note: GCP has begun rolling out post-quantum key exchange on SSL policies, with default-on enablement phased in from October 2026 through October 2027. Worth tracking if PQC readiness is part of your evaluation criteria — the hyperscalers are moving the same direction the rest of the industry is.


Part 3: Use Cases by Category

Layer 4 (NLB / Azure Standard LB / GCP Network LB)

Layer 7 (ALB / Application Gateway / GCP Application LB)

Global/Anycast (Global Accelerator / Front Door / GCP Global LB)

Internal/East-West LBs

Appliance Insertion (GWLB / Azure Gateway LB)


The Bigger Picture

Five categories, three clouds, and roughly a dozen distinct SKUs once you count tiers and modes — and that’s before factoring in retirements like Azure’s Basic LB and Application Gateway v1, both of which disappeared within the past year. The categories are converging conceptually (everyone now has L4, L7, global, internal, and — mostly — appliance-insertion options) even as the underlying implementations and naming remain stubbornly vendor-specific.

The one category without a true equivalent everywhere is appliance insertion. AWS and Azure both built dedicated, GENEVE-based primitives specifically because centralized inline inspection chaining was architecturally painful enough to warrant new infrastructure. GCP’s relative gap here is itself a useful signal: even the hyperscalers are acknowledging that bump-in-the-wire appliance chaining is a tax worth engineering around — which raises the more interesting question of whether transparent insertion is the right long-term answer at all, versus removing the chokepoint from the path entirely.

Written by Paul Carvill

Enterprise → cloud → AI networking. I write the breakdowns I wish I’d had. New field notes roughly twice a month.

keep reading

More writing