9P by kunggom 2020-03-22 | favorite | 댓글 7개

페이스북이 time.facebook.com 주소로 새로운 NTP 시간 서비스를 공개했습니다. 다른 공개 시간 서비스보다 정확도가 높으며, IP 주소로 사용자를 식별하지 않는다고 합니다. 또한 페이스북은 이 서비스와 관련한 글을 자사 엔지니어링 블로그에 올렸습니다. (영어)

페이스북과 같은 대형 IT기업이 시간 서비스에 관심을 가지는 것은 바로 분산 시스템 운영 때문입니다. 분산 데이터베이스의 트랜잭션을 처리하거나 올바른 로깅을 보장하기 위해서는 여러 서버들이 높은 정밀도로 시계를 동기화하고 있어야 하지요.

페이스북은 Stratum 1(인공위성의 원자시계로부터 직접 시간정보를 수신받는 기기)인 전문 테스트 장비를 구입하여 기존에 흔히 시간 서버로 사용하던 ntpd와 상대적으로 새로운 NTP 데몬인 chrony( https://chrony.tuxfamily.org/ )를 비교하는 벤치마크를 실시했습니다. ntpd는 최초 시작 후 일시적으로 -10 ms의 오차를 낸 뒤 점차 ±1 ms의 오차로 수렴하였으나, chrony는 대부분의 오차가 계속 ±0.2 ms 이내에 있어서 ntpd보다 훨씬 정확한 모습을 보였습니다.

chrony에는 다른 장점도 있습니다. 바로 하드웨어 타임스탬프를 지원한다는 것이죠. 시간 동기화 프로토콜인 NTP는 서버와 클라이언트 사이에서 패킷이 오갈 때마다 타임스탬프를 찍어 오갈 때 걸린 시간차를 계산하는 방법으로 최대한 정확한 현재 시각을 도출하려 합니다. 그런데 실시간 운영체제가 아닌 경우에는 어떤 처리에 걸리는 지연시간이 일정 수준 이하라는 것을 보장할 수 없지요. 이는 NTP에서도 마찬가지로, 네트워크로 시간을 동기화할 때 오차가 커지는 원인 중 하나가 됩니다.

그런데 일부 NIC(랜카드)에서는 하드웨어 타임스탬프 기능을 지원합니다. 이 기능은 NIC에서 별도의 하드웨어를 통해 자체 클럭을 유지하며 타임스탬프 처리를 하는 것인데, 처리 지연시간이 불과 몇 나노초 수준에 불과하지요. 만약 로컬 네트워크 환경이고 NTP 서버와 클라이언트가 모두 하드웨어 타임스탬프를 지원하는 이상적인 상황이라면 1마이크로초 미만의 오차로 시간 동기화를 할 수도 있다고 합니다. 실제 시간 서비스는 로컬 네트워크 환경이 아니고 클라이언트 쪽 NIC가 하드웨어 타임스탬프를 지원하지 않는 경우도 있으니 그 정도까지 바랄 수는 없겠지만, 어쨌든 chrony와 하드웨어 타임스탬프 기능을 조합하여 벤치마크한 결과 대부분의 시간 동기화 오차가 ±0.1 ms 안에 들어왔다고 합니다.

그래서 페이스북은 chrony에 하드웨어 타임스탬프를 활성화한 설정으로 공개 시간 서비스를 한다고 합니다. 구글이나 애플 등 다른 공개 시간 서버는 제공하는 시간의 오차가 ±2 ms를 넘기기도 하는데, 페이스북의 서비스는 ±1 ms 안쪽인 경우가 대부분이라는군요. 참고로 이 서비스는 서로 다른 5곳의 지역에 엔드포인트를 두고 운영됩니다. 자세한 것은 글 원문을 참고하세요.

와우. 흥미로운 글이었습니다. 정밀함을 위한 노력이 간략(?)하면서도 상세하게 공유되었네요. 이 글 읽고 맥의 NTP 서버를 time3.facebook.com 으로 변경하였습니다.

저는 time1.facebook.com 을 쓰고 있습니다. ping을 날려 보니 2번부터 5번까지의 다른 엔드포인트는 핑이 안 날아가거나 혹은 상당히 느리더군요. chrony에서 time1.facebook.com 을 시간 서버로 설정하니까 예상 오차가 ±1 ms를 조금 넘는 것으로 나옵니다. 그냥 time.facebook.com 을 설정하면 시간을 못 받아오더라고요.

참고로 다른 시간 서버, 예를 들면 time.google.com 이나 time.windows.com 같은 곳은 예외 없이 오차가 30 ms 이상으로 나옵니다. 이는 kr.pool.ntp.org 같은 NTP 풀도 마찬가지고요. 그나마 지금까지 본 시간 서버 중 가장 시간 오차가 작은 것으로 나온 것이 Stratum 1 서버인 ntp.postech.ac.kr 인데, 이건 chrony에서 ±5 ms 정도로 추정하더라고요.

최근에 chrony에서 time.apple.com을 Pool로 잡으면 한국과 일본에 있는 높은 정밀도의 NTP 서버가 잡힌다는 걸 알게 되었습니다. 무려 Stratum 1이라고 나오더군요. 애플은 자기네 CDN 서버에다가 GPS 수신기를 달아서 타임서버로 쓰는 모양입니다.

와 재밌네요. at Facebook scale 이란 단어가 이제는 익숙해 지네요.

딴 이야기인데요, GeekNews의 트위터에는 이 글이 안 올라가 있던데 혹시 트위터 봇이 올리는 뉴스에 조건이 따로 있나요?

아 확인해보니 글자수 체크해서 잘라서 올리는 부분에서 내용 맨앞에 들어있는 url 때문에 자동 링크로 변환되면서 글자수 초과로 트위터 api에서 에러를 냈네요 ㅠ

트위터는 url은 무조건 22바이트인가로 변환을 합니다

이 부분은 수정을 해야할듯 하네요 흑