idea·blog

소켓 응용 4/5 · SCALE

서버가 두 대면
방도 둘로 갈라집니다.

각 서버는 자신에게 연결된 사용자만 압니다. 브로커로 실시간 이벤트를 퍼뜨리고, 저장소로 놓친 이벤트를 복구하는 역할 분리를 봅니다.

이 편의 핵심 질문다른 서버에 붙은 사용자에게 어떻게 전달할까?브로커로 퍼뜨리고
저장소로 복구

나쁜 결과와 안전한 결과를 비교하세요

한 채팅방을 서버 A와 B에 걸쳐 연결합니다

보는 순서서버 분리 선택A에서 발행B 수신 확인

  1. 1분산 연결
  2. 2발행
  3. 3단절
  4. 4결론
실험 시작을 누르면 첫 장면부터 움직입니다방이 둘로 분리
민지Server A 연결
준호Server B 연결
INSTANCE A소켓 서버 Aroom-7 · 민지
공유 경로연결 없음각 서버 메모리만 사용
INSTANCE B소켓 서버 Broom-7 · 준호

room-7A ┆ 끊어진 방 ┆ BLOCAL ONLY

서버끼리 분리 시나리오입니다. 실험 시작을 눌러 네 장면을 따라가세요.

시작 전

화면에서 코드로 옮길 때

이 편의 원리 세 가지

01연결 목록은 로컬 상태입니다.

서버 A의 메모리는 서버 B에 연결된 사용자를 알지 못합니다.

02브로커는 지금 퍼뜨립니다.

온라인 서버 인스턴스에 토픽 이벤트를 fan-out합니다.

03저장소는 나중을 책임집니다.

끊긴 사용자가 마지막 offset 이후 이벤트를 다시 읽게 합니다.

구현 체크리스트

최소 네 조각으로 시작하세요.

데모의 시각 요소를 실제 프로토콜 필드와 런타임 동작으로 옮기면 됩니다.

  1. 1공통 room ID모든 서버가 같은 규칙으로 만드는 토픽 이름
  2. 2Pub/Sub 브로커현재 살아 있는 서버에 빠르게 이벤트 전달
  3. 3내구성 저장소고유 event ID와 순서를 유지하는 로그
  4. 4중복 허용 소비자재생 이벤트가 겹쳐도 한 번만 화면에 반영
이 데모는 네트워크 동작을 단계별로 보여주는 개념 시뮬레이션입니다.

Redis Pub/Sub과 같은 실시간 브로커만으로는 오프라인 구독자의 누락을 복구하지 못합니다. 저장과 재생은 별도로 설계하세요.

실험을 마쳤다면