Serverless 到底是什么呢?字面翻译上,Serverless 即是「无服务器」。无服务器,真的就是没有服务器吗?Serverless 究竟是什么样的一种产品或形态呢?
在上周六举办的「Hello Serverless」技术沙龙深圳站上,五位讲师进行了精彩的技术分享 —— 从 Serverless 的技术演进、腾讯云云函数的架构设计、本地开发调试,到 Node runtime 监控、新餐饮服务上的应用实践,既讲解了基本概念,也在实际业务应用上分享了第一手经验。
本文整理了 Hello Serverless 深圳站的部分精选内容,同时文末也提供了演讲 PDF 的下载,供大家回顾。
腾讯云孔令飞:
腾讯云 Serverless 的技术演进
Serverless 是一项非常崭新的技术。2017 年,腾讯云正式发布了自家的 Serverless 产品,2019 年Kubecon大会,腾讯云重磅发布了Serverless 2.0。讲师孔令飞以 Serverless 的发展历史和技术演进为基点,进行了这次沙龙的开篇演讲,并为听众分享了 Serverless 的技术生态、应用场景和用户案例。
孔令飞认为:“无服务器,不代表真的不需要服务器,只不过服务器由厂商维护,这其实是一种新的软件系统架构思想和方法,而非具体的类库或工具。Serverless 的核心思想在于 —— 开发者无需关注底层资源,比如 CPU、内存和数据库等,只需要专注业务开发即可。”
尽管 Serverless 解决了计算资源的按需分配问题,但如果想真正地在 Serverless 平台上跑起业务,还需要其他系统的支持,来满足业务对开发、运维和排障的需求。孔令飞以腾讯云云函数为例,从开发者工具、DevOps 和监控运维三方面介绍了团队是如何支持函数的研发、运维和排障。
Serverless本地开发者工具能帮助开发者更方便地通过 IDE 直接部署、更新和调试云函数;完善的 DevOps 支持,又从最佳实战、到工作流、工具链,以及产品打通等方面助理开发者;监控与运维让开发者能无后顾之忧地实现业务上云。
目前,「腾讯地图」、「企鹅辅导背单词小程序」、「腾讯相册小程序」等均已将 Serverless 布局到业务上,实现了稳定快捷的开发。具体的技术实现可以查看讲师演讲 PDF。
腾讯云陈莹:
腾讯云云函数架构设计及冷启动优化实践
随着当下 Serverless、FaaS 生态的不断发展以及小程序的空前繁荣,越来越多的企业和个人用户把自己的应用,小程序部署到腾讯云云函数平台上,但随之而来的 FaaS 场景下高并发、大规模、快速启动等需求也带来了巨大的挑战。腾讯云研发工程师陈莹为大家带来架构设计和冷启动优化方面的经验分享。
陈莹表示:“云函数在新一代云函数计算平台上,安全、可用性和性能都进行了全面升级。新平台使用腾讯云自研的轻量级虚拟化技术,并且支持上万台计算节点同时扩容。同时在函数与 VPC 网络打通中,依托于新的隧道方案,时间也由原来的秒级降低至毫秒级。”
如下图所示,在云函数架构设计上,我们重构并优化了控制流和数据流的模块、虚拟化层、网络层和调度层。
在冷启动优化上,陈莹从轻量级虚拟机系统的优化、代码缓存、VPC 转发 proxy、实例预创建等几个方面分别介绍了优化的方案。
降低冷启动时延是一方面,最好的还是可以避免冷启动。在这方面腾讯云云函数团队搭建了一套自动实时扩缩容系统,通过秒级的函数并发监控数据上报,计算函数可以并发对资源需求的情况进行函数实例预创建,或者销毁(成本方面考虑)。
腾讯云陈家兴:
Node.js Runtime 监控
讲师陈家兴分享的主题是 Node.js 下 Runtime 层面的监控实现。分享过程中,他还介绍了 Profile 的概念和原理,并讲解如何应用到 Serverless 上。
陈家兴认为监控的作用主要包含两方面:
- 一是发现问题。监控一般跟数据跟图表挂钩,当数据和图表表现出跟往常不一样的特征的时候,通过监控就能知道,可能会是哪里出现问题。
- 二是解决问题。一般来说,不同的问题会呈现不一样的数据特征,比如说,内存呈不断上升的,到了顶峰突然又断崖式地降下来,明显就是内存泄露到最后 OOM,然后服务自动重启的特征。通过数据的不同特征,就可以根据经验或者推理,找到问题的原因,进而验证和解决问题。
对于 Node Runtiem 级监控,它能监控到 CPU 的使用时间,其中包括系统时间和用户时间,Node 程序内存使用情况,里面包了程序内存消耗总量,实际内存使用量,空闲内存量等等。一个很明显的对比就是,常规监控都是一个概览额总值,而 Runtime 级别的监控下是更详细的数据,包括内部使用上面的各方面的细节。更详细的数据,对开发者无疑就是更容易发现问题和解决问题。
无论常规监控还是 Runtime 级监控,都是帮助我们更好地把握程序的健康状况,对我们日常开发运维都非常重要。同时,经过测试,即使性能消耗比较高的 Runtime 级监控,其性能消耗也在控制范围以内,在不添加太多工作量的前提下,我们都应该尽量全方位地监控我们的程序。
在解决问题方面,做 Profile 是很高效的方法。云函数在其中扮演的角色,就是在尽己所能降低接入和分析门槛,给开发者提供最方便的监控和 profile 服务。
腾讯云李帅:
Serverless 开发者工具最佳实践
Serverless 的概念,大家应该已经开始熟悉了。腾讯云研发工程师李帅从开发者自身的角度进行了分享 —— 在面向 Serverless 开发模式中,开发者会遇到什么困难?我们有没有相应的解决方案和工具?Serverless 产品还有其他更多特性吗?
在以往的面向 Serverless 开发的调研中发现,困难大体分为四种 —— 开发不便;无法完成本地测试与调试;发布步骤冗长;日志检索无法满足需求,排查问题困难。
因此,让开发者实现本地开发部署的工具由此应运而生 —— Serverless本地开发工具 和 VS Code 插件。
通过 SCF 命令行工具,开发者可以方便地实现函数打包、部署、本地调试,也可以方便地生成云函数的项目并基于 demo 项目进一步开发。通过 VS Code 插件,可以用 VS Code 原生的调试入口调试云函数,当开发者改完代码,F5 启动,就可以开始测试了。
由此,在 Serverless 架构下。开发者的一些通用痛点问题可以得到解决。除此之外,还有一些衍生用法和特性,比方说利用 Serverless 本地开发工具的退出码以及标准输出信息,这样就可以支持通过写脚本来完成自动化测试和发布的流程。
Serverless本地开发工具也可以用来对接 DevOps 平台等等,在此不做冗述,感兴趣的读者可以点击下载讲师演讲 PDF。
乐凯撒 CTO 黄道泳:
Serverless 在乐凯撒新餐饮服务上的实践
黄道泳的分享是一场真正的业务上云实战。从 Serverless 的应用背景介绍,到乐凯撒的开发者用 Serverless 完成了什么,最后通过这项技术解决了业务中的什么问题和痛点,全流程地讲解了 Serverless 的商业级落地应用。
在新餐饮服务中,涉及的业务系统众多,其应用背景也非常复杂:
- 多个孤立的业务系统,信息孤岛严重
- 二次开发困难,高昂的开发成本
- 自主研发的点餐小程序需要和多个后台业务系统打通对接
- 功能实现耦合度高,业务拆分困难,系统稳定性差
- 各种紧急的业务需求和活动无法及时满足
那么 Serverless 在其中起了什么作用呢?总的来说,云函数实现的业务功能有:
- 微信小程序的服务应用
- 公众号消息推送服务
- 实时通讯服务:云打印(Websocket)
- 金蝶 ERP 以及 WMS 系统的对接和数据同步
- SOS 餐饮系统和金蝶ERP的数据接口和同步
- 统一的支付服务
- 定时的异常数据邮件提醒
- 外卖平台、第三方系统的数据抽取及处理入库
- 其他临时的功能需求或接口对接需求
不难看出,这是非常庞大的系统开发任务,而 Serverless 经受住了考验。当然,Serverless 也面临着一些挑战,包括公共类库的复用问题、高并发的请求服务等。
对于 Serverless 未来发展的展望,黄道泳先生也提出了自己的企盼,希望云厂商能强化 Java 体系云函数的应用。
由于篇幅有限,无法在本文中详尽地展现一些技术细节的实现原理和过程,如果对 Serverless 感兴趣的读者,可以扫描下方二维码,关注「ServerlessCloudNative」公众号,后台回复「Serverless 深圳」,免费领取讲师演讲 PDF。