한양과학기술고등학교

에듀테크 프로젝트 대시보드

가십 프로토콜 (Gossip)

가십 프로토콜 (Gossip / 에피데믹 전파)

수천 대의 서버에 "새 설정값이 바뀌었다"는 소식을 어떻게 퍼뜨릴까? 중앙 서버가 전부에게 방송하면 그 서버가 죽는 순간 끝이다. 가십 프로토콜은 사람들 사이 소문이 퍼지듯, 각 노드가 매 라운드 무작위 이웃 몇 명에게만 정보를 전달한다. 그런데도 전체 확산은 약 log N 라운드면 끝난다.

에피데믹 확산 시뮬레이터

정보 보유(감염) 노드 아직 모르는 노드 이번 라운드에 새로 전달
라운드
0
감염 노드
1
커버리지
1%
이번 라운드 메시지
0
노드 1개만 새 정보를 알고 있습니다. 한 라운드 진행을 눌러 소문이 퍼지는 모습을 보세요.

라운드별 감염 노드 수 — S자(로지스틱) 곡선

초반엔 알고 있는 노드가 적어 느리게 퍼지고(지수적 증가), 중반에 폭발적으로 번지다가, 후반엔 대부분 이미 알고 있어 "헛수고 메시지"가 늘며 완만해진다. fanout이 b일 때 전체 도달까지 대략 log₍b+1₎ N 라운드 — 노드가 100배 늘어도 라운드는 2배만 늘어난다.

전달 방식: Push · Pull · Push-Pull

방식동작특징
Push 정보를 가진 노드가 무작위 상대에게 "이거 받아" 확산 초반에 빠름. 후반엔 이미 아는 노드끼리 보내 낭비 ↑
Pull 모르는 노드가 무작위 상대에게 "새 거 있어?" 하고 물음 확산 후반에 빠름(남은 소수가 금방 채움). 초반엔 물어봐도 허탕
Push-Pull 연결되면 서로의 최신 상태를 양방향으로 교환·병합 초반·후반 모두 빠름. 실무 표준. 도달 시간 O(log N)에 가장 근접

Anti-entropy vs Rumor mongering

  • Anti-entropy: 주기적으로 무작위 짝과 전체 상태를 대조해 차이를 메운다. 느리지만 반드시 수렴(빠뜨림 없음). 백그라운드 동기화용.
  • Rumor mongering: "새 소식"만 hot 상태로 몇 번 퍼뜨리다가, 아는 노드를 자꾸 만나면 시들해져(stop) 전파를 멈춘다. 빠르고 가볍지만 드물게 누락 가능 → anti-entropy로 보완.

왜 가십인가

  • 단일 장애점 없음: 아무 노드나 죽어도 나머지가 계속 퍼뜨린다.
  • 확장성: 각 노드 부하가 노드 수와 무관(라운드당 fanout개 고정).
  • 자가 치유: 잠깐 끊겼다 돌아온 노드도 다음 가십에서 따라잡는다.
  • 대가: 중복 메시지 + 즉시가 아닌 결국(eventual) 일관성.

가십 라운드 한 번 (의사코드)

# 모든 노드가 주기적으로(예: 1초마다) 독립 실행
def gossip_round(self):
    peers = random.sample(self.known_nodes, k=self.FANOUT)   # 무작위 이웃 b명
    for p in peers:
        # push-pull: 내 버전 벡터를 보내고 상대 것을 받아 병합
        their_state = p.exchange(self.state, self.version)
        self.state = merge(self.state, their_state)          # 예: 항목별 최신 timestamp 채택

def merge(a, b):
    return { key: max(a.get(key), b.get(key), key=lambda v: v.ts)
             for key in a.keys() | b.keys() }

핵심은 merge가 교환·결합·멱등이어야 한다는 것 — 누가 누구에게 몇 번 보내든 결과가 같다. 그래서 순서·중복·재시도에 안전하다. (→ CRDT의 semilattice 병합과 같은 아이디어)

실제로 어디에 쓰이나

시스템가십으로 하는 일
Cassandra / ScyllaDB클러스터 멤버십·스키마 버전·노드 상태(up/down) 전파
Consul / Serf (SWIM)장애 감지 + 멤버 목록 동기화, 이벤트 브로드캐스트
Amazon DynamoDB노드 링 멤버십과 파티션 정보 공유(Dynamo 논문)
Bitcoin / Ethereum새 트랜잭션·블록을 P2P 네트워크에 flooding 전파
HashiCorp / Kubernetes(일부)대규모 노드 헬스·메타데이터 저비용 전파