웹소켓 확장성

웹소켓은 stateful 하기에 웹소켓 서버의 확장을 구현하기 까다롭다.

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

refs