腾讯云服务器CVM:半部云端进化史
发表时间: 2022-06-27 18:17
6月16日,腾讯对外宣布自研业务已实现全面上云,三年上云规模已经突破5000万核,累计节省成本超过30亿。这意味着包括QQ、微信、腾讯视频、王者荣耀等在内的腾讯业务,已经实现和腾讯云百万级外部客户一样,基于公有云的模式来开发运营。在腾讯集团高级执行副总裁、云与智慧产业事业群CEO汤道生看来,腾讯自研业务上云将不仅帮助腾讯构建了面向未来的技术架构和研发文化,也全面锤炼了腾讯云的产品、技术和综合服务能力。这将帮助腾讯开启云端生长新时代。时光回溯至2018年。彼时,腾讯作出历史上第三次战略升级,宣布扎根消费互联网,拥抱产业互联网。伴随战略调整的是,腾讯在技术上启动了自研上云和开源协同两个集团级工程。作为一个涉及腾讯业务底座变革的技术工程,自研上云意味着腾讯云的技术和产品将直面腾讯这个超级客户的考验。其中的难点在于,腾讯自研业务不仅有着业界首屈一指的体量和复杂性,而且还在稳定性上有着最严苛的要求。从结果来看,腾讯云在这个考场上成功经受住了考验,腾讯云的产品能力也借此实现了蜕变和进化。其中,承担着最基础也是最核心角色的腾讯云云服务器CVM,便是一个缩影。
“损耗降不下来,云就上不了”
自研上云这个决定一度让CVM云服务器团队兴奋不已。对他们来说,过去总是被客户灵魂拷问的问题“腾讯业务用的是腾讯云吗?”——即将拥有一个理直气壮的答案。但要把腾讯复杂的自研业务搬上云却没有想象的那么简单,首当其冲的挑战便直指CVM的核心性能指标:虚拟化损耗。所谓虚拟化,就是将物理服务器的资源连接成一个大的服务器资源池,并能按照需要分割、组合为各种规格的云服务器。虚拟化能解决传统IT在敏捷性、灵活性和可扩展性上的不足,实现更高的工作负载移动性和更高的资源可用性。但虚拟化也有软肋:物理服务器在进行虚拟化的过程中,作为任务进程的虚拟化必不可少地会占用物理服务器的资源,也就是虚拟化损耗。腾讯自研业务关注虚拟化损耗,一方面是因为腾讯自研业务多数是面临海量用户,每个业务模块对单台服务器的性能要求都比较高,过高的损耗将影响业务稳定性;另一方面,损耗占掉过多资源就会导致业务需要占用更多的服务器,这将会让上云后的成本不降反升。说到这里,还需要插空回顾一段腾讯云虚拟化技术选型的历史——2013年,腾讯云面临对虚拟化技术路线选择:是选择业界成熟但可能在未来遇到性能瓶颈的Xen,还是选择社区新锐但尚未验证过的KVM。经过决策,腾讯云在国内率先扎进了KVM的技术队列,一方面是因为KVM在技术架构上有着更好的前景,在面对超大规模集群场景下更有优势;另一方面,KVM社区当时已经有很高的活跃度,符合腾讯拥抱开源的技术思路。随后几年行业的发展证明了当初腾讯云选择的正确性,KVM 逐渐成为所有主流云计算厂商的虚拟化方案。腾讯云也因为在KVM领域早期投入和持续深耕,一直保持着在虚拟化领域的行业领先性。然而,即便这样的领先性在自研业务的高要求下,依旧面临着巨大的挑战。彼时,腾讯云在服务器虚拟化上性能损耗大约在15%,虽然已是行业最好的水平。但自研业务比如微信、QQ群业务,对虚拟化性能损耗接受预期在8%以内。换言之,如果虚拟化损耗降不下来,这些业务就上不了云。死磕虚拟化损耗的优化,成了随后几个月CVM团队的一号任务。在网络虚拟化层面,团队发现虚拟化网卡底层存在着一个VPC网络,对于UDP的随机端口的访问性能比较差,于是采用加网卡队列数的方式,保证网络性能,同时在网络IO的设计上开创性地设计出单独拷贝和never copy的机制,确保整个过程当中不会再进行过多的拷贝从而节省开销;在CPU虚拟化层面,为了解决云服务器的核间通信带来的性能开销过大的问题,团队采用云服务器即使CPU空闲的时候也不出让给宿主机的方式,确保云服务器独占资源;与此同时,腾讯云首款自研服务器星星海也正式投入生产环境使用,带来更适配云端的硬件支撑;软硬件联合定制化调优后,CVM服务器的实测虚拟化开销突飞猛进地降低到5%以内。这甚至出乎业务团队的意料。让CVM团队印象深刻的是,腾讯广告业务一度提出,为什么用了云服务器性能相比之前用物理服务器还提升了20%多,要求尽快定位清楚……解决了虚拟化损耗大指标的问题,自研上云的第一个拦路虎算是被初步解决。但上云的挑战还远没有结束。
“被人肉DDoS的感觉”
由于面对的业务场景有着超出过往任何客户的复杂度和体量,CVM团队还需要面对各种各样的问题。以性能测试为例。过去,行业在进行云服务器性能验证,由于很难穷举每一个用户场景,所采用的是功能性的的验证,主要沿用业界比较规范的几个指标。但在腾讯自研业务上云中,业务更加倾向于在不同场景下做精细化的测试。比如QQ红包,大的类别分场景测试和性能压测,其中一个场景测试,就区分了三种场景,近十个的指标项,比如延时、丢包率等等。不止于此,QQ红包的团队的测试标准跟QQ基础团队的测试标准又有区别,在QQ群场景中测试逻辑又会变化。再扩展到微信、游戏、视频等业务场景下,需要应对的问题更是翻倍增长。很多时候,很难预料到的一个小开关、某一个小改动,就会体现到在不同业务上出现问题。“你这个丢包怎么这么高?”、“你们性能打到这又打不上去了?”一堆问题接踵而至,CVM团队时常有种被人肉DDoS的感觉。最终,通过跟业务团队的一次次验收对接,CVM团队与业务团队合作,对性能点进行针对性调优。同时,CVM团队在综合不同业务部门需求的前提下,整合了一个更大、更多样、更偏向业务的测试工具集,囊括了不同语言环境的编译测试、AI测试等众多子项,能够反映出云主机在真实业务场景中的实际表现。除了技术本身的优化外,CVM团队还要时不时应对一些非技术型问题。比如,在微信业务上云时,业务团队发现一个依赖系统在90核(45物理核心)的CVM云主机当中服务器中运行效率异常低下。经过CVM团队、星星海团队、微信团队联合分析发现,由于代码形成于微信业务早期,运行逻辑存在一定的特殊性,这导致其在单数物理核心上运行时会产生诡异的效率降低;而物理机核心数量都是双数,所以问题并没有在之前的运行中暴露。在业务部门更新代码之后,这个性能问题迎刃而解。腾讯游戏《天涯明月刀手游》是另外一个例子。当时,这款大作上云之后,业务团队发现云服务器性能不及预期,导致游戏服务器经常处在高负载状态,玩家掉线、登录异常时有发生。业务团队只能不断安抚玩家情绪。如果任由事态继续,游戏的运营和生命周期都会受到巨大影响。经过CVM团队和业务团队联合定位,问题最终明确:原来在申请资源时没有考虑云服务器主频与此前游戏设计时的主频匹配,导致云服务器产生持续的高负载情况,而这一问题在更换新的云服务器之后得到顺利解决。事后,腾讯云团队也收到了业务团队分享的庆功蛋糕。诸如此类的技术优化和服务经验,也在被不断地注入到腾讯云的产品服务和交付体系中,为云上用户提供经过严苛场景历炼的保障。
“利用率提上去,成本降下来”
除了增效,降本也是业务对上云的核心关切。CVM团队在云服务器装箱率上动起了脑筋。所谓云服务器装箱率,就类似于用箱子装东西时对箱子空间的利用率。由于物品没法同时装到两个箱子里,所以箱子里物品码放的越整齐,能装的东西就越多。放在云服务器场景中也一样,云服务器里的配置之和越接近于宿主机的容量,就意味着装箱率越高,资源利用率越好。在腾讯自研业务场景下,却不得不面临这样一种问题:就是很多业务由于使用场景和习惯,通常需要大规格配置的服务器。这就会带来一个问题:假如一台物理宿主机有80个核心,而业务需求是60核,那么剩下的20核应该怎么用?如果不能投入使用,对于腾讯自研业务上云的体量来说,就会带来巨大的资源浪费。为了解决这一问题,CVM团队在首次装箱的时候就按照不同业务的资源需求对装箱率进行最优化配置,尽量保证物理服务器能够“用好用满”。而对于云服务器退订所产生的资源间隙,CVM团队则能借助成熟的热迁移技术会定期进行统筹调度,找到合适的业务补齐。最终,在自研业务上云工程中,腾讯云的服务器装箱率从之前的80%+一路上涨到现在97-98%,大幅降低了运营成本。
结语
在腾讯自研上云工程中,业务目标不是简单的将业务从物理机搬到云上虚拟机。但腾讯云CVM在一路的历炼中不断实现自身的产品进化:他们通过网络优化和重构数据迁移流程,让云服务器的迁移成功率从70提高到了98%;他们找到了处理器厂商内存RAS技术中的不足,让云服务器的可靠性大幅提升;他们优化了云服务器的网络和IO性能,分别实现了700%和300%的性能提升;他们在腾讯会议最关键的时刻,支撑业务8天扩容100万核;在自研上云的基础上,他们如今把虚拟化损耗降低到0%;正是在这样一轮轮的进化中,腾讯自研上云的基石不断打牢、扎深,并支撑自研业务走向云原生的新未来。