安全、HTTPS、自定义、自助配置……CDN未来不可忽略的趋势|专访又拍云架构师张聪
EGO:先简单介绍一下自己吧?
张聪:我4年前加入又拍云,之后一直从事CDN领域的工作,非常有幸经历了又拍云CDN从早期起步比较简陋、用户量比较少的阶段,到今天业务量不断扩大、技术体系不断变革完善的整个发展过程。
最早团队小的时候,什么事都需要自己去做,像写代码、上线、运维等都得一个人搞定,现在CDN团队不断扩大,除了技术之外,我也开始负责一些管理团队的工作,虽然中间也遇到了很多问题,但也收获了很多经验,也是跟着公司的变大不断去适应不同的挑战。
引入ngx_lua、二次开发、开源
EGO:能分享一下您在又拍云最有成就感的事情吗?
张聪:公司成立以来,又拍云业务一直在不断快速扩张,在这个从小变大的过程中,肯定需要对架构进行改造和升级,否则就无法承受业务的增长,所以我们曾面临了一些技术选型的问题。
最早的时候,又拍云CDN用Nginx C模块进行业务开发,但它的维护成本很大。我们作为一家创业公司,就想选择开发尽可能方便、效率尽可能高的技术,经过多方考量之后,我们引入了ngx_lua项目。虽然当时ngx_lua在国内没那么普及,应用也还不是很广泛,但我们觉得它非常符合我们的需求,就把它引入到了又拍云的CDN开发框架里了。
在创业公司,技术选型还是非常自由的,只要关键的核心技术人员能够胜任某些新技术,公司一般也会支持这些新技术以及架构上的调整。
引入之后,其实也遇到过很多困难,因为ngx_lua在国内的使用不多,很多资料都偏向国外,国内甚至很少能够找到交流的人,包括招人的时候,也很难招到相关的技术人员。我们是先自己摸索,慢慢地把线上系统从旧模式替换到新的模式。同时,我们也招了一些技术比较好的新人,从头培养,这样持续半年、一年之后,他们就能适应新的开发方式。中间也踩了很多坑、付出了很多代价,但当我们都跨过去后,整个CDN业务基础的开发环境也就顺利转变过来了。
这样,后续的开发、功能逻辑的迭代、维护都比之前轻松了非常多,而且在之后很多CDN功能的演进中,我们的效率都是比较高的。我们也总结出了很多文档,能给新来的技术同学学习,同时,这个项目在国内也越来越流行了,我们也能跟国内同行有更多的交流。
现在回过头来看,当初把ngx_lua引进公司,到后面CDN整个技术发展方向再到现在,这个选择是非常正确的,整体加速了开发节奏、节省了维护负担。对我们这样CDN领域的创业公司来说,就需要在条件有限的情况下选择一项更高效的技术。
这也是我印象比较深刻的一件事,对技术人而言,能经历这种引入一个新技术,到自己慢慢掌握它,再到能跟同行去分享,是非常有意义的一件事。
EGO:现在还在沿用ngx_lua吗?
张聪:还在用。但官方更新不一定能满足我们现在的需求,所以我们会在这个基础上加入自己的东西,做二次开发。
一开始我们只是拿来用,之后业务复杂了,我们就自己去修改它、完善它,跟它一起开发、发展。同时,我们也陆续在github上开源了几个相关项目,回馈社区。
EGO:能分享一下您踩过的坑、遇到的挑战吗?
张聪:其实踩过很多坑,我讲一个比较典型的。一般来讲,CDN厂商承受的请求量、流量是非常大的,甚至远比中型站点的流量来得大。
在这个基础上,我们做一些功能的改造、新功能的发布的时候,就会面临很大的挑战。特别是功能的改造,就像是在一辆行驶得很快的车上换零件,业务量越大越有这种感觉,有些比较大的改造,往往还会涉及到系统的好几层。因此,我们很难非常干净利索地去做整个架构的调整、演进,只能是做好整个调整计划,然后把整个计划拆成N片,一点一点去做推进,就好像一个一个零件做替换一样。
其中,最大的痛苦是,因为CDN上有很多缓存,如果更换某个“零件”的过程中一旦出了问题,代价就会非常大。因为除了错误本身之外,这些错误还会污染到CDN上一些缓存系统,相当于你除了要修复bug之外,还要把被污染的缓存部分挑出来、清理掉,这是非常让人头疼的一件事情。用数据开发做比喻,就相当于你的数据被污染了,你修复了bug之后,还要挑出那些被污染的数据,再把它们修复掉。这个过程是非常费心费力,也非常折腾。
这是让我印象比较深刻的踩过的坑。又拍云也制定了各种方案,采取了人为的、系统的各种措施来减少这种事情发生的可能,比如现在我们改造之前,就需要经过多个精心设计的流程、观察各种数据指标,以保证过程的顺利。
CDN服务的未来:安全、可定制化、自助配置
EGO:能分享一下CDN领域未来的趋势吗?
张聪:第一,CDN可能不仅仅是简单的加速,还需要有一些安全防护方面的功能。你的网站会不会被攻击、别人是不是异常访问你的网站,这些都是CDN安全领域的内容。特别是大客户,他们对CDN安全方面的要求会非常高。同时,因为CDN是一张全国的网,它承受攻击的能力肯定要比用户的一个源站、单个节点的能力来得高,所以CDN上可以做好多安全相关的产品。
又拍云也在完善CDN安全方面的产品,在去年就推出了应用防火墙系统,一些简单的注入攻击、漏洞扫描,又拍云CDN网络就能帮用户挡掉这些风险。这是我觉得未来CDN发展的一个方向点。
第二,HTTPS是未来的趋势,它的应用会越来越广泛,CDN也就需要对此做出相应的变化。例如又拍云就推出了HTTPS CDN的动态证书调度,用户在我们后台简单配置一下他的域名,然后上传HTTPS证书,几秒之后就能全国生效,我们的边缘节点就会进行加载的证书、支持HTTPS访问,非常方便。
其次,又拍云也在计划研发无证书技术。有些金融类的客户,出于安全考虑,他们并不放心把证书传到CDN网络上,无证书技术就是我们不需要拿到用户证书的内容,他可以把证书放在自己的原服务器上,但CDN同样能实现加密访问的需求,这样用户就能更加放心。
另外,现在很多HTTPS证书是需要客户自己去申请购买的,我们也在做这样的技术研发,可以动态帮客户申请证书、维护证书。客户用我们的CDN,就不再需要自己去购买证书、维护证书,而是可以直接在CDN平台为他的域名申请证书,这样也方便了客户整个的配置流程和体验。
所以,围绕HTTPS加密这个领域,CDN还有很多事情可以做。
EGO:CDN服务除了提供加速、安全等服务,还有其他发展方向么?
张聪:可定制、高度可自定义的CDN肯定是CDN服务的方向。
CDN服务公司大都面临着一个非常让人头疼、也非常烦人的问题,就是每个客户都有他自己独特的需求,后台提供的功能也无法统一满足,就需要我们的技术人员按客户特定的需求去做功能开发,并且这些功能一般是无法通用的。这种情况下,我们的开发消耗的精力非常大,另外,CDN与web网站不同,每次业务发布都是几千台机器的更新,风险也比较大。
所以,未来CDN服务应该是高度可自定义的,用户在后台把他的业务需求、逻辑清晰的描述下来,通过简单配置,就能非常方便的更新上线,而不再需要派工单、由工程师开发后才能上线了。
像我们目前就在摸索一套关于CDN业务的小语言,用来描述客户们特殊的业务需求,目前它已经有一个功能可以初步解决一些客户比较私有的需求。产品经理拿到客户的业务需求、逻辑之后,可以直接把它们分解成我们内部的规则,再进行组装配置,几秒之后就全网生效,而不再需要一个开发的环节。其实就相当于我们在代码之上又抽象了一层这样的业务框架,当然,目前这套业务框架还不是特别成熟,所以还需要工程师的支持。但到未来足够成熟之后,它会大大减轻研发、运维团队的压力,甚至产品经理都可以通过它让新需求全网生效,非常方便。
除了能减轻工作量之外,高度可定制化也是CDN服务的竞争力。传统CDN,客户提出特殊需求,再由CDN服务商派工单,可能需要一周才能处理完需求,然后才能上线,这都需要客户等待。但如果客户的需求过来,我们能很快把它分解出来,并且在十来分钟、甚至更短的时间内转换成业务代码,后台提交后全网生效,对客户而言效率就大大提高了。甚至有些客户对自己的需求并不特别明确,这种自定义的情况下,他可以边调需求边测试,找到自己真正想要的,然后再把量切进来,这样体验就会非常好。
这也是我们未来努力的方向,让CDN能自定义化,解放客户,让客户的效率更高;也是解放我们自己,能节省非常多的重复工作。毕竟工程师最讨厌的就做重复琐碎的事情,工程师就解放出来,可以去做更有意义的、对平台有更长远价值的事情。跟CDN自定义化相对应的是CDN配置的自助化。自助化体现在,客户可以自己登陆CDN管理后台去做任何的操作、去配置任何他想要的功能。当然这可能对客户有一定的要求、学习成本,需要对方有一定的技术背景。但这种自助配置的体系,也是CDN未来发展的趋势。
嘉宾简介:
张聪,Monkey Zhang(Github ID:timebug),又拍云研发架构师,C / Lua 程序员,目前主要负责又拍云CDN相关的设计和开发工作;在Nginx C模块和OpenResty / ngx_lua模块的开发和维护方面有丰富的经验积累,同时热衷于推动公司内部的测试及运维自动化。偶尔会关注 C, Lua, Python, Erlang 相关的编程语言社区,同时对 Redis, NGINX 源代码研究工作非常感兴趣,崇尚简单实用的工程实践,希望自己以后成为优秀程序员的同时也是一位很好的实践者,用程序去创造东西,用程序去解决问题。