공개 노드 목록은 가동 시간이 주 단위로 표시된 서버를 보여 주므로 여러분은 그것을 고르고, 연결은 첫 시도에서 실패합니다. 이것은 거짓 광고가 아니라 다른 것을 측정하는 숫자에 던진 잘못된 질문입니다. 가동 시간은 보통 프로세스, 컨테이너 또는 머신이 마지막으로 시작된 뒤 얼마나 오래 실행 중인지를 알려 주며, 그것은 게시자의 인프라 속성이지 여러분에서 그곳으로 가는 경로의 속성이 아닙니다. 이를 신뢰성으로 다루는 것은 자동차의 주행 거리계를 도로 보고서로 다루는 것과 같은 범주 오류입니다.

그 숫자가 측정하는 것

현대적인 서비스 관리자가 있는 호스트에서 카운터는 유닛이 활성 상태로 들어간 시각이거나 머신의 부팅 시각처럼 실제로 읽을 수 있는 사건에 고정됩니다. 나머지는 모두 그 기준점 위의 산술이며, 기준점의 정의는 게시자마다 다릅니다. 한 목록은 데몬 재시작에서 초기화하고, 다른 목록은 머신 재부팅에서, 세 번째는 깨끗한 그래프를 원한 운영자가 직접 수행한 수동 초기화에서 초기화합니다.

systemctl show -p ActiveEnterTimestamp --value openvpn-server@server
uptime -s
systemctl is-active openvpn-server@server

그 세 명령은 서로 다른 세 가지 질문에 답하며, 하나의 숫자만 보여 주는 디렉터리는 어느 것을 사용했는지 알려 줄 수 없습니다. 따라서 두 목록의 원시 카운터를 비교하는 것은 각각이 무엇에서 초기화되는지 알기 전까지는 비교조차 아닙니다.

경로가 끊겨 있어도 프로세스는 살아 있을 수 있다

데몬은 수신 대기 중입니다. 인증서는 유효합니다. 프로세스는 이십삼 일째 살아 있습니다. 그럼에도 도달 가능성은 제공자의 업링크, 그들의 네트워크와 여러분의 네트워크 사이의 피어링, 공유 트랜짓 링크의 혼잡, 그리고 여러분 자신의 연결 앞에 있는 방화벽이라는 전체 경로의 속성이므로, 여러분의 네트워크에서 오는 패킷이 거기에 도달한다는 보장은 없습니다.

서버는 다른 이유로 살아 있으면서 쓸모없을 수도 있습니다. 자기 대역폭이 감당하는 것보다 훨씬 많은 클라이언트를 받아들인 노드는 카운터가 용량이나 경합을 측정하지 않으므로 긴 가동 시간과 형편없는 경험을 보여 줄 것입니다. 가동 시간이 긴 노드가 실망시키는 가장 흔한 방식은 이것입니다——아무것도 고장 나지 않았고, 모든 것이 붐빕니다.

반대 경우도 기억할 가치가 있습니다. 한 시간 전에 재시작된 노드는 지금 완전히 건강할 수 있으며, 가장 큰 숫자로 정렬하면 그것을 조용히 제외합니다. 가동 시간은 품질 점수가 아닙니다, 그리고 그것을 점수로 다루면 적합성이 아니라 나이로 선택하게 됩니다.

신선도: 보고서는 여러분의 시도보다 오래되었다

공개 디렉터리는 주기적 점검으로 생성된 페이지이며 실시간 텔레메트리가 아닙니다. 여러분이 읽는 가동 시간은 마지막 새로 고침에서 계산되었고, 여러분이 시도하는 연결은 그 이후에 일어납니다. 그 사이에 제공자는 링크를 끊고, 인증서를 바꾸고, 주소를 옮기고, 노드를 서비스에서 빼 버릴 수 있으며, 페이지는 다음 크롤링까지 마지막으로 알려진 양호한 상태를 계속 보고합니다.

그 간격은 반대 방향으로도 작동합니다. 다운으로 보고된 노드가 보고서가 생성된 뒤 몇 분 만에 회복되었을 수 있으므로, 다른 노드로 즉시 다시 시도하는 것이 항상 더 나은 선택은 아닙니다.

실용적인 규칙은 보고된 모든 필드가 과거에 대한 주장이라는 것입니다. 그것으로 후보 목록을 만든 뒤, 여러분에게 중요한 시점에 직접 수행한 측정으로 검증하세요.

대신 무엇을 시험할까

노드에서 무엇이 필요한지 정하고 그것을 시험하세요. 도달 가능성이 필요하다면 수신 포트로의 TCP 연결 시도가 어떤 카운터보다 일 초 만에 더 많은 것을 알려 줍니다. 작동하는 터널이 필요하다면 하나를 협상하세요. 쓸 만한 처리량이 필요하다면 연결 시간과 처리량은 다른 속성이고 빠른 핸드셰이크는 두 번째에 대해 아무것도 말해 주지 않으므로, 실제로 무언가를 전송해 측정하세요.

nc -vz -w 5 vpn.example.net 1194
curl -sS -o /dev/null -w '%{time_connect} %{time_appconnect} %{time_total}\n' https://vpn.example.net/
mtr -rwc 20 vpn.example.net

한 번의 시도를 믿는 대신 시험을 반복하세요. 신뢰성은 시간과 조건에 걸친 분포이며, 한 번의 성공적인 연결은 크기 일의 표본입니다. 실제로 연결을 사용하는 시간대에 몇 번 시도하는 것이 공개된 어떤 가동 시간보다 큰 차이로 앞섭니다.

속지 않고 공개 노드 목록 읽기

가동 시간은 사람들이 보통 VPN에서 원하는 것——인증서 유효성, 출구를 누가 운영하는지, 어떤 DNS 정책이 적용되는지, 운영자가 연결 기록을 보관하는지——에 대한 정보도 담지 않습니다. 이것들은 각각의 증거가 필요한 별개의 주장이며, 긴 카운터는 그중 어느 것의 증거도 아닙니다. 노드는 몇 달 동안 안정적이면서도 프라이버시 요구에는 나쁜 선택일 수 있습니다.

목록이 실제로 도움이 되는 지점은 후보를 좁힐 때입니다. 필요하다고 아는 것을 기준으로 정렬하고, 작업과 무관한 지역의 노드를 걸러 낸 뒤, 남은 세 개나 네 개를 시험하세요. «TLS 핸드셰이크 실패»와 «연결되었지만 처리량 없음»은 전혀 다른 결론으로 이어지므로, 단순한 예 또는 아니오 대신 각 시도의 실패 단계를 기록하세요.

경로 성능을 측정하는 프레임워크도 숫자를 모으기 전에 지표, 조건, 방법을 정의하라는 같은 점을 더 엄격한 형태로 제시합니다. 노드 목록에 적용하면 가동 시간 필드는 맥락일 뿐입니다. 여러분이 직접 수행하는 측정이 결정입니다.

관련 글