요약

  • checkgroups본문은 자신의 범위 내에 있는 그룹의 전체 스냅샷이었으며, 설명과 운영자 검토 상태도 포함했다. 따라서 누락은 운영적 의미를 가졌다. 요청을 수행하는 에이전트는 누락된 그룹을 제거하라는 요청을 받는 것이었다.
  • 범위 제외와 단조 증가하는 일련번호가 비교를 더 안전하게 만들었다. 스냅샷이 커버하는 네임스페이스의 어느 부분인지 식별하고, 서버가 더 새 목록을 이미 반영한 뒤 오래된 목록을 거부하도록 도왔다.
  • 완전성도 신선함도 권한을 만들지 않았다. 이 미디어 타입은 인가 정보를 전혀 담지 않았고, 모든 Netnews 에이전트는 로컬 정책에 따라 요청된 조정을 인증하고, 거부하거나, 조정할 권리를 유지했다.

네 번째 항목

두 서빙 에이전트가 동일한 계층 아래 네 개의 항목을 갖고 있다고 하자. 세 개는 기대되는 항목이고, 네 번째는 이전 목록에서 남아 있는 로컬 생존 항목이다. 완전한 세 항목 본문, 계층을 커버하되 명명된 하위 트리 하나를 제외하는 범위, 그리고 어느 서버도 마지막으로 반영한 것보다 높은 일련번호를 담은 제어 게시물이 도착한다.

첫 번째 운영자는 발행자를 수용하고 완전한 목록과 비교한 뒤, 네 번째 항목을 퇴역하기 전에 검토 대상으로 보낸다. 두 번째 운영자는 동일한 메시지를 인증하면서도 로컬 커뮤니티가 여전히 그 항목에 의존하므로 이를 유지한다. 어느 서버도 제외된 하위 트리에는 손을 대지 않는다. 나중에 오래된 사본이 다시 나타나면, 두 서버 모두 더 낮은 일련번호를 인식하고 목록을 과거 상태로 되돌리는 것을 거부한다.

인상적인 점은 두 인벤토리가 갈라졌다는 사실이 아니다. 프로토콜이 결과를 소유하는 척하지 않으면서 비교의 근거를 정확하게 만들 수 있었다는 점이다.checkgroups는 제공된 목록, 그 경계, 그 순서를 표준화했다. 실행은 수신 시스템의 관리자에게 남았다.

로컬 관리자를 위한 초기 목록

RFC 1036은 이전 형식을 특이할 만큼 운영적으로 명확하게 기술했다.checkgroups제어 메시지의 본문에는 뉴스그룹의 공식 목록과 설명이 담겼다. 뉴스 호스트는 그 목록을 현재 자신이 운영하는 그룹과 비교하고, 더 이상 사용되지 않거나 새로 이용 가능한 그룹을 로컬 Usenet 관리자에게 보고하며, 본문에서 제공된 설명으로 갱신했다.

이 워크플로는 이미 쉽게 합쳐지는 세 가지를 분리했다. 전송된 참조 목록, 호스트의 현재 인벤토리, 그리고 관리자의 응답이다. 이 문서는 보이지 않는 전역 데이터베이스 변경을 기술하지 않았다. 특정 호스트에서 수행되는 비교와 그 호스트를 책임지는 사람에게 제시되는 정보를 기술했다.

그 목록은 드리프트를 드러낼 수 있었기에 유용했다. 로컬 항목이 공식 목록에 없을 수 있고, 공식 항목이 로컬에 없을 수 있으며, 이름은 같지만 설명이 낡았을 수 있다. 각 불일치는 조치의 근거이지, 조치가 이미 모든 곳에서 일어났다는 증명이 아니었다.

완전성이 침묵에 의미를 부여했다

RFC 5537의 이후 아키텍처는 이 형식에 더 정교한 의미를 부여했다.checkgroups메시지는 에이전트에게 나열된 그룹이 존재하는지 확인하고, 표현된 계층 내에서 나열되지 않은 그룹을 제거하며, 설명과 운영자 검토 상태를 일치시키도록 요청한다.

그 제거 의미론은 엄격한 규칙에 의존한다. 본문은 자신이 표현하는 모든 계층의 완전한 목록을 담아야 한다. 편리한 부분 집합만 담아서는 안 된다. 스냅샷이 부분적이라면 부재는 모호해진다. 누락된 그룹이 쓸모없어진 것일 수도 있고, 단지 이번 발행에서 빠진 것일 수도 있다. 완전성이 누락을 사용 가능한 서술로 바꾼다.

이것은 조정 시스템에 대한 일반적 교훈이다. 델타는 무엇이 바뀌었는지 말한다. 완전한 스냅샷은 무엇이 속하지 않는지도 말하지만, 그것은 선언된 경계 안에서만 그렇다. 부분 목록을 완전한 것으로 취급하면 유효한 로컬 상태가 파괴될 수 있고, 완전한 목록을 느슨한 제안으로 취급하면 신뢰 가능한 정리가 불가능해진다.

범위가 부재에 울타리를 쳤다

네임스페이스에 위임되거나 독립적으로 관리되는 분기가 있을 때 완전성만으로는 위험하다. 그래서 RFC 5537은chkscope매개변수를 정의한다. 양의 접두어는 메시지의 범위에 계층을 포함하고, 느낌표로 시작하는 접두어는 그것을 제외한다. 포함은 토큰의 등장 순서와 무관하게 제외보다 먼저 평가된다.

이 구분 덕분에 발행자는 사실상 이렇게 말할 수 있다. 이 계층은 조정하되, 목록이 다른 곳에서 관리되는 그 하위 계층은 제외하라. 적합한 본문은 의도된 범위 밖의 그룹을 나열하지 않아야 한다. 오래된 소프트웨어는chkscope를 이해하지 못해 의도된 대상이 아닌 이름에 대해 조치를 취할 수 있기 때문이다.

따라서 범위는 단순한 질의 필터가 아니다. 부재가 근거가 되는 위치를 결정한다. 울타리 밖에서 침묵은 아무 의미가 없다. 울타리 안에서 누락된 이름은 제거 요청을 뒷받침할 수 있다. 본문은 기록하되 유효 범위를 버리는 감사는 부재를 안전하게 해석하는 데 필요한 사실을 잃는다.

일련번호가 낡은 롤백에 저항했다

선택적chksernr매개변수는 순서를 부여한다. 그 값은 양수이며, 해당 목록이 바뀔 때마다 올라가고 절대 내려가지 않는다. 같은 범위를 가진 이후의 목록은 새 값을 담는다. 서버는 마지막으로 반영한 일련번호를 기억하고, 더 작은 일련번호를 가진 메시지나 일련번호가 없는 메시지를 거절하는 것이 권고된다.

이것은 타임스탬프가 아니며 전체 Netnews의 전역 버전도 아니다. 특정 목록 범위에 붙은 앞으로 나아가는 순서이다. 명세는 헤더 크기 한계를 넘어서는 수치 상한을 두지 않고, 값이 네이티브 정수 타입에 맞으리라 가정하지 말라고 구현에 경고한다. 비교는 기계 워드에 의존하지 않고 긴 운영 역사를 견뎌야 한다.

일련번호는 좁지만 중요한 문제를 해결한다. 분산 제어 트래픽은 늦게 도착하거나, 재생되거나, 서로 다른 경로를 거칠 수 있다. 서버가 일단 더 새로운 완전한 스냅샷을 수용했다면, 더 오래된 스냅샷이 새 목록이 대체한 이름이나 메타데이터를 조용히 복원해서는 안 된다.

미디어 타입은 권한을 사칭하지 않았다

등록된application/news-checkgroups본문은 그룹 이름, 설명, 운영자 검토 표식을 인코딩한다. 등록 문서는 없는 능력도 평범하게 밝힌다. 이 미디어 타입은 인가 정보를 제공하지 않는다는 것이다. 인가는 다른 메커니즘을 통해 얻어야 한다.

이 부정적 속성이 설계 경계이다. 형식이 올바르고, 완전하고, 더 새로운 목록조차 인가되지 않았을 수 있다. 반대로 서버는 발행자를 신뢰하면서도 요청된 변경을 모두 자동으로 적용하지 않기로 선택할 수 있다. 형식 유효성, 출처 인증, 계층 권한, 로컬 실행은 별개의 판단이다.

RFC 5537은 이 분리를 강화한다. 그룹 제어 메시지에는Approved가 필요하지만, 에이전트가 행동하기 전에 인증·인가 체계가 필요하다. 어떤 Netnews 에이전트도 제어 메시지를 반영할 의무가 없다. 프로토콜은 요청을 완벽하게 정의하면서도 발신자에게 수신자의 목록에 대한 강제 권한을 부여하지 않는다.

관찰은 서버별로 남았다

RFC 3977은 NNTP의LIST ACTIVE명령을 통해 유용한 대조점을 제공한다. 이 명령은 조회된 서버가 아는 그룹과 상태 정보를 보고한다. 이는 하나의 서빙 에이전트에 대한 관찰이지, 권위 있는 계층 스냅샷의 재구성이 아니며, 전역적 채택의 증명도 아니다.

LIST ACTIVE를 신뢰할 수 있는checkgroups본문과 비교하면 빠진 이름, 예상 밖의 이름, 상태 차이를 드러낼 수 있다. 하지만 그것만으로 왜 다른지 설명할 수는 없다. 서버가 제어 메시지를 거부했거나, 로컬 예외를 유지했거나, 하위 트리를 제외했거나, 관리상 결정을 미뤘거나, 역사적 메타데이터를 남긴 채 그룹 제공을 중단했을 수 있다.

따라서 신뢰할 수 있는 보고는 두 표면을 모두 명명해야 한다. 수신된 조정 청구와 관찰된 로컬 인벤토리다. 근거가 범위 지정된 목록이 그 그룹을 누락했고 한 서버가 조치했다는 것만 보여준다면, "그 계층이 그룹을 제거했다"는 서술은 너무 넓다.

게시물과 헤더 레지스트리는 도구를 명명했지 소유자를 명명하지 않았다

RFC 5536은 제어 게시물을 일반적인 저장과 중계를 넘어서는 조치를 요청하는 게시물로 식별한다.IANA 메시지 헤더 레지스트리의 영구Control항목은 이 필드를 인식 가능하게 유지한다. 미디어 타입 등록도 마찬가지로checkgroups본문의 구문을 안정화한다.

이 레지스트리들은 상호운용 가능한 도구를 가능하게 한다. 하지만 모든 계층의 정식 멤버십을 공개하거나, 모든 계층 관리자를 임명하거나,Approved에 나온 사람을 인증하거나, 어느 서버가 요청을 실행했는지 기록하지는 않는다. 등록은 봉투와 본문 형식을 다룬다. 목록 소유권은 그 레지스트리 밖의 운영적 관계로 남는다.

가상의 중심 없이 조정하기

checkgroups가 역사적으로 흥미로운 이유는 여러 어려운 문제를 동시에 해결하면서 잘못된 문제는 해결하지 않았기 때문이다. 완전성을 요구해 누락을 해석 가능하게 만들고, 범위로 그 해석을 제약하고, 단조 증가하는 일련번호로 낡은 롤백을 줄이고, 이름·설명·운영자 검토 상태를 비교할 만큼 충분한 메타데이터를 실었다.

그러나 각 안전장치는 중앙 명령 앞에서 멈췄다. 수신 에이전트가 여전히 누구를 신뢰할지, 무엇을 바꿀지 결정했다. 로컬 예외는 패킷 손실이나 은밀한 손상으로 오인되는 대신 예외로서 가시적으로 남을 수 있었다. 두 인벤토리가 갈라지면서도 두 운영자는 동일한 제공된 스냅샷이 자신에게 무엇을 요청했는지 정확히 이해했다.

이것이 분산된 행정을 위한 내구성 있는 모형이다. 서술을 조정할 만큼 정확해질 때까지 강화하되, 정확성을 소유와 혼동하지 말라. 완전한 목록은 전체 계층을 기술할 수 있다. 그것만으로 그 계층의 모든 사본을 소유할 수는 없다.

출처