案例分析:闰秒带来的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 条评论
登录 后参与评论

相关文章

来自专栏工科狗和生物喵

【闲来无事,py写game】一个问答游戏Trivia -来自《Python游戏编程入门》

正文之前 嗯,没错,我只是为了规范化,就写这么多了!要洗澡了,明早有事! ? 正文 Trivia是一款书籍阅读类软件,支持Android 2.3.3。具体的...

3977
来自专栏星流全栈

什么是「设计模式」?

1023
来自专栏游戏开发那些事

【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画

本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。

1582
来自专栏java工会

用JS编写一个Java虚拟机?谈谈哗众取宠的BicaVM

今日目睹某网络新闻,开篇明义便包含如下几行文字 【程序员Artur Ventura,这位超级大牛,用JavaScript写了一个java虚拟机BicaVM】 ...

740
来自专栏Coding迪斯尼

VUE+Webpack游戏设计:增加游戏战略性平衡和实现资源预加载

943
来自专栏逍遥剑客的游戏开发

UE4中的DynamicTexture数据更新

33011
来自专栏编程

Immutable.js 到底值不值得用?

导语 我是一个前端开发人员,拥有四年工作经验,目前在一个大型软件团体里工作,制作一个以React框架和Redux库为基础建立起来的新单页程序。 创作一个前所未有...

3965
来自专栏jouypub

Redis百亿级Key存储方案

该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关...

1186
来自专栏逸鹏说道

分享一个Mvc的多层架构,欢迎大家拍砖斧正

多层架构是什么? 多层架构是开发人员在开发过程当中面对复杂且易变的需求采取的一种以隔离控制为主的应对策略,关于多层架构的标准,我认为有一句话是比较有代表性的“每...

2729
来自专栏数据之美

深入分析诡异的 Excel 求和统计缺失问题

1、背景 昨天有同学在用 Excel 做数据统计时偶然发现 Excel 会少算一些数据,而且这个坑让这位同学排查了很久才确认不是自己统计程序错误而只是 Exce...

19510

扫码关注云+社区