把腾讯搬到云上,治愈了他们的技术焦虑
1996年,“云计算”概念问世。2006年,亚马逊正式推出AWS,随后越来越多的企业开始逐步接受“云计算”,并将应用逐步迁移到云端,享受这一新型计算方式带来的技术红利。
在云原生概念、技术发展和普及之前,对于“云计算”的普遍理解是将旧的本地部署应用程序直接迁移到云端。但正如Splunk首席技术咨询Andi Mann所说:“你应该以新的方式开展新事物,或者将新的云原生应用程序放入新的云基础架构中,或者通过拆分现有的单块应用来从头开始使用云原生原则重构它们。”
云原生根本目的就是利用云上的便利,以及各种容器技术,更高效稳定地开发应用。如果应用本身没有基于“新”的云服务进行重构,而是继续采用“老”的架构,那么即使业务运行没有问题,应用也不能充分利用“新”的云运行环境的能力。
技术人员只有对这些架构以及围绕这些架构建立的技术栈、工具链、交付体系进行升级,依托于云技术栈将其重新部署、部分重构甚至全部重写,才能将应用变成“云原生的”。
6月16日,腾讯宣布,内部海量自研业务已实现全面上云,打造了国内最大的云原生实践。据统计,近三年来,腾讯的自研业务上云规模已经突破5000万核,累计节省成本超过30亿元。
那些虐我的需求,后来都成为TKE的领先点
“这些人是不是在故意搞我?”“他们根本就是不想云原生改造吧!”2019年的夏天,在被各个业务“乱七八糟”的需求狂轰乱炸后,于广游深夜下班回家路上有时会萌发出这样的想法。
彼时的于广游,还是一位纯粹的技术原教旨主义者,每当谈及“神圣”的容器调度技术K8s(Kubernetes),他的眼神里常会闪过教徒般的光芒。然而,这种对于K8s技术的无比热爱和坚信,在给于广游带来飞速成长的同时,也一度曾让他辗转难眠、陷入迷茫。
于广游2015年通过校招进入腾讯,起初做计算相关产品,负责腾讯云底层虚拟化相关工作。2016年,在社区大火的容器编排器K8s渐渐流传至业界,他所在的团队内部随即也启动了容器项目。
没有任何迟疑,他径直跳进了容器技术的“海洋”。国内外社区论坛、各路技术大牛博客、前沿技术交流会等等,都成为他获取云原生、容器、K8s相关知识的入口。在厚重的资料里“大快朵颐”后,于广游建立了自己的K8s哲学,一度牢不可破。
作为国内最早一批接触K8s的开发者,他随着团队容器项目共同成长,打造了国内最早的基于K8s的容器平台——腾讯云容器服务(Tencent Kubernetes Engine,TKE)。
2017年TKE开始对外提供服务,但一个尴尬的“夹生”场景也摆在于广游团队面前:一方面要给客户提供先进的云原生产品,但自己的研发环境却依然是传统物理机、非DevOps的研发模式;另一方面,客户问及腾讯自己的业务有没有使用TKE时,团队总是没有足够的信心回应。
于是,当于广游在2018年第一次听到公司要自研上云时,他直呼“爽!我自己也可以用云技术了”,“公司终于可以不被吐槽‘技术沙漠’了”。但是,腾讯很多业务最初只是停留在使用云上虚拟机的“上云”,又让于广游心急如焚,如此一来,既不能完全享受到云的核心好处,也会造成技术割裂。
好在腾讯技术和业务领导团队也深谙其中道理,经过一次又一次充分且扎实的沟通讨论,腾讯关于自研上云的计划终于在2019年初达成统一:不仅要上虚拟机,还要推进云原生。
在后来的腾讯运营管理大会上,于广游所在团队向腾讯各BG汇报了基于TKE的云原生上云方案,建议各BG将自研的PaaS平台切到基于K8s的TKE上。
于广游在兴奋之余尚没有意识到的是,他即将进入一种“冰火两重天”的境地,一方面数百个业务浩浩荡荡地进行云原生改造,另一方面“乱七八糟”的需求接连挑战他的K8s认知,压得他几乎崩溃:“是不是故意在搞我?”
比如,微信自研的调度平台叫YARD,它和TKE一个显著区别就是每个容器对应的IP是固定的,从而可以充分保证服务稳定。那么切换到TKE上,能不能继续做到这一点?这让于广游一个头两个大:“固定IP是不云原生的,这违背了K8s中Pod应当是Cattle而非Pet的基本原则。”
所谓“Pod应当是Cattle而非Pet”,是指业务在出现问题时,容器应该像牲口一样可以被随时抛弃(删除重建),而不是像物理机、虚拟机那样被当作宠物精心呵护(更改配置)。当然,在跟业务团队开过几十场会以后,理性的他自然知道业务侧并非有意为难。在物理机时代,IP本身就是设备的固有属性之一,部分业务系统依赖固定IP也是自然而然的。
于广游们当时“捏着鼻子”把这些固定IP、服务原地变更等“不云原生的”特性都做完了。此外,TKE团队还和游戏团队一起,做了适合Windows的容器;和微信团队做了多地三园区的高可用容器调度架构等等,解决了一系列繁杂的问题。
度过“痛苦”的2019年之后,回头再看,“原来之前虐我的那些东西,竟然都变成我们TKE最领先的技术点。”于广游说,他对云原生、对“业务定制化”需求有了全新的认识,一方面,所谓定制化需求其实都是业务切切实实存在的需求,不满足这些需求业务就无法便捷地迁移上来;另一方面,定制化需求很多时候是首次被提出的需求,其背后也具备普适性。
尤其是当酷狗音乐、微众银行等外部客户,也提出固定IP等需求的时候,更让于广游如梦初醒。内部海量业务的“定制化”需求,实际上成为TKE产品创新的原动力,由此也实现了内部自研业务上云反哺腾讯云的功能。
当然,在结合业务需求进行功能创新的过程中,于广游团队始终坚持不破坏K8s的核心本质,例如可以扩展K8s支持原地变更,但不能违背“不可变基础设施”原则。“就如同凳子,可以有三条腿、四条腿,也可以有靠背、有扶手,外形千变万化,但它的核心本质是凳子,是用来坐的。”
于广游牢不可破的技术哲学观在海量实践中获得刷新:“原本我认为技术应该义无反顾地向前瞻的方向迈进。但事实上我们发现,任何一个技术被创造出来,首先会在最适合它的细分场景落地,并不断发展,相对成熟之后开始同时朝着普适化,也就是兼容旧架构、支持更多场景的方向去持续演进。”
于广游拿云计算演进技术举例,比如云计算已然提出虚拟机,可是行业也纷纷产出裸金属,看起来像是在开技术演进的倒车。“其实不是,任何技术都不是径直往前走的,而是同一个象限中的每项技术既要向前推进又要往后兼容。云原生技术也是如此,这才能焕发出更强的生命力。”
正如于广游自己的豁然开朗一样,腾讯的自研上云进程也扬帆远航。2020年,腾讯各大业务基本都上到TKE,2021年后开始进一步解决业务使用质量的问题,为了帮助大家把云原生用得更好,腾讯云团队、运营管理团队以及TKE团队推出了云原生成熟度评估平台。
云原生上云促使云支撑环境跟公司的开发环境完全打通,整个开发流程都发生了变化,一切面向手工的工作,变成面向API的工作,从手工时代进入了自动化时代。之前研发需要自己去购买和部署物理机、虚拟机,扩缩容需要再买机器、再部署,现在已全部自动化、DevOps化了。
自研上云,“治愈”技术焦虑
“抛开QQ的光环,我们还有什么?”
多年以前,每参加一次外部的前沿技术分享,年轻的QQ后台开发工程师王昂,就在心里拷问自己一次。
那是他2013年毕业后进入腾讯的头几年,QQ上线十余年,月活超过8亿,如日中天。
而在业务这一庞然大物之下,王昂日日夜夜面对的技术架构体系,正在被外部先进的技术理念拉开距离。假以时日,这套技术架构必然会和前沿技术脱轨。而他本人包括他所在的团队,也将被淹没在技术浪潮之中。
现实对他的失落报以冷漠。这套QQ的技术架构稳定地屹立在他面前,而且表现优异,它依然可以撑起高企的并发流量,依然可以撑起日益复杂的业务需求,毫无萎靡的迹象。
只是,外面明明还有更好的技术架构理念,有更好的开源组件,有更饱满的精神世界。
怀揣“可望不可及”的焦虑感,王昂迎来2018年。腾讯在这一年进行“930变革”后开始摸索自研业务上云,CSIG(云与智慧产业事业群)成立后,他所在的团队也被划入其中,开始做教育相关的产品,其中就包括知名的综合性在线学习平台腾讯课堂。
老团队,新业务。“这套技术架构体系怎么搭建?”团队每个人心中都泛起了涟漪,“省点儿力气,继续沿用QQ成熟稳定的老技术栈?还是向落后的自己告别,靠向腾讯云的新技术栈?”
选择难而正确的路需要勇气,王昂坦言。从实用主义角度来看,老技术栈依然能用,而且足够稳定,不会对业务造成影响。如果向新技术栈靠拢,学习成本、工作量将会大幅增加,不仅会牺牲日常产出,甚至会因为组件不够成熟而被业务挑战。
没有人愿意选择止步不前,犹豫、纠结没有持续太久。不过业务的挑战也如约而至。在切云上新技术栈过程里,有一次腾讯课堂的很多用户评论出现乱码展示,在被业务挑战后,王昂团队马不停蹄地连日定位,最终发现是云上跟云下的数据库某一个配置没有对齐。
不过,王昂他们没有成为惊弓之鸟。于是我们看到这样一番景象:为了不因业务挑战而中断技术栈的“移髓换骨”,王昂他们小心翼翼地抠所有的细节,用更长的时间做灰度测试,在一个容器、一个Pod网络不稳定的情况下,去反复做前端的重试和容灾,在前期使用云数据库组件的时候,为防万一他们会多加一些缓存的Redis的Catch……
当然在上云的过程中,王昂和团队不是孤军奋战。就上云组件的细节,他们和腾讯云的产品部门进行了大量磨合,一年下来共同解决了近400个问题,双方就容器、运维、音视频等组件进行了持续交流,既完善了腾讯云的技术栈,也保障了腾讯课堂的上云过程。
于是,一年多后的2019年,从最初核心的直播、点播体系,到机器、网络等底层IaaS,以及跟业务逻辑相关的MySQL、Redis、MQ等组件,腾讯课堂已是彻底的腾讯云技术栈。
紧接着,王昂团队,又借助腾讯云的TKE平台,将技术架构进一步优化,实现容器化编排能力,拥有了云上自动扩缩容的能力,而这也为后来的故事埋下伏笔。
云上丰富的行业标杆组件能够带来很多益处。“举一个最简单的例子,老技术栈用CKV,Value只支持一种数据结构,完成业务逻辑必须要写一堆业务逻辑代码,然后把代码序列化后再填到CKV的数据结构里去。但是如果用现在的KV系统Redis,它的数据结构非常丰富,只需要写很少的代码就能实现相同的业务需求。”王昂说,这样能够有更多的时间聚焦在业务架构上,可以高效满足更多的业务需求。
2020年初,新冠肺炎疫情开始对经济社会造成持续影响。而腾讯课堂流量也随着疫情反复大幅度波动,高峰期访问量可以达到平时的100倍。
如果是之前的架构,一定是需要两三天提前申请资源后手动扩容运维,而在容器化部署与弹性扩缩容的支撑下,腾讯课堂可以自动流畅扩容,释放大批人力的同时,凭借稳定流畅的表现也得到了业务部门的认可。
回忆2018年,“抛开腾讯的技术烟囱、重复造轮子不谈,仅仅从一个开发工程师个人成长而言,如果不去主动靠齐行业最领先的技术栈,不跟着云或者不跟着开源走,而是在腾讯内部‘闭门造车’,在老的技术栈上修修补补,那个人的价值将仅仅只是一名合格的腾讯开发工程师。”王昂说。
推动自研上云的过程中,王昂和团队成员接触了大量优秀的开源组件,技术视野变得更加开阔,并且能够将前沿技术应用在业务当中,“技术焦虑”的低气压从团队中慢慢散去,他们将推动上云的技术经验在腾讯内网分享,在行业技术大会上输出,获得了内外同行们的广泛认可。
2021年,王昂晋升腾讯课堂研发负责人。在工作9年后晋升到这个位置,速度堪称飞快。除了扎实的开发能力、对技术本身的热爱,推动自研上云的经验也是他受到技术与业务部门两方面认可的重要原因。