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

随着互联网的发展,对于现代企业来说,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,希望在今后能够形成一个具体产品,为行业发展带来帮助。

\
\\\\

关于受访者

\\

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot 关闭懒加载_SpringBoot新手入门篇

SpringBoot是干哈的介绍:springboot是由Pivotal团队提供的全新框架。spring的出现是为了解决企业级开发应用的复杂性,spring的通过注册bean的方式来管理类,但是随着业务的增加,使用xml配置bean的方式也显得相当繁琐,所…

java.security.key jar_异常: java.security.InvalidKeyException: Illegal key size

今天在做接口测试的时候遇到个异常:java.security.InvalidKeyException: Illegal key size。SecretKeySpec secretKeySpec new SecretKeySpec(aesKey, "AES");Cipher cipher Cipher.getInstance("AES/CTR/NoPadding");IvParameterSpec ips c…

CACTI 0.87e 安装

Cacti 是一个使用 RRDtool 引擎的基于网页的 PHP/MySql 图形解决方案。 Classically, 它可以使用 SNMP 来绘制网络带宽。但事实上,也可以通过 snmp,shell 或者 perl 脚本来绘制很多不同的图形。在 屏幕截图 部分,你可以浏览使用 Cacti 可以绘…

NodeManager启动流程与服务

本文介绍了NodeManager的启动流程与服务. NodeManager主流程 在main方法中new一个 NodeManager, 然后初始化并启动. 这里主要看initAndStartNodeManager方法. 首先是增加一个shutDownHook, 即CompositeServiceShutdownHook, 它的目的是为了在NodeManager crash的时候停止compos…

Unity3D的断点调试功能

这篇文章介绍的调试工具是Unity自带的MonoDevelop, 假设要用VS,须要下载unityvs http://unityvs.com/. http://liweizhaolili.blog.163.com/blog/static/162307442013214485190/ 断点调试功能可谓是程序猿必备的功能了。Unity3D支持编写js…

java模拟器分辨率_android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项...

1 Android手机目前常见的分辨率1.1 手机常见分辨率:4:3VGA 640*480 (Video Graphics Array)QVGA 320*240 (Quarter VGA)HVGA 480*320 (Half-size VGA)SVGA 800*600 (Super VGA)5:3WVGA 800*480 (Wide VGA)16:9FWVGA 854*480 (Full Wide VGA)HD 1920*1080 High D…

python中if else语句用法_Python中if-else语句的多种写法

原博文 2017-02-06 10:24 − 初学Python在看程序时发现python中if-else的多种写法,故对其进行分析。 以下为网络内容: a, b, c 1, 2, 3 1.常规 if a>b: &nb... 相关推荐 2019-11-13 15:13 − if x A: do something for A elif x B: do somethi…

Javascript中最常用的55个经典技巧

1. οncοntextmenu"window.event.returnValuefalse" 将彻底屏蔽鼠标右键<table border οncοntextmenureturn(false)><td>no</table> 可用于Table 2. <body onselectstart"return false"> 取消选取、防止复制 3. οnpaste"…

Reflux系列01:异步操作经验小结

写在前面 在实际项目中&#xff0c;应用往往充斥着大量的异步操作&#xff0c;如ajax请求&#xff0c;定时器等。一旦应用涉及异步操作&#xff0c;代码便会变得复杂起来。在flux体系中&#xff0c;让人困惑的往往有几点&#xff1a; 异步操作应该在actions还是store中进行&…

mysql 存储过程月单拆天单_MySQL之存储过程按月创建表的方法步骤

具体不多说&#xff0c;直接上代码。欢迎一起交流和学习。创建一个按月创建表的存储过程&#xff0c;SQL语句如下:DELIMITER //DROP PROCEDURE IF EXISTS create_table_by_month //CREATE PROCEDURE create_table_by_month()BEGIN#--提前申明变量,后面会用到DECLARE nextMonth …

python转换成c语言_把python转成c

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; 推荐使用腾讯云 api 配套的7种常见的编程语言 sdk&#xff0c;已经封装了签名和请求过程&#xff0c;均已开…

开源技术选型手册

目录 第1章 闲话开源社区篇 第2章 Web框架篇 2.1 Struts 2.2 Spring 2.3 Seam 第3章 开源Web服务器 3.1 Apache 3.2 Lighttpd 3.3 Nginx 第4章 应用服务器篇 4.1 JBoss 4.2 Geronimo 4.3 JFox 第5章 开发平台篇&#xff08;IDE&#xff09; 5.1 Eclipse 5.2 NetBeans 第6章 动态…

UVA 1156 - Pixel Shuffle(模拟+置换)

UVA 1156 - Pixel Shuffle 题目链接 题意&#xff1a;依据题目中的变换方式&#xff0c;给定一串变换方式&#xff0c;问须要运行几次才干回复原图像 思路&#xff1a;这题恶心的一比&#xff0c;先模拟求出一次变换后的相应的矩阵&#xff0c;然后对该矩阵求出全部循环长度&am…

java 字体名字_JAVA:获取系统中可用的字体的名字

import java.awt.*;public class GetLocalFontFamily{public static void main(String[] agrs){//获取系统中可用的字体的名字GraphicsEnvironment e GraphicsEnvironment.getLocalGraphicsEnvironment();String[] fontName e.getAvailableFontFamilyNames();for(int i 0; i…

document.getElementsByName 标准

document.getElementsByName w3c 标准中&#xff1a; 是获得name属性获得元素 IE 中&#xff1a;是通过ID属性获得元素转载于:https://www.cnblogs.com/chen-lei/archive/2009/12/29/1635343.html

python逐行写入csv_python将列表按行写入csv

原博文 2020-05-14 13:17 − import csv rows2 [abc1/ab1c,N] for n in range(10): f open("ok.csv", a,newline) writer csv.writer(f) writer.writerow(rows2) f.cl...02349 相关推荐 2019-12-18 14:42 − 逗号分隔值&#xff08;Comma-Separated Values&#x…

怎么和产品沟通

去别的地方以后和产品交流 随意点 都是给公司打工 你背后骂骂没事&#xff0c;当面和气点 恩 以后碰这样的情况 你就答应着 最后做不完&#xff0c;责任也不是你的 做多少是多少呗 就把情况说清楚 说不保证做完 就行 话不说死 产品告不了状 怎么办哦&#xff1f;切记你是没有…

java循环单链表比较相等_java的循环单链表

packageclink;//循环单链表public classTestClink {public static voidmain(String[] args) {//TODO Auto-generated method stubClink t1 newClink();for(int i 0;i<9;i){t1.insertHead(i);}t1.show();int lent1.getlength();System.out.println(len);System.out.println…

第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动 8

这个方法所做的事情就是:446行: 首先通过Device类的executeShellCommand方法发送类似”adb shell getprop”的命令去获得所有支持的系统属性&#xff0c;这个方法最终调用的是AdbHelper类的executeShellCommand方法&#xff0c;它会接收一个专门用来对指定shell命令如getprop的…

新手买车的九大原则

汽车俨然已经成为了人们生活中不可缺少的助手。放眼市场&#xff0c;汽车的品牌、车型、颜色、配置&#xff0c;划分的类别太多太多&#xff0c;让众多爱车友人在购车时眼花缭乱。由于厂家、商家片面的宣传和误导以及购车者思想上或这样或那样的误区&#xff0c;使众人面对购车…