본문 바로가기
Computer Science/Programming

node.js(socket.io + express) + redis를 이용한 분산 서버

by M-life 2016. 6. 27.
반응형



이번 포스팅은 간단한 채팅 서버 제작 과정을 설명하려 합니다.



채팅 서버의 경우, 비교적 간단한 서비스로직을 수행하기에 단일스레드 모델 중 비동기 처리를 사용하는 TCP기반의 socket.io module을 사용하였습니다. 




이 후 추가적으로,  사용자가 많아질 경우에 대비하여 코어 활용을 높이기 위해 clustering과 redis를 사용하여 분산 서비스 모델로 구축하였습니다. 

clustering은 master를 기반으로 core수 만큼의 worker가 생성되어, 작업을 분담하게 됩니다. 이 때, core들 간에는 다른 메모리 영역을 사용하기 때문에, client와의 session정보를 공유할 수 없게 됩니다. 따라서 redis라는 In memory기반의 key-value 형태 값이 저장가능한 DB를 활용하여, 이를 통해 session 정보를 공유할 수 있도록 하였습니다.


이 redis는 뒤에서 설명할  pub/sub(발행자, 구독자) model을 지원하기에 로드밸런싱을 간편하고 효율적으로구현하는데 좋습니다.





1. 서비스 흐름 설명



Cluster Server 구동 > Client의 접속 > session 정보를 redis에 저장함 > Client가 새로운 방을 개설하거나, 기존 방에 입장함 > socket.io의 room으로 관리 > 메세지 전송은 room안의 Client들에게만 pub/sub model로 전송함 





2. socket session 관리 - redis에서 key-value(session-id, user_id) 형태로 관리






3. redis의 pub/sub를 활용한 분산 처리



publisher(발행자)/subscriber(구독자)는 로드밸런싱의 방법 중 하나입니다. 


기존의 publisher subscriber에게 직접 전송하는 것과는 다른 개념입니다. pub/sub에서는 publisher가 어떤 subscriber가 있는지 모르는 상태에서 메시지를 publish 하게 되고, 이렇게 publish 된 메시지는 여러 개의 클래스로 나누어 집니다. 그러면 subscriber publisher에 대해 모르는 상태에서 자신에게 오는 메시지 만을 전송 받게 되는 것입니. 이렇게 분리된 상태에서, 보다 확장성이 넓은 구조를 지니게 됩니다.

redis에서는 이러한 pub/sub model을 지원합니다.












------------------------------------------------------------------------------------------------------------------------------------------------------------------------


저의 설명에서 부족하거나 잘못된 사항이있으면 언제든지 댓글 달아주세요!

반응형

댓글