CustomPeerResolverService: 클라이언트 등록 내부
메시의 각 노드는 Register 함수를 통해 해당 끝점 정보를 확인자 서비스에 게시합니다. 확인자 서비스는 이 정보를 등록 레코드로 저장합니다. 이 레코드에는 노드의 고유 식별자(RegistrationID) 및 끝점 정보(PeerNodeAddress)가 포함됩니다.
잘못된 레코드 및 만료 시간
노드가 메시를 벗어날 때 Unregister 함수를 호출하여 등록 엔트리가 확인자 서비스에 의해 제거되는 것이 이상적이지만 Unregister를 호출하기 전에 노드가 종료되거나 액세스 불가능한 상태가 되어 잘못된 등록 레코드가 발생하는 경우도 있습니다.
확인자 서비스의 잘못된 레코드로 인해 연결에 실패할 수 있습니다. 메시에 연결하려는 노드가 확인자 서비스로부터 잘못된 연결 정보를 받으면 메시에 참가하는 데 시간이 더 오래 걸릴 수 있습니다. 잘못된 레코드는 메모리도 많이 차지합니다. 효율적인 정리 프로세스를 수행하지 않으면 등록 항목을 저장하는 데 사용되는 캐시가 언젠가는 오버플로되어 확인자 서비스에서 충돌을 발생시킬 수 있습니다.
CustomPeerResolverService는 각 레코드를 만료 시간(DateTime)으로 표시하고 이 정보를 레코드의 일부로 저장합니다. 이 서비스는 만료 시간을 사용하여 잘못된 레코드를 식별합니다. 사용자 지정 구현도 이와 유사하게 작동합니다.
RefreshInterval 및 CleanupInterval
CustomPeerResolverService의 RefreshInterval 속성은 서비스의 등록 조회 테이블에 등록 레코드가 유효한 상태로 남아 있는 시간을 정의합니다. 지정된 레코드에 대해 이 속성에 제공된 시간이 지나면 해당 레코드가 잘못된 상태가 되며 삭제되도록 표시됩니다.
CustomPeerResolverService의 CleanupInterval 속성은 잘못된 등록 레코드를 검색하여 삭제하는 빈도를 서비스에 알려 줍니다. CleanupInterval은 서비스에 설정된 RefreshInterval보다 크거나 같은 시간으로 설정되어야 합니다.
사용자의 확인자 서비스를 구현하려면 유지 관리 함수를 작성하여 잘못된 등록 레코드를 제거해야 합니다. 다음과 같은 여러 가지 방법으로 이 작업을 수행할 수 있습니다.
정기적 유지 관리: 타이머가 정기적으로 시작되도록 설정하고 데이터 저장소를 조사하여 오래된 레코드를 삭제합니다. CustomPeerResolverService는 이 접근 방식을 사용합니다.
수동 삭제: 정기적으로 잘못된 레코드를 능동적으로 검색하는 대신 서비스가 이미 다른 함수를 실행하고 있을 때 잘못된 레코드를 식별하여 삭제할 수 있습니다. 이렇게 하면 확인자 클라이언트가 보낸 요청에 대한 응답 시간이 지연될 수 있지만 타이머를 사용하지 않아도 되므로 Unregister를 호출하지 않고 벗어날 것으로 예상되는 노드가 적을 경우 보다 효율적일 수 있습니다.
RegistrationLifetime 및 Refresh
확인자 서비스에 노드가 등록되면 서비스로부터 RegisterResponseInfo 개체를 받게 됩니다. 이 개체에는 등록이 만료되어 확인자 서비스에 의해 제거되기 전까지 남은 시간을 노드에 알려 주는 RegistrationLifetime 속성이 있습니다. 예를 들어, RegistrationLifetime이 2분인 경우 노드에서 2분 안에 Refresh를 호출해야 레코드가 최신 상태로 유지되어 삭제되지 않습니다. Refresh 요청을 받을 경우 확인자 서비스는 레코드를 조회하여 만료 시간을 다시 설정합니다. Refresh는 RegistrationLifetime 속성이 지정된 RefreshResponseInfo 개체를 반환합니다.
피어 채널 샘플
Peer Channel Custom Peer Resolver