Cross-zone Balancing is supported by ALB and CLB. Without Cross-zone balancing each ELB instance will just balance within its own zone. With Cross-zone balancing the total traffic will be balance across the zones.
ALB
Requires at least 2 AZs
Layer 7 protocol (HTTP, HTTPS, WebSocket)
Subnet CIDR must at least be /27 and with 8 free IP addresses per subnet
Can route based on:
URL
Host
Query String
Has port mapping feature to direct to dynamic ports. Mostly used with ECS.
Can support multiple target groups.
The target application does not see directly the actual source IP. However, the ALB will insert the header X-Forwarded-For, X-Forwarded-Port and X-Forwarded-Proto which will contain the IP Address, Port and Protocol.
Supports Sticky Session
Can generate its own cookie. Cookie name starts with AWSALB for ALB (and AWSELB for CLB)
Can also manage application cookies.
Can set cookie duration.
Cross-zone Balancing is always on. Cannot be disabled. No charge for inter-AZ
Support SSL certificates with multiple SNI i.e. it can present the right certificate based on the SNI presented by the client. (CLB supports only 1 certificate)
Can authenticate via AWS Cognito
NLB
Layer 4 protocol (TCP, UDP). Traffic is pass-through.
Lower latency than ALB
Is assigned 1 static IP per AZ
Can support multiple target groups. ALB can be one of the targets.
For internet-facing load balancers, the subnets that you specify must have at least 8 available IP addresses. For internal load balancers, this is only required if you let AWS select a private IPv4 address from the subnet.
Does not generate or manage cookies (because it’s layer 4).
Cross-zone Balancing is disabled by default. If turned on need to pay inter-AZ traffic.
Support SSL certificates with multiple SNI i.e. it can present the right certificate based on the SNI presented by the client.
GLB
Layer 3 protocol
For 3rd party virtual network appliances (e.g. Firewalls, Intrusion detection)