SpeedyCloud 研发总监李孟:不要让底层细节被上层打败

  • 刘羽飞

2016 年 1 月 4 日

话题:云计算CDNDevOps语言 & 开发架构

随着互联网的发展,对于现代企业来说,DNS 与 CDN 服务的作用正变得愈发重要,网络访问速度决定了前端客户体验,同时也影响着内部业务系统的运行。SpeedyCloud 作为一家新晋 IaaS 云服务供应商,在 DNS 与 CDN 方面同样拥有丰富的实践经验。今年 QCon 上海 2015 上,SpeedyCloud 研发总监李孟作为大会演讲嘉宾,分享了 CDN 服务设计开发实践的心得体会。为了进一步了解技术人在这些研发工作背后的故事,InfoQ 专门现场采访了李孟。

InfoQ:您在 CDN领域的经验已经超过 7年,当时是什么原因进入这个领域的呢?

李孟:进入这个领域完全是因为巧合。刚入职的前两个月,还没有建立比较明确的目标,而公司也没有相应的软件基础,只能靠自己去摸索。当时的困难在于,自己只有一些运维经验,并没有相应研发经验,而且所使用的开源软件也比较复杂。CDN 与 DNS 业务的研发既要保证稳定性,同时又要保证兼容性,还要完成对整个业务线的不间断支撑。

InfoQ:当时在自行研发的过程当中是如何进行考虑与选择的?

李孟:那时选择了 BIND。DNS 毕竟是个轻量级的服务,其开发量并不是很大。但在当时 BIND 已经发布 8 年时间了,因为在开发过程中不断地打补丁,其可读性已经变得非常糟糕,另外为了照顾 DNS 所有业务的性能,那么代码的可读性就会变得更差。

如何让整个 DNS 系统上下游无缝融合在一起?这个问题上我考虑了很长时间,这需要理清 DNS 在实际应用场景中的使用过程,需要结合 CDN 的应用场景,明确应该怎样运作,所含的路径有哪些等问题。之后还要将互联网协议和真实的运行环境结合在一起,这样在业务最终上线的时候,才能够实现良好的效果。

InfoQ:在这次 QCon上海中您的演讲主题是选型方向的,出于什么考虑而安排这样的演讲主题呢?

李孟:首先是让大家了解 CDN 的技术概念,另外一个原因是想要带领大家思考 CDN 对于云计算平台来说充当了什么样的角色。因为如果 CDN 流量调度不当的话,就会导致设备上的流量抖动异常,这对于承载 CDN 业务的云平台也是非常不利的。

流量调度说起来是个很宽泛的概念,如果能用 DNS 将流量调度表达好,就意味着后续的动态调度和静态调度也将会相对容易一些。因此希望能够借助 QCon 的机会分享 CDN 领域里的一些重要经验。

InfoQ:技术工具有理论性能,但是实际用到生产环境中就是另外一回事了。对此您有什么看法?

李孟:之所以进行定制开发,性能上的差异是一个重要原因。性能上不达标,那么实际的表现就会跟测试时的差距比较大了。

另外,开源 DNS 方案的功能相对比较可靠,但也会有一些差异,比如只能做地域性切割,只能做流量均分,因此某些场合下就没办法直接用开源软件。否则一旦流量出现大幅度抖动,后台承载业务的云主机,就将受到冲击。因为这意味着需要采购更多的云服务资源,或者配置要更多的硬件设备,但这些资源的有效利用率并不高,反而还提升了 IT 成本。

结合 CDN 实际应用环境来看,这说明很多时候用户如果只是按照最直接的方式去实施,就会发现实际数据相比于预期目标来说差距很大。

InfoQ:您认为影响 DNS 调度效果的因素都有哪些?同时又该如何评价 DNS 调度效果呢

李孟:智能 DNS 实际上是 CDN GSLB 的表达,表达的好坏效果会直接影响到后续流量调度的难易程度。除了受到 Local DNS 用户规模差异悬殊的影响以外,DNS 流量调度过程中产生的流量抖动还由另外四个原因所决定着,首先部分终端改变了自身的 Local DNS;其次,Local DNS Cache 影响调度生效和失效;第三,Local DNS 涵盖的用户群大小不一;第四,Local DNS 择优行为影响数据对等。

评价 DNS 流量调度效果的指标主要为两个——精度和准度。较高的精度会让调度系统动态调节更容易,设备带宽利用率也会更高,但是在实际 DNS 中的流量比例配值会出现差异,在复杂情况下很难区分开具体的流量配比。而较高的准度则会降低调度系统预测规划的难度,但调度过程中的流量抖动会更严重。对于某些 DNS 流量调度方式来说,有时精度和准度是不可兼得的,因此要可以使用不同的 DNS 流量调度方式,以产生不同的调度精度与准度。

InfoQ:是否还有其他更多类似的误区?应该怎样去避开这些误区?

李孟:很多误区本身比较隐蔽。比如 CDN 使用者将流量均分给两个 CDN 公司时, 会采用 CNAME 分成两支的做法,然而这种做法并不是 DNS 协议里的标准内容,导致的结果就是底层细节被上层打散,每次请求分配不均衡也无规律,流量飘忽不定。

这表明某些看似很直观、很可靠的方式,到了底层就会影响非常大。企业用户去定制特别的流量调度时,正常来说是要按照固定属性确定调度方式的,但有时候用户希望达成定量调度时,就会让调整渗透下去,把定量行为加入到 DNS 里。做 DNS 定量时,其信息是不对等的,DNS 进行调配时,可能会因为访问不对称,而导致调度也不对称。DNS 在调度表达上有时确实有些不合常规,而带来效果有时也是不可预估的。

从 DNS 调度的判断依据来看,不推荐直接使用 DNS 的统计计数数据作为 DNS 调度依据,因为这些解析数据并不可靠,它们都是经过 Local DNS 不稳定的择优选择后产生的,使用这些数据作为调度依据会让调度效果变得不可预估。比较常见的流量调度依据包括固有属性以及无状态属性,固有属性比如有 Local DNS IP 的地域属性,或者网络属性等,而无状态属性则比如有 Local DNS IP 的 Hash 值特征,或者随机值等。

常见的流量调度表达方式包括地区切分、默认等分、随机比例、以及按照 Local DNS IP 切分流量,其中默认等分的方式在调度准度与精度上均有很好的表现,而其余三种则都有各自不同的侧重点。

在决定采用哪种调度方式前,建议技术人员先去结合数据进行分析,在拿到一线的、真实的、完整的数据之后再做相应的调研,总结出相应的规律,通过数据分析明确什么能做,什么不能做,什么想做,什么不想做,最后决定采用哪种调度方式。

InfoQ:能否谈一谈您个人以及 SpeedCloud在 CDN与 DNS方面的未来规划?

李孟:DNS 这方面的业务目前仍然在规划当中,是否以 CDN 为重点,也是有待考虑的。现在只要是做 DNS 功能,就几乎必带 CDN,希望在今后能够形成一个具体产品,为行业发展带来帮助。

关于受访者

李孟现担任 SpeedyCloud 研发总监,目前主要负责资源调度系统的设计与研发工作,为 SpeedyCloud 一站式云服务平台提供技术支撑。李孟曾在蓝汛就职 7 年,专注于 CDN GSLB 及其衍生领域研发与实践,是蓝汛自主研发 CDN DNS 的第一人,在研发与运营分析过程中积累了丰富的行业经验。

云计算CDNDevOps语言 & 开发架构