注:本文整理自上周六举办的「HelloServerless」技术沙龙深圳站演讲内容,讲师是腾讯云Serverless产品架构师孔令飞,文末提供了讲师演讲PDF的下载,回复「Serverless深圳」免费可得。
本文将从产品层面来介绍腾讯云是如何落地Serverless技术以及Serverless的技术演进。
目录
Serverless是一项新技术,可能有朋友不是很熟悉。所以我们先介绍下Serverless的概念和发展历史,接着介绍腾讯云Serverless从1.0到2.0的技术演进,以及我们如何支持Serverless这种技术的,也就是技术生态。最后再介绍下Serverless的应用场景和具体的应用案例。
Serverless:云计算新趋势
这是Serverless目前的发展情况。
最近几年,微服务和k8s很火。上图可以看到Serverless跟他们的热度对比,其中蓝色曲线是Serverless的热度曲线图。从2016年开始,Serverless的热度是要大于微服务和k8s的。
Serverless最初在2010年被提出,2014年AWS推出了lambda服务,把Serverless产品化,并收到了很好的效果,微软、Google和IBM看到后,也分别在2016年推出了自己的Serverless产品:Azurefunction、GCP和OpenWisk。阿里云和腾讯云也分别在2017年推出了自己的Serverless产品,腾讯云要早阿里云一天推出。
什么是Serverless
那么Serverless为什么这么火?
从云计算的发展阶段说起,一开始是On-Premise层,接着是IaaS层,之后再到PaaS层。最后是FaaS层,Serverless就是在这一层。
在软件研发领域,绕不开的2个环节是软件的部署和运维。如果我们要上线一个业务,在On-Premise阶段,需要购买物理服务器,可能还需要自建机房、安装制冷设备、招聘运维人员,然后再在上面搭建一系列的基础设施,比如:虚拟化、操作系统、容器、Runtime,Runtime可以理解为像Python、golang、Node.js这类软件。接下来我们要去安装软件类的开发框架。最后,我们才会去编写我们真正需要的业务函数。
过去十多年,云计算其实是一个「去基础架构」的过程。这个过程可以让用户聚焦于自己真正需要的业务开发上,而不是底层的计算资源上。Serverless符合云计算发展的方向,是云的终极形态,这种特有的模式使Serverless存在潜在的巨大价值。
Serverless2.0组件架构
这张图描述了Serverless的组件架构。最底层是基础设施层,底层计算资源我们用到了docker和轻量化虚拟机技术,其中docker是Serverless1.0的计算资源展现形态,轻量化虚拟机是Serverless2.0的计算资源展现形式,相比于docker,轻量化虚拟机性能得到了非常显著的提升,可以在几毫秒就可以启动一个业务进程。在最底层我们也做了双活,并且对底层资源做了严格的安全保护。
再上一层就是资源管理层,比如说我们有集群监控,监控我们的集群监控状况,如果有集群不可用,会立马安排运维人员去排障。当然了,我们底层是有双活的,当一个集群出故障的时候,我们可以把流量切换到另一个集群,用户是无感知的,也不会影响用户的请求。这一层我们有专门的自动扩缩容算法,来应对用户的请求变化。
我们还提供了很多外围的工具系统,来支持用户的研发、部署和排障。比如:DevOps支持,日志、监控、告警支持。后面会有介绍。
Serverless2.0技术形态
如图,左边是Serverless1.0的技术形态,右边这部分是Serverless2.0的技术形态。1.0的时候,只有eventfunction,eventfunction是基于事件驱动型的,大概意思就是外界触发一个事件给Serverless平台,Serverless平台收到触发事件后会调用函数并传入触发事件数据和参数信息,函数内部做业务逻辑处理之后返回给调用方。eventfunction可以对接多种云上的产品,比如:api网关、ckafka、cmq、cos等。
eventfunction和HTTPFunction都是只有在请求的时候才会调用,函数完成之后便不再运行,也就是不再占用资源,换句话说不用再为这些资源付费,后面会有一页PPT介绍,serverless是如何节省资源,以及跟CVM比Serverless这个技术的价格优势在哪里。
到2.0的时候我们跟友商已经形成了一个差异,像AWS和阿里的FaaS还停留在这个阶段,这边业界有个比较好的产品叫GoogleCloudRun。所以我们跟其他友商的优势是他们是割裂开的2款产品,我们把他放到同一个入口了,更方便用户去使用。
Serverless2.0运行过程
这两种技术形态,又是如何支持用户请求的呢?
当请求来的时候,我们平台会根据请求量的大小,去自动或缩容。像Function这种,我们会瞬时拉取足够的函数实例来满足所有的请求,我们有一个调度层,会根据请求量的大小来判断需要起多少个function实例,同时我们也有一套算法,根据用户每天的请求情况,提前创建好一些资源,当用户请求过来时,直接将请求切换到已经创建好的资源上,减少请求延时。像Service这种,我们也会根据请求流量动态的做水平扩容,业务无须感知。
Serverless2.0技术生态
Serverless更多的是解决计算资源的按需分配,无须运维,但如果想真正在Serverless平台上跑业务,还需要其它系统的支持,来满足业务对开发、运维和排障的需求。我们从开发者工具,DevOps、监控运维3个方面,来介绍下我们是如何支持函数的研发、运维和排障的。
开发者工具
首先来介绍下开发工具,为了支持开发者能够方便高效的开发和部署云函数,我们开发了一系列的工具,比如:我们提供VSCode插件,通过VSCode插件,开发者可以很方便的通过IDE直接部署、更新和调试云函数。我们也提供了WebIDE来方便用户直接在网页开发代码。此外我们还提供CLI工具,通过CLI用户可以在终端很方便的通过命令调用完成诸如配置、部署、调试、调用等功能。最后我们还提供API接口来满足用户对自动化和定制化的需求。最后我们还提供SDK供用户更方便的调用云函数的接口。所以可以看到要将serverless产品化,还需要做很多其它工作来支撑Serverless这个技术,尤其是工具这块儿。
DevOps支持
除了开发者工具,我们也提供完善的DevOps支持,从最佳实战,到工作流,到工具链,以及产品打通,我们都提供了很多方案和支持。
比如工作流这里,我们支持编码、构建、打包、部署、测试和发布等一系列流程。在工具这里,我们提供了:CLI、应用模型等。产品这里,我们打通了很多产品供用户很方便的跟这些产品进行交互,利用这些产品提供的能力,比如:Git仓库,API网关,ServerlessDB等。这个是DevOps支持。
日志
监控
性能监控
我们还提供一些更高阶的监控,现在在启动开发,大概在8月底或者9月初的时候会发布。我们会提供函数与函数之间的调用链追踪,展示每个调用节点函数的执行情况、函数执行的性能分析,以及支持对失败函数进行流量重放。所谓的流量重放,就是说,我们会把调用失败的函数放在DLQ队列中,用户可以很方便的从DLQ队列中重试该失败的函数,方便用户Debug。
计费模型
之前有提到过,我们会有一页PPT来专门分析下Serverless下的计费模式和优势。Serverless平台下的计费按如下3个维度进行计费:
1.资源使用费用:(资源使用量-免费资源额度)X资源使用单价
2.调用次数:(函数调用量-免费调用额度)X调用次数单价
3.外网流量费用:外网出流量X流量单价
但是这种比较难理解,所以我们一般会跟CVM进行对比:如果用户部署业务,需要购买CVM,可能需要10台CVM,那对计算资源的投入就是这条黄线,相当于计算资源一直在使用这些计算资源。对于云函数来讲,当没有请求的时候是不占用计算资源的,不会产生任何费用,只有请求的时候才占用计算资源,白天会有个波峰,晚上会有个波谷,大部分业务都是这种模式,可以看到这些阴影面积就是云函数的实际使用资源,我们只会对这些阴影面积进行收费。
这个是跟CVM的计费对比,当资源使用率小60%的时候serverless下的费用比CVM小很多,一般业务很难达到资源使用率60%,能达到30%就已经很不错了。
ServerlessEventFunction应用场景
这里介绍一下应用场景,先介绍下eventfunction的应用场景,通过这张图,我们可以看到,云函数可以作为浏览器、APP和小程序的后端服务。通过我们提供的不同触发器可以支持不同的场景,比如通过API网关触发器,可以匹配websockt的应用场景,通过cos/cmq/ckafka触发器可以支持像:消息处理、流失计算,事件通知这类的应用场景。
ServerlessHTTPService应用场景:BFF
接下来我们看下serverless的具体落地情况。
Serverless助力腾讯六大业务线
客户案例-腾讯地图:100亿条消息/天
这个是腾讯地图的客户案例,走的是eventfunction这种方式。场景是这样的:用户在访问腾讯地图时会产生一些数据库,腾讯地图会将这些数据进行整理并保存到Hbase和ES上,然后再配上一个UI用来查询数据。当用户产生一条数据时,会将这条数据放在kafka队列中,kafka触发后端的云函数,云函数做数据处理之后又将数据放入kafka队列中,由另外一个进程从kafka队列中取走处理后的数据,放入ES和Hbase中。
客户案例-企业辅导背单词
客户案例-腾讯相册小程序
Serverless带来的用户价值
业务迁移到serverless平台可以带来如下价值:
2.我们天然的支持了基于ckafka的触发器,用户不需要再去实现这一套逻辑,节省了很多工作量
3.资源按需分配,只有用户浏览地图的时候才会触发底层资源的分配
4.借助于云的能力,我们提供了非常大的资源池,用户不需要去担心后台计算资源的问题