Its a managed service
- AWS guarantees that it will be working
- AWS takes care of upgrades, maintenance, and high-availability
- AWS provides only a few configuration knobs
- ELB supports health checks
- It distributes traffic across EC2 in multiple AZ.
It costs less to setup your own load balancer, but it will be a lot more effort on your end to maintain and integrate
3 Kinds of load balancers:
- Application Load Balancer (HTTP/HTTPS only) - layer 7 - HTTP, HTTPS, Websocket
- Network Load Balancer (ultra high performance, allows tcp) - Layer 4 - TCP, TLS, UDP
- Classic Load Balancer V1 (slowly retiring) - Layer 4 and 7 : HTTP, HTTPS, TCP, Fixed host name : xxx.region.elb.amazonaws.com
Health Checks:
- The health checks are done on a port and a route (/health is common)
- If the response is not 200 OK then the instance is unhealthy
- You can either have internal (private) or external (public - user facing).
Load Balancer Security Group
You can have only traffic coming from the loadbalancer to the EC2 instances by adding the inbound rules with load-balancer's security group
Load Balancer Errors:
- 4xx errors are client induced errors
- 5xx errors are application induced errors
- Load balancer error 503 means at capacity or no registered target
Monitoring Load Balancer:
- The ELB access logs will log all the access requests (you can debug every single request)
- CloudWatch metric will give you aggregated statistics (eg. connection counts etc)
Auto Scaling Group
In real-life, the load on your websites and application can change over time. The goal of an auto scaling group is to:
- Scale out (add EC2 instances) to match an increased load.
- Scale in (remove EC2 instances) to match a decreased load
- Ensure we have a minimum and a maximum number of machines running
- Automatically register new instances to a load balancer
- Replace unhealthy instances
- Cost Savings: only run at an optimal capacity.