본문 바로가기

AWS Design Pattern/동적 컨텐츠 처리 패턴

State Sharing - 상태 정보 공유

ㅁ  풀어야 할 문제

동적 콘텐츠를 생성할 때 사용자 고유의 상태를 가진 상태 정보(HTTP 세션 정보)를 이용하는 일이 많다. 그러나 로드 밸런서 아래 여러 대의 웹/AP 서버를 동작시킬 때 각 웹/AP 서버에 상태 정보를 가지도록 하면, 서버 장애나 서버 수를 의도적으로 줄일 때 상태 정보에 손실이 발생하는 경우가 있다.

 

ㅁ  해결/패턴

이 패턴은 스케일 아웃 구성에서 상태 정보를 유지하기 위한 것으로 서버를 늘렸을 경우는 상태 정보 유지, 서버가 줄었을 경우는 (장애 포함) 상태 정보 손실을 방지

상태 정보를 안정성 좋은 공유 디스크 스토어(메모리/디스크)에 놓고 여러 대의 서버에서 그 정보를 참조하여 서버에 상태 정보를 가지지 않고 상태 정보 보유가 가능하다

새로운 서버가 추가되어도 공유 데이터 스토어를 참조할 수 있어 상태 정보 전달 가능

 

ㅁ  구현

AWS의 데이터 스토어에는 ElastiCache(인 메모리 캐시), SimpleDB(KVS), DynamoDB(KVS)가 있다. 이 모든 서비스에 상태 정보를 저장할 수 있어 요건에 맞는 것을 선택하면 됨

-       상태 정보를 저장하기 위해 데이터 스토어를 준비

-       데이터 스토어에 사용자를 구별하는 ID(세션 ID나 사용자 ID)를 키로 하여 사용자 정보를 값으로 저장

-       /AP 서버에 상태 정보를 가지지 않고 데이터 스토어에 보관하여 참조 및 갱신

ㅁ  장점

상태 정보의 전달 및 손실을 걱정하지 않고 Scale Out 패턴을 이용할 수 있다.

 

ㅁ  주의점

-       여러 대의 웹/AP 서버에서 상태 정보에 대한 액세스가 한곳에 집중되어 데이터 스토어의 성능이 병목 구간이 되지 않도록 주의해야 함

-       성능 요구가 높을 때는 병목 현상이 잘 발생하지 않는 DynamoDB 선택을 검토

요구에 따라 데이터 스토어로 RD(RDBMS) 또는 [S3]를 이용할 수 있다.