Scalability(확장성)은 얼마나 많은 load를 감당할 수 있는지이다.
Vertical Scalability와 Horizontal Scalability(=elasticity)가 있다
높은 Availability(가용성)은 여러 data center(AZ)에 application이 돌고있는걸 의미한다. (data center loss에서 살아남기 위해)
EC2에서 생각해보면
Load Balance는 들어오는 traffic을 여러 서버(e.g. EC2 instances)에 forward한다.
AWS Elastic Load Balancer의 종류는 다음 4가지다.
- Classic Load Balancer (v1): deprecated
- Application Load Balancer (v2): HTTP, HTTPS, WebSocket
- Network Load Balancer (v2): TCP, TLS(secure TCP), UDP
- Gateway Load Balancer: layer 3(Network Layer)
Security Group을 설정할 때, EC2에서는 Load Balancer에서 오는 트래픽만 허용하면 된다.(Load Balancer Security Group에서 Port들 설정하고)
Application load balancers is Layer 7 (HTTP)
ECS안의 dynamic port로 redirect가 가능하다.
여러 Target group으로 다음의 기준들을 통해 routing할 수 있다.
URL 기반 ALB 예시
ALB는 여러 target group으로 라우팅할 수도 있다.
Health check는 target group레벨에서 수행된다.
Target Group이 될 수 있는 것들은 다음과 같다.
Query String/Parameter 기반 ALB 예시
client는 ELB와만 소통하고, ELB가 EC2와 소통한다. 이때, EC2에서 client의 true IP는 header의 X-Forwarded-For에 들어있다.
(Port는 X-Forwarded-Port에, proto는 X-Forwarded-Proto에)
Layer 4에서 TCP/UDP trafic을 instance에 forwarding할 수 있다.
NLB의 Target Group이 될 수 있는 것들은 다음과 같다.
모든 traffic을 먼저 3rd Party Security Virtual Appliances에 보내고, 체크가 끝난 뒤에 application에 보낸다.(체크에서 실패하면 drop)
즉, 다음 두 기능을 수행한다.
GLB에서는 6081 port에서 GENEVE protocol을 이용한다.
GLB의 Target Group이 될 수 있는 것들은
한 client가 항상 한 instance에 요청을 보내도록 설정할 수 있다.
Cookie에는 Application-based cookie와 Duration-based Cookie가 있으며 load balancer로부터 만드는 cookie 이름은 AWSALBAPP, AWSALB, AWSELB이다.
AZ에 상관없이 Load balancing하는 것이 Cross Zone Load Balancing이다.
TLS가 SSL의 상위호환이고, TLS가 주로 쓰이지만 언급할 때 SSL로 이야기를 많이 한다.
Load Balancer가 HTTPS로 받고, 그 뒤는 HTTP로 통신하게 설정한다.
ACM(AWS Certificate Manager)를 통해 certificate를 관리한다.
SNI(Server Name Indication)을 통해 한 web server에 여러 SSL certificate를 load할 수 있게 된다.
instance가 de-registering중이거나 unhealthy일때 진행중인 request에 대해 완료할 시간을 주는걸 의미한다.
CLB에서는 Connection Draining이라 부르고
ALB, NLB에서는 Deregistration Delay라 부른다.
default는 300초이고, 1~3600초로 설정가능하다.(0으로 설정하면 disabled)
변화하는 load에 따라 Scale in/out을 할 수 있도록 해준다.
CloudWatch alarm에 의해 scale in/out을 하도록 설정가능하다.
ASG 자체는 무료이고, 그 아래에서 사용되는 resource에 대해서 비용이 지불된다.
Scaling Policy 중 하나인 Dynamic Scaling Policy는 다음 3가지가 있다.
Predictive Scailing은 load의 history를 분석하여 미래를 예측하는 것이다.
scaling activity(instance 늘리거나 줄이기)가 일어나고 몇초간 아무런 액션을 취하지 않는 시간이 필요하다. 변화가 일어난 뒤의 metric을 관찰해야 하므로
ASG의 default Termination Policy는 AZ간 instance 수의 균형을 맞추려 한다.
(+ Launch Template의 구버전, 신버전이 섞여있으면 구버전 삭제)
Pending State나 Terminationg State에 Lifecycle Hook을 추가할 수 있다.
종료전에 데이터들을 따로 저장해야 한다거나 할 때 필요한 기능이다.
Launch Template(newer) vs Launch Configuration(legacy)
구버전을 사용할 이유가 없고 최신 버전을 항상 이용하자!