웹소켓 확장성
웹소켓은 stateful 하기에 웹소켓 서버의 확장을 구현하기 까다롭다.
- (다른 경우와 마찬가지로)수직보다는 수평 확장이 대개 낫다. 수직 확장은 1) 비용이 많이 들고(자원 확장의 비선형성, 때에 따라 자원 조절 불가) 2) 단일실패점이 될 위험이 있다.
- 메시지 공유를 위한 서버 간 채널이 필요하다. 보통 pub/sub 을 통해 각각 다른 서버에 연결된 클라이언트를 동기화한다.
- 로드 밸런싱 알고리즘에 대한 고려가 필요하다. 웹소켓 부하 분산은 (요청 단위 아니라) 지속적인 커넥션 단위로 동작해야한다. 그렇기에 일반적으로 많이 쓰는 라운드 로빈을 사용하면, 실제 요청량에 따라 부하 분산에 실패할 수 있다.
- 연결이 끊어졌을때 연결 복원 방법을 생각해두어야한다.
- fallback 을 고려해야한다. 웹소켓 연결을 지원하지 않는 프록시, 브라우저, 특정 방화벽 등이 존재한다.
refs
- The challenge of scaling WebSockets [with video] | Ably Realtime
- Why Websockets are Hard To Scale? [Detailed Explanation]