이제 '윤초'는 과거로 남겨둘 때가 되었다
(engineering.fb.com)- 윤초(Leap Second)는 지구 자전속도 때문에 생기는 UT1(세계시) 과 UTC의 차이를 보정하기 위해 도입됨
- 이는 UTC를 천체 관측등 다양한 목적으로 사용할 수 있게 해주기 때문에 과학자와 천문학자에게 주로 도움이 됨
- UTC를 수정하지 않으면 천문 관측을 위해 UTC와 동기화 되는 레거시 장비 및 소프트웨어를 보정 해야함
- 윤초가 제안된 후 현재까지, UTC는 총 27번 수정 되었음
- 윤초는 1972년도엔 과학계 및 통신업계를 모두 만족시키는 수용할만한 솔루션이었지만, 현재는 UTC는 디지털 어플리케이션 및 과학자 모두에게 좋지 않음
→ 그들은 종종 TAI(International Atomic Time, 국제원자시)나 UT1을 선택함 - Meta 는 향후 윤초 도입을 중단하고 현재 수준인 27을 유지하기 위한 업계의 노력을 지원하고 있음
- 새로운 윤초를 도입하는 것은 득보다 실이 많은 위험한 관행이며, 이를 대체할 새로운 기술을 도입해야 할 때라고 생각
Leap of Faith
- 지구 자전의 불규칙성에 기여하는 많은 요인 중 하나는 세계에서 가장 높은 산들의 만년설이 계속해서 녹고 다시 얼어 붙는 것
- 이것은 회전하는 피겨스케이터를 생각해보면 쉽게 시각화 가능
- 지금까지는 양의 윤초만 있었기에 단순히 23:59:59 와 00:00:00 사이에 23:59:60 이라는 추가 초만 넣으면 되었지만,
지구의 자전 패턴이 바뀌면서 미래의 어느 시점에서는 음의 윤초가 발생할 가능성이 높음
그러면 23:59:58 다음에 00:00:00 이 되어야 함. - 이 음의 윤초가 주는 영향에 대해서는 대규모로 테스트 된 적이 없으며, 타이머나 스케줄러에 의존하는 소프트웨어에는 치명적인 영향을 미칠 수 있음
Smearing
- 더 최근에는, 단순히 시계를 늦추거나 빠르게 하여 윤초를 서서히 '입히는(Smear)'게 관행이 되었음
- 이 작업을 수행하는 보편적인 방법은 없지만, Meta 에서는 윤초를 00:00:00 부터 17시간에 걸쳐서 Smear함
- 수백대의 NTP 서버들이 같이 Stratum 2에서 진행하므로, 너무 크게 Smearing 하면 NTP 클라이언트들이 오류가 있다고 판단해서 Quorum 에서 빼버리게 되고 이건 Outage가 될 가능성이 있음
- 00:00:00 에서 시작하는 것도 표준화 된것은 아니어서, 여러 옵션이 있을 수 있음
→ 예를 들어, 특정회사는 12:00:00 UTC 에서 시작해서 24시간동안 진행할 수도 있음 - 또한 Smearing 자체에도 다른 알고리듬들도 있음 : 커널 윤초 보정, Linear Smearing, Quadratic(Meta가 사용하는 것)
- 이 모든 일들은 Meta 의 고유한 Time Appliance를 비롯해서 중요한 변환 로직이 필요함
- 이 Smearing 기간 동안 NTP 서버가 재시작 되면 "Old" 와 "New" 시간들이 클라이언트에게 가면서 Outage가 생길수 있음
The negative impact of Leap Seconds
- 윤초와 그 오프셋은 업계 전체에 문제를 일으킴
- Outage가 발생하는 가장 쉬운 방법은 시간이 항상 앞으로만 간다고 생각하고 코딩하는 것
start := time.Now()
// do something
spent := time.Now().Sub(start)
- 위의 spent 가 어떻게 사용되는지에 따라 윤초기간중에 음수가 발생할 수도 있음
- Reddit은 2012년에 윤초 때문에 대규모 중단이 발생했고, 사이트가 30~40분동안 접근이 불가능 했음
- Cloudflare는 2017년에 회사의 공용 DNS에 미치는 영향에 대해서 상세한 글을 게시 했음
Moving beyond the leap second
- 윤초 이벤트는 업계 전반에 걸쳐 문제를 일으키고 계속해서 많은 위험을 내포하고 있음
- 현업에서 우리는 윤초가 도입될 때 마다 문제에 부딪힘
- 그리고 매우 드문 사건이기 때문에 발생할때마다 커뮤니티들이 황폐화 됨
- 모든 산업분야에서 시계 정밀도에 대한 수요가 증가하면서, 윤초는 이제 득보다 실이 많고, Outage를 초래
- Meta의 엔지니어로서, 우리는 향후 윤초 도입을 중단하고 다음 천년동안 충분할 것으로 생각하는 현재 수준인 27을 유지하기 위해 큰 지원을 하고 있음
와 엄청 재미난 주제내요! 근데 으음… 윤초를 넣는게 큰 일이라는 건 알겠는데 27초를 유지하기 위해서 어떤 큰 노력을 하고 있는지 이해를 못했어요.