요약

  • RFC 3656의RESERVE는 메일박스 이름을 다른 경쟁 청구로부터 확보하는 기능이었지만, 클라이언트가 사용할 준비가 되었다는 의미는 아니라고 명시했다.
  • 준비 상태는 이후 로컬 생성과ACTIVATE를 거친MAILBOX상태에서 나타났다. 서버 프로토콜은 이 순서를 권고했지만, 이를 사전 조건으로 강제하지 않고 참여자들의 협력에 의존했다.

먼저 이름, 그 다음 메일박스

메일 서버 클러스터에서 디렉터리 조회는 서로 다른 두 가지 질문에 답해야 한다. 어느 서버가 그 이름을 소유하는가? 그리고 클라이언트가 지금 그곳의 메일박스에 접근할 수 있는가? 2003년 12월 실험적(Experimental) 프로토콜로 공개된 RFC 3656은 이 두 답을 별도의 레코드로 분리했다. MUPDATE는 여러 대의 기기가 배달 책임을 나누는 동시에 IMAP 및 POP3 서버에 통합된 메일박스 네임스페이스를 제공하도록 설계되었다.

전형적인 생성 순서는RESERVE로 시작했다. 클라이언트는 마스터에게 명시된 위치에서 메일박스 이름을 보존해 달라고 요청했다. 서버가 OK를 반환한 후, 클라이언트는 로컬 메일박스 생성 작업을 수행하고 이름, 위치, ACL을 담아ACTIVATE를 보냈다. 활성화가 성공하면 레코드가 활성 상태가 되었다. 위치는 클라이언트를 메일박스를 저장하는 서버로 안내할 수 있었고, ACL은 메일박스 접근 권한을 기술했다.

이 구분은 응답에서 드러난다.RESERVE는 이름이 더 이상 다른 청구자에게 제공되지 않는다는 뜻이지만, RFC는 그것이 메일박스가 현재 클라이언트에게 제공된다는 의미는 아니라고 명시했다.MAILBOX는 접근 준비가 된 레코드에 대한 응답이다. 이 메시지들을 동의어로 다루면 네임스페이스 잠금이 거짓된 가용성 신호로 변할 수 있다. 로컬 객체가 아직 존재하지 않거나 생성 단계가 완료되지 않았을 수 있기 때문이다.

원자성은 공유된 규율이었다

MUPDATE는 권위 있는 데이터베이스를 보유한 단일 마스터와 이를 복제하는 슬레이브 서버들을 기술했다. 클라이언트는 어느 쪽으로든 검색할 수 있었고, 데이터베이스 변경은 마스터로 보내졌다. 따라서 전형적인 생성 작업은 분산된 이름 레지스트리와 로컬 메일박스 스토어라는 두 표면을 넘었다. 프로토콜은 이 둘을 조율했지만 하나의 원자적 기계로 만들지는 않았다.

이 한계는 규범적 언어에서 특히 분명하다. 설계가 인증된 참여자들이 협력하여 원자적 작업을 유지한다고 가정하기 때문에, 새 메일박스는 활성화되기 전에 예약되어야 한다(SHOULD). 그러나ACTIVATE는 사전 예약을 요구하지 않는다. 명세는 실제 메일박스 위치와의 동기화를 단순화하기 위해 그러한 동작을 허용했다. 따라서 공유된 잠금 관례를 건너뛰는 참여자는 일관성 없는 데이터베이스 상태를 만드는 데 일조할 수 있다. 데이터베이스는 자신에게 보고되지 않은 로컬 메일박스 트랜잭션을 추론할 수 없다.

DEACTIVATE는 활성 이름을 다시 예약 상태로 되돌렸으며, 네임스페이스에서 이름을 삭제하는 것과는 달랐다. RFC는 그 과정에서 알려진 ACL 정보가 손실될 수 있다고도 경고했다. 이러한 상태는 마이그레이션 도중이나 생성이 중단된 상황에서 중요하다. 활성 메일박스가 광고되지 않는 상태에서도 이름은 계속 점유된 채 남을 수 있고, 위치 레코드만으로는 클라이언트가 로그인을 완료하거나 메일을 읽었다는 증거가 되지 않는다.

복제본의 OK에는 경계가 있었다

슬레이브가UPDATE를 발행한 후, 마스터는 초기 목록을 보낸 뒤 이후의 메일박스 변경을 스트리밍했다. 프로토콜은 마스터 측 변경이 있으면 30초 이내에 업데이트를 보내도록 요구했다. 슬레이브는NOOP를 발행할 수 있었고,UPDATE이후 태그가 붙은 OK는 그NOOP시점에 대기 중이던 모든 변경이 전송될 때까지 기다려야 했다. 이는 복제본에 유한한 동기화 지점을 제공했을 뿐, 응답 이후에도 데이터베이스가 전역적으로 최신 상태를 유지한다는 약속이 아니었다.

이는 유용하지만 범위가 좁은 수신 확인이다. 어떤 시점에 어떤 대기 스트림이 해당 복제본까지 흘러들었는지를 말할 뿐이다. 이후의 마스터 업데이트가 도착했는지, 로컬 메일박스가 건강한지, 최종 사용자가 접근했는지는 증명하지 못한다. RFC 3656은 실험적(Experimental) 문서였으며, 현재 배포나 측정된 가용성의 증거가 아니라 제안된 조율 계약을 기록한 것이다.

출처