Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
고가용성을 가진 웹서비스 인프라를 만들어보는 중에 Elastic cache를 활용해서 세션 쿠키를 캐싱할 계획이었다.
Memcached를 선택한 이유는 단순히 세션 쿠키를 저장하고 읽는 것이라면,
단순한 기능을 제공하는 대신 빠른 성능을 보이는 Memcached가 redis보다 좋다고 판단했다.
고가용성을 보장하려면, 두 개 이상의 노드가 동작해야 하기 때문에 memcached 노드를 두 개를 다른 AZ에 배치하였다.
클러스터라면 노드 간의 동기화가 당연하게 일어날 줄 알았지만,
하나의 노드에서 key 저장 후, 다른 노드에서 키를 확인해 보니 서로 데이터는 독립적으로 처리하는 것이 확인되었다.
이처럼 AWS Memcached은 노드 간의 동기화가 제공되지 않는 것이 확인된다.
그럼에도 Memcached 클러스터를 사용할 수 있는 이유는 클라이언트의 정보를 해싱해서 항상 같은 노드로 연결해 주기 때문이다. 이를 통해서 로드 밸런싱을 제공할 수도 있다.
하지만 WAS의 세션 저장 용으로 사용하기에는 치명적인 문제이다.
우리는 로드 밸런싱을 통해 유저가 항상 다른 WAS로 연결될 수 있다.
WAS마다 정해진 Memcached로만 연결된다면, 세션이 연결 끊어지게 된다.
이처럼 가용성을 위해 두 개 이상의 노드를 사용하고 싶다면, 특별한 세팅 혹은 Memcachier나 Redis의 복제기능을 활용해야 할 것이다.
'Cloud > AWS' 카테고리의 다른 글
[EC2 Ubuntu] AWS PHP SDK 세팅 및 DynamoDB 테스트 (0) | 2024.05.20 |
---|---|
CodeDeploy ECS 블루/그린 배포 방식 살펴보기 (0) | 2024.05.20 |
[AWS] Private subnet 자원 접근 시, ELB과 NAT GateWay의 Flow 확인하기 (0) | 2024.04.19 |
AWS CodeDeploy로 WordPress 배포하기 (0) | 2024.04.04 |
Amazon ECS를 사용한 컨테이너 CI/CD환경 구축 (0) | 2024.04.03 |