프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

 

고가용성을 가진 웹서비스 인프라를 만들어보는 중에 Elastic cache를 활용해서 세션 쿠키를 캐싱할 계획이었다.

 

WAS에 Elastic Cache 사용

 

 

 

 

Memcached를 선택한 이유는 단순히 세션 쿠키를 저장하고 읽는 것이라면,

단순한 기능을 제공하는 대신 빠른 성능을 보이는 Memcached가 redis보다 좋다고 판단했다.

 

고가용성을 보장하려면, 두 개 이상의 노드가 동작해야 하기 때문에 memcached 노드를 두 개를 다른 AZ에 배치하였다.

두 개의 노드를 생성함

 

 

 

 

클러스터라면 노드 간의 동기화가 당연하게 일어날 줄 알았지만, 

하나의 노드에서 key 저장 후, 다른 노드에서 키를  확인해 보니 서로 데이터는 독립적으로 처리하는 것이 확인되었다.

 

데이터 저장

 

노드마다 저장 정보가 다르다

 

 

 

 

이처럼 AWS Memcached은 노드 간의 동기화가 제공되지 않는 것이 확인된다.

그럼에도 Memcached 클러스터를 사용할 수 있는 이유는 클라이언트의 정보를 해싱해서 항상 같은 노드로 연결해 주기 때문이다. 이를 통해서 로드 밸런싱을 제공할 수도 있다.

 

하지만 WAS의 세션 저장 용으로 사용하기에는 치명적인 문제이다.

우리는 로드 밸런싱을 통해 유저가 항상 다른 WAS로 연결될 수 있다.

WAS마다 정해진 Memcached로만 연결된다면, 세션이 연결 끊어지게 된다.

 

 

 

이처럼 가용성을 위해 두 개 이상의 노드를 사용하고 싶다면, 특별한 세팅 혹은 Memcachier나 Redis의 복제기능을 활용해야 할 것이다.

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함