Sticky Sessions(Session Affinity)
- 동일한 유저가 동일한 인스턴스로 리다이렉팅 되도록 만드는 것을 stickiness라 한다.
- CLB & ALB에서 사용할 수 있다.
- stickiness를 위해서 cookie가 사용되는데, 이는 만료 날짜를 갖게 되며 만료 날짜가 지나면 해당 클라이언트는 같은 인스턴스로 리다이렉팅 되지 않는다.
- 그러면 이 때는 유저가 세션 데이터를 잃게 된다.
- 사용 예시
- 유저의 로그인 정보와 같은 중요한 세션 데이터를 잃지 않도록 하기 위해 사용할 수 있다.
-> 즉, stickiness를 통해 동일한 인스턴스로 라우팅 되도록 할 수 있다.
Cookie Names
Application-based Cookies
쿠키 만료 기간은 애플리케이션에서 지정할 수 있다.
1. Custom cookie
- target에 의해 생성 된다.
- 애플리케이션에서 사용하고자 하는 어떤 custom attributes도 사용 가능하다.
- 쿠키 이름은 각 target group 별로 달라야 한다.
- ELB 예약 쿠키명은 사용하면 안된다.
- AWSALB
- AWSALBAPP
- AWSALBTG
2. Application cookie
- 로드 밸런서가 생성해 준다.
- AWSALBAPP 이라는 이름을 사용한다.
Duration-based Cookies
- 로드 밸런서가 생성해 준다.
- ALB는 AWSALB 라는 이름을 사용하고, CLB는 AWSELB 라는 이름을 사용한다.
- 특정 기간을 기준으로 만료 되며 이 기간은 로드 밸런서가 생성해 준 것이다.
Sticky Session 생성 실습
(Target group이 생성되어 있다고 가정한다)
-
Target groups로 들어가서 생성 되어 있는 타겟 그룹을 선택해 Actions > Edit attributes를 클릭한다.
-
하단에 Stickiness가 있는데 여기서 Load balancer generated cookie 또는 Application-based cookie 중 하나를 선택한다.
- 둘 다 duration 설정이 가능하다.
- Application-based cookie의 경우 여기서 cookie name을 설정하면 된다.
-
그러면 이제 headers에 Cookie: AWSALB={쿠키명}으로 쿠키 정보가 함께 온다.
Cross-Zone Load Balancing
교차 영역 로드 밸런싱을 이용하면 각 로드 밸런서 인스턴스는 전체 가용 영역에 등록된 모든 인스턴스에 전반적으로 고르게 분산 된다.
아래와 같이 클라이언트가 첫 번째 ALB 인스턴스에 50, 그리고 나머지 인스턴스에 남은 50을 보낸다고 가정해 보자.
그러면 각 AZ에 있는 ALB는 가용 영역에 관계 없이 전체 10개의 인스턴스에 트래픽을 고르게 분산한다. 이것이 바로 교차 영역 로드 밸런싱이다.
만약 이 기능을 사용하지 않으면 아래와 같이 각 ALB node가 가진 인스턴스로만 트래픽을 보낸다.
만약 각 가용 영역에 있는 인스턴스 수가 불균형 하다면 위와 같이 특정 가용 영역의 인스턴스가 더 많은 트래픽을 수신하게 된다.
각 ELB의 cross-zone 부하 분산 기능
ALB
- ALB에서 항상 이 기능을 사용할 수 있다.
- disable이 불가능하다.
- AZ간 데이터 전송에 관한 비용을 따로 지불하지 않는다.
- 끄는 기능이 없기 때문이다.
NLB
- 기본으로 disable 상태이다.
- 교차 영역 로드 밸런싱을 활성화 할 경우 추가 비용을 지불해야 한다.
CLB
- 기본으로 diable 상태이다.
- 교차 영역 간 데이터 전송시 추가 비용을 지불하지 않는다.