다운된 건가요, 아니면 나만 그런가요?

다중 관점 검사는 같은 테스트 — ping, HTTP 요청, DNS 조회 — 를 내가 내 네트워크에서 실행하는 바로 그 순간에, 다른 사람들의 네트워크에 있는, 다른 나라의 프로브에서 실행합니다. 그 하나의 변화가 답할 수 없는 질문(“내 쪽에서는 되는데 — 다른 사람도 이걸 보고 있나요?”)을 비교로 바꿉니다. 모든 관점이 실패하면 대상은 다운된 것이고, 내 것만 실패하면 문제는 나와 그 대상 사이의 경로에 살고 있습니다. 이 가이드는 두 번째 관점이 실제로 무엇을 증명하는지, 누구나 한 번은 빠지는 애니캐스트 함정, 그리고 이 사이트의 글로벌 ping으로 검사를 실행하는 방법을 설명합니다.

“내 쪽에서는 된다” 문제

모든 사고 채널은 같은 한 시간 안에 두 문장을 모두 들어본 적이 있습니다. “사이트가 다운됐다”와 “내 쪽에서는 된다”요. 둘 다 솔직한 보고일 수 있습니다. 하나의 관점 — 내 노트북, 내 사무실, 모니터링 기계 한 대 — 에서 실행한 테스트는 정확히 한 가지를 측정합니다. 그 하나의 네트워크가, 그 하나의 경로에서, 그 하나의 순간에 겪은 경험입니다. 모두에게 다운된 서비스와 나에게만 끊긴 경로를 구분할 수는 없습니다. 아픈 트랜짓 제공자, 지역 필터링 규칙, 오염되거나 낡은 답을 돌려주는 DNS 리졸버, 내가 들어본 적도 없는 세 네트워크 너머의 피어링 분쟁이 그렇습니다. 하나의 관점 안에서는 이 모두가 똑같이 보입니다 — 반송 주소 없는 실패입니다.

지원 티켓과 상태 페이지도 같은 기하학으로 고통받습니다. 상태 페이지는 “정상 작동”이라고 말합니다. 제공자 자신의 프로브 — 제공자 자신의 동네에 앉아 있는 — 가 서비스에 문제없이 도달하는 반면, 한 지역 전체는 도달하지 못하기 때문입니다. 사용자는 “다운”이라고 보고합니다. 그의 ISP가 트래픽을 블랙홀로 삼키는 반면 서비스는 잘 돌아가고 있기 때문입니다. 어느 쪽도 거짓말을 하고 있지 않습니다. 둘 다 하나의 의자에서 일반화하고 있을 뿐입니다. 해결책은 같은 의자에서 더 정밀해지는 것이 아닙니다. 의자를 늘리는 것입니다.

두 번째 관점이 증명하는 것

다른 네트워크 — 다른 자율 시스템, 다른 나라, 다른 종류의 연결 — 에 프로브를 추가하고, 동일한 테스트를 그 모두에서 동시에 실행하세요. 이제 패턴이 스스로 주장합니다. 세 대륙 다섯 네트워크의 프로브가 모두 같은 시각에 같은 방식으로 실패하면, 공통 요인은 대상입니다. 서비스, 그 호스트, 또는 그 자체의 네트워크가 다운된 것이고, 아무리 로컬에서 만지작거려도 그것은 바뀌지 않습니다. 네 개가 성공하고 내 상황과 가장 가까운 프로브만 실패하거나 — 나만 실패하면 — 공통 요인은 뒤집힙니다. 대상은 살아 있고, 단절은 실패한 관점들이 공유하는 경로 어딘가에 있습니다. 독립적인 관점들 사이의 일치가 “다운됐는가?”라는 질문이 가질 수 있는 증명에 가장 가까운 것입니다.

이 사이트가 사용하는 프로브는 jsDelivr가 운영하는 Globalping 네트워크에 속합니다. 전 세계 자원봉사자들이 호스팅하는 수천 개의 작은 소프트웨어 프로브로, 데이터 센터 서버부터 가정용 연결까지 모든 곳에 있으며, 표준화된 측정 — ping, traceroute, MTR, DNS, HTTP — 을 받아 자기가 본 것을 보고합니다. 가치는 어느 하나의 프로브에 있지 않습니다. 한 도시의 자원봉사 기계는 일화입니다. 가치는 그 일화들이 독립적이라는 데 있습니다. 서로 다른 네트워크, 서로 다른 업스트림, 서로 다른 장애 모드가 모두 같은 시각에 같은 질문에 답하고 있습니다.

애니캐스트와 CDN 주의사항

여기에 함정이 있고, 누구나 한 번은 빠집니다. 서로 다른 장소에서의 서로 다른 답이 모두 옳을 수 있습니다. 현대의 서비스는 한 장소의 한 기계가 아닙니다. 애니캐스트는 같은 주소를 여러 위치에서 광고하므로, 프랑크푸르트의 프로브와 상파울루의 프로브가 “같은” IP로 패킷을 보낼 때, 대화 상대는 서로 다른 물리적 에지이며, 어쩌면 서로 다른 인프라 대륙 위에 있습니다 — 하나는 건강하고, 하나는 재시작 중입니다. CDN은 각 클라이언트를 가까운 에지로 안내하고, 에지는 한 지역에서는 다운되어 있어도 서비스는 다른 곳에서는 완벽할 수 있습니다. 프로브 사이의 차이는 자동으로 모순이 아닙니다. 애니캐스트 대상에게 차이는 설계가 의도대로 작동하는 것이며, 질문은 “다운됐는가?”가 아니라 “어디서 다운됐는가?”가 됩니다.

DNS는 반대쪽에서 같은 점을 말합니다. 권한 서버와 리졸버는 설계상 서로 다른 답을 건넵니다 — GeoDNS는 “가장 가까운” 에지의 주소를 돌려주고, EDNS 클라이언트 서브넷은 리졸버가 내 동네를 대신해 물을 수 있게 하므로, 도쿄의 프로브 리졸버와 텍사스의 것은 같은 이름에 대해 합법적으로 서로 다른 주소를 받습니다(질문이 세계가 어떤 레코드를 가지고 있는가라면, DNS 전파 검사기로 나란히 비교하세요). 서로 다른 프로브에서의 서로 다른 주소는 불일치의 증거가 아닙니다. 그 이름이 현지화를 하고 있다는 증거이며 — 각 지역의 사용자가 실제로 어떤 에지를 만날지를 알려줍니다.

질문에 답하는 측정을 고르세요

글로벌 ping은 다섯 가지 측정 유형을 제공하며, 잘 고르는 것이 많이 실행하는 것보다 중요합니다. 각각은 서로 다른 질문에 답하고, 잘못된 것을 실행하면 내가 묻지 않은 것에 대한 자신감 있는 답이 나옵니다. 누구의 결과를 보기 전에 유형을 증상에 맞추세요.

Ping은 가장 좁은 질문에 답합니다. 대상이 여기서 도달 가능한가, 그리고 가는 길에 얼마나 손실되는가? “이 네트워크가 저 호스트를 아예 볼 수 있는가”에 대한 올바른 테스트이고, 애플리케이션에 관한 모든 것에 대한 잘못된 테스트입니다 — 호스트는 웹 서비스가 죽어 있어도 ping에 답할 수 있습니다. HTTP는 사용자의 질문에 답합니다. 실제 요청이 저기서 성공하는가, 상태 코드는 무엇인가, 전체가 얼마나 걸렸는가? 논쟁이 “사이트 된다 / 사이트 안 된다”라면, 여러 프로브에서의 HTTP가 양쪽이 모두 받아들여야 할 증거입니다. DNS는 이름 질문에 답합니다. 각 지역이 이 이름에 대해 실제로 어떤 주소를 받는가? “서비스가 다운됐다”와 “내 지역이 죽은 에지로 보내지고 있다”를 가르는 방법입니다.

Traceroute는 어디인가의 질문에 답합니다. 홉마다, 이 프로브에서 대상까지의 경로가 어디서 멈추고, 막히고, 예상치 못한 곳으로 꺾이는가? 작동하는 관점이 아니라 실패하는 관점에서 실행하세요. MTR은 시간에 걸친 traceroute입니다 — 같은 경로를 반복해서 탐색하므로 손실과 지연이 하나의 얼어붙은 표본이 아니라 홉별 비율로 나타납니다. “간헐적으로 끊긴다”를 위한 도구로, 그 경우 단일 traceroute는 경로의 얌전한 날을 포착합니다. 다섯 가지 모두에 통하는 규율: 어떤 장애를 테스트하는지 정하고, 그것을 볼 수 있는 단 하나의 측정을 고르고, 나머지는 기다리게 하세요.

자신을 속이지 않고 결과 읽기

사람들이 습관적으로 합치는 두 숫자를 분리하는 것부터 시작하세요. 손실 — 결코 돌아오지 않은 요청 — 은 손상이고, 지연 — 느리게 돌아온 요청 — 은 불편함이며, 둘은 원인과 해결책이 다릅니다. 100% 손실을 보이는 프로브는 벽을 찾은 것이고, 손실이 없고 지연이 높은 프로브는 길거나 혼잡한 길을 찾은 것이며, 후자를 “다운”이라고 보고하는 것이 건강한 서비스가 한밤중에 깨는 방법입니다. 그런 다음 같은 것끼리 비교하세요. 최고도 최악도 아닌 중앙값 프로브를 이야기로 삼으세요. 하나의 프로브가 터무니없는 이상값 — 엄청난 지연, 아무도 보지 못한 시간 초과 — 을 돌려주는 것은 그 프로브의 그 순간, 그 호스트, 또는 그 업스트림에 대한 진술입니다. 독립적인 프로브들이 그것에 동의할 때만 대상에 대한 증거가 됩니다.

장부도 챙기세요. 이웃들이 성공하는데 대상을 “오프라인”이라고 보고하는 하나의 프로브는 가장 가능성 높게 자기 자신을 보고한 것입니다 — 충돌한 프로브, 끊긴 가정용 연결, 로컬 필터 — 그리고 자원봉사 프로브에는 그 모두가 있습니다. 그게 아무도 중앙에서 운영하지 않는 네트워크의 대가입니다. 타임스탬프를 기록하고, 낡거나 캐시된 결과는 뉴스가 아니라 역사로 취급하세요. 그리고 모든 프로브가 대상이 살아 있다고 동의하는데도 내 사용자가 여전히 도달하지 못한다면, 둘 다 믿으세요. 장애가 실재하고 또 좁다는 것을 배운 것입니다 — 그것은 내 프로브 중 어느 것도 우연히 공유하지 않은 경로에 살고 있으며, 그것은 발견이지 모순이 아닙니다.

솔직한 한계

프로브는 자원봉사자들이고, 네트워크의 행동도 그렇습니다. 프로브는 오고 갑니다 — 오늘 아침에 쓸 수 있던 위치가 오늘 밤에는 오프라인일 수 있고, 커버리지는 어떤 나라에서는 빽빽하고 다른 나라에서는 존재하지 않을 만큼 얇으며, 내 사용자가 거기 있다는 이유만으로 특정 ISP 안의 프로브를 요구할 수 없습니다. 프로브의 자리도 대부분 데이터 센터와 애호가 연결이지, 실제 사용자가 탐색하는 주거용·모바일 네트워크가 아닙니다. 데이터 센터 프로브는 서비스가 잘 연결된 곳에서 도달 가능하다는 것을 증명하는데, 그것은 질문의 대부분이지만 전부는 아닙니다. 지도는 너그럽게 그려진 세계 네트워크의 표본으로 취급하세요 — 세계 자체로 취급하지 마세요.

이 사이트의 이 네트워크 사용은 의도적으로 겸손합니다. Globalping의 익명 공유 무료 티어에서 실행되므로, 검사에는 방문자별 제한이 따르고 결과는 자원봉사 자원을 두드리는 대신 잠시 캐시됩니다 — 검사가 기다리라고 한다면, 그것은 공유 티어가 공유되고 있는 것입니다. 그 제한 안에서 작업 패턴은 이렇습니다. 먼저 여기서 다중 관점 검사를 실행해 “다운인가, 나만인가”를 가름하고, 그런 다음 승자 쪽을 깊이 파세요 — 사이트를 한 번 자세히 들여다보는 것이 알려줄 수 있는 모든 것에 대해서는 웹사이트 상태 검사를, 그리고 무언가를 바꾼 뒤에는 글로벌 ping에서 새 라운드를 실행하세요. 모두에게 다운과 나에게만 다운은 서로 다른 오후를 필요로 합니다. 다른 사람들의 관점 10분이 내가 어떤 오후를 보내고 있는지 아는 방법입니다.

자주 묻는 질문

몇 군데 위치에서 테스트해야 하나요?

이 도구는 검사당 최대 네 군데까지 실행하며, 잘 고른 네 곳이 무작위로 고른 마흔 곳을 이깁니다. 논쟁에 맞는 분포를 고르세요. 내 사용자와 가까운 프로브 하나, 다른 대륙의 것 하나, 대상의 호스팅과 가까운 것 하나, 그리고 대조군으로 멀리 있는 아무 곳 하나요. 가까운 프로브와 먼 프로브가 동의하면 답을 얻은 것이고, 가까운 것만 실패하면 문제를 국소화하기도 한 것입니다. 위치를 더 늘리는 것은 처음 네 개가 아직 읽을 수 없는 패턴으로 어긋날 때 주로 도움이 됩니다.

프로브가 오프라인이라고 합니다 — 사이트가 다운된 건가요?

그 증거만으로는 아닙니다. 하나의 프로브는 그 자체가 오프라인일 수 있습니다 — 충돌했거나, 연결이 끊겼거나, 자기 필터 뒤에 있거나 — 그리고 자원봉사 프로브에는 그것을 보장할 운영자가 없습니다. “다운”은 일치에서 끌어내는 결론입니다. 서로 다른 네트워크의 여러 독립 프로브가 같은 시각에 같은 방식으로 실패하는 것이죠. 이웃들이 성공하는데 하나의 프로브가 실패하는 것은 그 프로브의 경로에 대해 말하는 것이고, 솔직한 보고는 “다운”이 아니라 “그 하나의 관점에서는 도달할 수 없음”입니다.

왜 같은 도메인이 프로브마다 서로 다른 주소로 해석되나요?

그렇게 작동하게 되어 있기 때문입니다. GeoDNS와 EDNS 클라이언트 서브넷은 DNS 답이 쿼리가 어디서 오는 것처럼 보이는지에 따라 달라지게 하므로, 각 지역에는 가장 가까운 건강한 에지의 주소가 건네집니다. 애니캐스트와 CDN도 라우팅 층에서 같은 속임수에 의존합니다. 서로 다른 프로브에서의 서로 다른 주소는 현지화가 제 일을 하는 것입니다. 그것이 발견이 되는 것은 한 지역의 주소는 죽어 있는데 다른 것들은 작동할 때뿐입니다 — 그때 그 이름은 그 지역의 사용자를 충실히 고장 난 에지로 보내고 있는 것입니다.