案例分析:闰秒带来的BUG是否影响了你?

闰秒如何影响了IT世界?在2016年底我们写下的文章里曾经提到2017开年多出这一秒,大家是否平稳度过?欢迎大家留言讲诉你遇到的真实故事。

毫无疑问,根据墨菲定律,可能出现问题的地方就必定会出现问题,只不过何时、何地、何人,就不得而知。根据网上的消息,硅谷的Cloudflare公司的服务确实因为闰秒遭遇到BUG,进而影响了部分用户的域名解析。Cloudflare以向客户提供网站安全管理、性能优化及相关的技术支持为主要业务。

问题的原因出在 Cloudflare 的RRDNS软件内部,一个Number的最小输出结果应该为零,结果在闰秒时变成了负数。

A little later this negative value caused RRDNS to panic. This panic was caught using the recover feature of the Go language.

最终影响就是,Cloudflare 为托管网站提供的一些DNS解析以失败告终。

看看这段程序代码,如何因为一秒而产生了错误。在这段代码中,当 time.Now() 早于早前同样获得的 start 值,则可能返回负数。

这段代码在时间一直向前时工作正常,然而当时间回调时,就出现了问题。1秒虽然很短,但是在Cloudflare的服务请求中,请求的响应是毫秒级别的。

// Update upstream sRTT on UDP queries, penalize it if it fails if !start.IsZero() { rtt := time.Now().Sub(start) if success && rcode != dns.RcodeServerFailure { s.updateRTT(rtt) } else { // The penalty should be a multiple of actual timeout // as we don't know when the good message was supposed to arrive, // but it should not put server to backoff instantly s.updateRTT(TimeoutPenalty * s.timeout) } }

解决的代码只修改了一行,判断了小于0的情况。

当然 Cloudflare 的响应是非常迅速的:

2017-01-01 00:00 UTC Impact starts 2017-01-01 00:10 UTC Escalated to engineers 2017-01-01 00:34 UTC Issue confirmed 2017-01-01 00:55 UTC Mitigation deployed to one canary node and confirmed 2017-01-01 01:03 UTC Mitigation deployed to canary PoP and confirmed 2017-01-01 01:23 UTC Fix deployed in most impacted PoP 2017-01-01 01:45 UTC Fix being deployed to major PoPs 2017-01-01 01:48 UTC Fix being deployed everywhere 2017-01-01 02:50 UTC Fix rolled out to most of the affected PoPs 2017-01-01 06:45 UTC Impact ends

下图显示了Cloudflare 监控的接入解析错误率,修复程序部署后,错误率迅速下降。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-01-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码农之路_构建基础

基于汇编的 C/C++ 协程 - 背景知识

近几年来,协程在 C/C++ 服务器中的解决方案开始涌现。本文主要阐述以汇编实现上下文切换的协程方案,并且说明其在异步开发模式中的应用。

1633
来自专栏青蛙要fly的专栏

项目需求讨论-APP手势解锁及指纹解锁

好久没写文章了,最近也比较偷懒,今天继续讨论我实际开发中遇到的需求,那就是关于APP解锁,大家都知道。现在越来越多的APP在填入账号密码后,第二次登录后,基本不...

442
来自专栏张善友的专栏

利用 Microsoft StreamInsight 控制较大数据流

原文地址:http://msdn.microsoft.com/zh-cn/magazine/hh205648.aspx 下载代码示例 生产线的产量下降后,将...

1736
来自专栏星汉技术

计算机基础(二)

1568
来自专栏架构师小秘圈

Storm极简教程

八卦 Storm的作者是Nathan Marz,Nathan Marz在BackType公司工作的时候有了Storm的点子并独自一人实现了Storm。在201...

3415
来自专栏Timhbw博客

iOS面试中被面试官问到的问题答案(一)

2016-03-1016:30:14 发表评论 1,091℃热度 1.请你谈谈static和宏定义的区别。什么时候用static什么时候用宏定义。 让你声...

3928
来自专栏王亚昌的专栏

Go语言入门之路

Go is designed from first principles to advance the practice of software enginee...

1425
来自专栏owent

理解和适配AEAD加密套件

按照维基百科的说法。AEAD的全称是Authenticated encryption (AE) and authenticated encryption wit...

602
来自专栏程序人生

思考,快与慢

吐槽:GitBook editor 有个二B的设计-当它莫名检测出文件被外星人修改后,会弹个无法取消的对话框-检测出外部修改,ignore? discard? ...

2727
来自专栏小樱的经验随笔

设计模式六大原则(3):依赖倒置原则

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过...

2628

扫描关注云+社区