요약

  • RFC 992는 고장과 복구를 순서가 있는 그룹 메시지로 다뤄, 살아 있는 프로세스들이 구성원 변화를 같은 순서로 보게 했다.
  • GBCAST는 구성원 변경, ABCAST는 복제 작업의 공통 순서, CBCAST는 인과관계를 맡고 독립적인 메시지에는 병렬로 달릴 길을 남겼다.

작업 대기열을 세 대가 똑같이 들고 있다고 하자. 고객이 맨 앞 작업을 꺼내라는 지시를 보낸다. 그때 한 대가 꺼진다. 남은 A는 지시를 먼저 보고, B는 고장 통지를 먼저 본다. A는 첫 작업을 이미 꺼내 다음 작업을 맨 앞으로 올린다. B는 고장 소식을 먼저 듣고 첫 작업을 그대로 남겨 둔다. 다음 고객이 어느 서버에 연결되느냐에 따라 다른 작업을 받는다. 장비는 고장을 견뎠지만 대기열의 내용은 둘로 갈라졌다.

Kenneth Birman과 Thomas Joseph은 Cornell의 ISIS 연구를 바탕으로 1986년 11월 RFC 992를 발표했다. 앞선 RFC 966과 RFC 988는 호스트 그룹과 멀티캐스트를 다뤘다. Cornell 팀이 파고든 틈은 메시지가 이동하는 도중 수신자 명단이 바뀌는 순간이었다. “그룹 전체”에 보낸 지시의 그룹은 어느 시점의 명단인가. 업무 메시지와 명단 변경이 제각각 오면, 같은 지시도 다른 뜻을 갖는다.

가장 엄격한 도구가 GBCAST였다. 복구된 구성원은 돌아왔다고 알리고, 멈춘 구성원을 대신해서는 시스템이 고장을 알린다. 당사자가 보낼 수 없는 부고를 프로토콜이 대필하는 셈이다. 이 통지는 다른 메시지와 함께 순서를 갖는다. 한 수신자가 업무 메시지를 고장 통지보다 먼저 봤다면 겹치는 수신자들도 같은 순서로 본다. 멈춘 발신자가 이전에 보낸 메시지 역시 자기 고장 통지보다 앞선다. 각 구성원은 VIEW라는 명단을 유지한다. 모두의 시계가 한순간에 맞춰 바뀌지는 않아도, 명단은 같은 변경 순서를 지나간다. 한 메시지를 처리할 때 바라보는 장면이 같아지는 것이다.

물론 이런 의전은 비싸다. 연구진은 GBCAST를 모든 메시지에 강요하지 않았다. ABCAST는 같은 이름표를 단 메시지를 공통 수신자에게 같은 순서로 전해 복제 대기열의 작업을 맞춘다. CBCAST는 원인과 결과로 이어진 메시지의 순서만 지키고, 서로 무관한 일은 각자 달리게 한다. 세 약어는 장식이 아니라 조정 비용표다. 모든 편지에 국빈 환영식을 열면 서비스가 고장보다 먼저 지친다.

논문은 멈춤 형태의 고장과 이를 찾아내는 장치를 전제로 했다. 당시 워크스테이션 시계의 정밀도와 사이트 간 지연 사례는 시간표 하나로 메시지 경주를 판정하기 어려웠던 1980년대 실험 환경을 보여준다. 글에는 앞선 ISIS 시제품의 완성과 새 구현 작업이 함께 기록됐다. 남은 통찰은 단단하다. 구성원의 퇴장이 다음 지시의 뜻을 바꾼다면, 퇴장 소식도 그 지시와 같은 대화 속에서 전달돼야 한다.

멈춘 서버는 회의에 못 왔다. 살아남은 서버들만큼은 같은 순서의 회의록을 받아야 했다.