在突如其来的疫情影响下,2020 年在线教育的流量达到新一轮高峰。面对百万 PCU 的高并发场景,为保证业务系统的稳定性,腾讯在线教育团队果断拥抱了 Serveless 并进行架构升级改造。在这一过程中,他们如何解决业务高速发展所面临的人力紧缺的问题?上云是不是大势所趋?如果同样拥抱 Severless,需要注意什么?
在 2021 年 4 月 22 - 24 日举办的 QCon 全球软件开发大会(北京站)“前端新趋势”专题中,腾讯前端开发高级工程师曹海歌老师将分享《基于 Serverless 的腾讯在线教育大前端研发模式升级》。会前, InfoQ 记者带着疑问对曹老师进行了采访,帮助大家了解为什么业务会进行研发升级?以及如何基于 SCF 落地全栈开发,继而解决业务痛点。
InfoQ:腾讯在线教育是在什么情况下,开始拥抱 Serverless 的?
曹海歌:最近几年,腾讯在线教育业务增长迅猛。业务在快速发展的过程中,一定会遇到的问题就是大量的人力缺口。因此,前端团队决定全面转型服务端开发。恰逢其时,前端转型全栈的技术升级也与公司正在推动的全面上云计划不期而遇。因此,无论是技术探索,还是技术共建,都恰到好处得在这个转型的十字路口相遇了。前端服务化不仅可以进一步拓展前端开发者自身的技术边界,也能为产品发展创造更大的价值。
在落地全栈开发的伊始,我们做了技术方案的全面调研与分析。通过对标公司内部的各种云计算架构的方案以及结合自身业务的实际情况进行了多轮讨论,我们最终决定优先尝试 Serverless。值得注意的是,这里所说的 Serverless 不是指向某种特定的云计算解决方案,而是一种宏观意义上的服务端架构思想,即让业务远离运维,继而聚焦业务。换言之,这种架构思想的核心是直达本质,快速解决当下问题。一切可以降低服务端业务开发成本的方案均可成为 Serverless 的载体。至于是选择云函数落地,还是选择容器化的解决方案,这需要结合当下业务的场景以及团队技术梯队来具体情况具体分析。
InfoQ:你们团队内部做了哪些对比和权衡才决定用 Serverless?
曹海歌:在前端团队全面落地全栈开发的过程中,经过多轮讨论,我们最终决定优先尝试腾讯云的 SCF(Serverless Cloud Function)。作为一种免运维、低成本的技术方案, SCF 非常适合在低频调用的业务中使用,并且通过不同的实例进行函数间的业务隔离,也无需担心函数之间会互相影响。此外, SCF 能够有效得降低前端开发维护后台服务的技术门槛,让技术开发者可以更好得聚焦于业务本身。
在业务落地的选择上,我们优先尝试了小程序场景下的业务实践。由于业务功能完全独立,跟现有系统耦合度低,且并发量不高,前端实现了从 UI 设计到服务端存储的一站式解决方案,在释放了后台人力的同时,也拓展了前端开发者的技术边界;而另一个典型的案例是在 B 端的系统上进行了 BFF 模式的落地方案,后台提供基础的原子 API 接口, SCF 层进行业务逻辑的拼接和组装,巧妙的进行了多端适配和多业务场景的适配,同时这对协议设计也更加友好。随着基础原子接口的逐步成熟和稳定,后续功能的迭代基本上与后台解耦,只通过前端开发者就已经可以满足产品日常功能的迭代。这种研发模式所带来的最大好处就是敏捷迭代,在产品创业初期能够非常有效得满足业务的快速发展。
在面对业务量不大的情况下, SCF 是能在一定程度上就能解决问题;而在业务场景复杂,诸如长链接、高性能、高可用和高并发等情况,TKE (Tencent Kubernetes Engine)不失为一种有效的解决方法。
InfoQ:背景提到的架构痛点或者问题,用 Serverless 能解决吗?
曹海歌:对于并发量不大,稳定性要求不那么极致的中后台业务场景,完全可以通过 SCF 来完成业务落地。然而,随着前端开发者持续的探索实践以及业务功能的不断拓展,前端开发逐步会延伸到服务端开发的深水区,这便不得不面对类似 C 端场景的高性能、高并发和高可用。而解决高并发最简单的思路就是使用缓存。在这种情况下,“用完即走”(以“函数即服务”为思路)的 SCF 便不再是最好的技术选型了。尤其是面对 back-end to front-end push 业务场景时,使用 SCF 来实现产品功能,架构演进上就会变得非常吃力。
因此,面对长链接、高性能、高可用和高并发的业务场景,我们选择了 Serverless 另一款延伸型的技术产品—— TKE。TKE 是基于原生 Kubernetes 提供的以容器为核心的、具有高度可扩展的高性能容器管理服务。对业务开发者(尤其是前端开发者)来说,我们核心的技术选型就是在公司内找到最合适当下业务的基础设施。在综合衡量业务成本、开发效率以及业务稳定性等多重要素后,我们研判:TKE 是最佳选择。前端开发团队由此开始了基于 TKE 的业务落地的探索之路,以突破 SCF 在应对业务处理时所面临的局限。
InfoQ:在整个架构逐步上云过程中,遇到了哪些问题?又是怎么解决的?
曹海歌:首先,从效率维度来看,工程化在软件开发的各个领域内都已经深入人心,并且日趋完善,尤其是在前端开发领域。而实际使用的情况是,无论是 SCF 还是 TKE, 对业务开发而言都是新鲜事物,并且基础设施并未全面完善。这便使得如何更好得服务一线开发者进行迁移和改造成为业务中非常重要的事情。因此,工具的建设和定制化能力的开发都是必不可少的。尽可能得降低新服务的接入成本和原有服务的迁移成本。
其次,从质量维度来看,SCF 在行业内还未完全成熟,TKE 的建设在腾讯内部也方兴未艾。虽然业务方上云是必然趋势,但是也无可避免得承担着与云平台一起成长的风险。因此,为了保证业务服务质量的稳定性,开发者要做好研发流程的规范,建设好质量检测工具以及设计好服务容灾方案。
最后,还涉及协同问题。我们希望通过知识共享和技术沉淀的方式,将公司内优秀的技术方案引入进来,同时在引入和应用的过程中也贡献出我们团队自己的技术沉淀,从而更好得提升公司研发团队整体的效能。因此,分享、开源和协同就是非常好的方式。
上面展示的就是 IMWeb 团队全栈开发的设计思路,依托于云提供的基础能力,通过制定团队的开发规范,以及打造极致的效率工具,为业务更好的进行探索和实践保驾护航。
在实际业务落地过程中始终要根据业务场景,具体情况具体分析;聚焦业务本身,分析自己的业务特性,不推荐盲目上云;最后,对比出适合自身业务场景的上云方案。
InfoQ:如果别人也要基于 Serverless 升级研发模式,你觉得哪些点需要注意的?
曹海歌:业务开发远离运维的诉求已经深入人心了。因此,使用 Serverless 这种“道”作为业务解决方案的趋势是明确的。至于选择 SCF 还是 TKE,抑或是其他类似的“术”,这在实际业务落地过程中要根据业务场景,具体情况具体分析。
大公司一般都会自研一套或者多套解决方案,在公司内部选择适合当下业务场景的方案即可。而对于缺乏自研能力的公司(尤其是创业公司)而言,技术方案的选择至关重要。Serverless 的解决方案在保证服务运行的同时,更多的是能够提供配套的技术设施(比如:存储、网络、CDN 等等)以及后续延伸的服务项目。后两者是作为技术负责人需要去真正核实以及用来决策的依据所在。
InfoQ:Serverless 研发的前景如何,是未来的趋势吗?
曹海歌:与其说 Serverless 是一种明确的技术,不如说 Serverless 是一种研发模式。这种研发模式能够让开发者更聚焦于业务价值,远离那些与当下目标无关的问题。这样的诉求在未来会有持续性的深入发展,并且还会随着技术演进与技术积累而变得更加完善。
嘉宾介绍
曹海歌 (haige), 腾讯高级前端工程师。2016 年加入腾讯 QQ 浏览器,2017 年加入在线教育部,目前是 IMWeb 团队核心成员,主要负责 IMWeb 团队全栈开发的方案设计与落地。对 Web & H5 移动端开发有丰富经验,对业务质量监控和性能优化有深入研究,并专注于推动团队全栈技术架构的落地,对跨平台、Node.js 开发有大量实践经验。
领取专属 10元无门槛券
私享最新 技术干货