一、引言
在过去的十多年里,云计算的发展更新换代,经历了多个阶段,传统的分类方式有三种。
IaaS
Infrastructure as a Service
基础设施即服务
指的是把基础设施(如服务器、网络、存储等)作为服务提供给客户。客户向云服务厂商申请计算资源,在上面部署自己的服务。使用IaaS,可以降低基础设施成本,客户不用自己运维物理机,而是按使用时长租赁虚拟机;可以满足扩展性,不必预先采购大批基础设施,而是通过云服务厂商快速获取机器;同时节省了采购机器、运输机器、安装机器的时间成本。
PaaS
Platform as a Service
平台即服务
指的是由云服务厂商提供操作系统的安装、监控等功能,客户只需要开发、部署自己的应用,不必接触底层的操作系统。通常,云服务厂商还提供常用的中间件,如负载均衡、数据库、消息队列、监控等,方便客户使用。
SaaS
Software as a Service
软件即服务
指的是由云服务厂商提供一个应用程序,客户可以直接运行使用。例如各种应用程序、Web服务都属于SaaS服务的范畴。
除了上面三种传统的分类方式,FaaS、BaaS等方式在近年来也比较流行。而Serverless这一名词,最早是在2012年,由Iron公司提出。2014年,亚马逊推出AWS Lambda,把Serverless真正带入人们的视野,被大家所熟知。之后,微软、谷歌、IBM都先后推出自己的Serverless产品。国内,阿里云、腾讯云、华为云也先后推出自己的Serverless平台。现在Serverless已经成为各大云服务厂商的标配。
二、Serverless架构
Serverless,全称是Serverless Computing,无服务器运算。但Serverless实际上并不是不需要服务器,其less的含义,是客户不用关心,不用去管理服务器的意思。它是将计算资源作为服务,而不是服务器的概念出现。
Serverless的基本理念是,让客户将精力集中于业务逻辑开发上。使用Serverless,客户不需要关注基础设施的建设管理,服务器的扩展,失败容错等问题。
Serverless将服务器管理、操作系统管理、基础软件的部署运维等工作全权托管给云服务厂商,由云服务厂商提供一个Serverless平台,相当于客户和服务器间增加了一个抽象层。客户不需要聚焦于服务器服务的管理,只需要聚焦业务逻辑的开发,把代码部署到Serverless平台上。
Serverless平台根据请求的实际情况,进行资源分配,并提供弹性伸缩能力,客户不需要关心资源够不够用的问题。
Serverless目前没有很明确的定义,云服务厂商大多采用FaaS(Function as a Service,函数即服务)和BaaS(Backend as a Service,后端即服务)的方式来提供服务。
Serverless软件架构图
Serverless的客户,可以直接把代码部署到Serverless计算平台上,无需进行资源购买和环境部署。
Serverless计算平台提供了应用程序的执行环境,为应用程序提供高可用、弹性、可靠的计算能力。通过FaaS计算平台,开发人员可以将一个大应用拆分为一个个相对独立的业务单元,然后通过事件触发的方式,将各个业务单元串接起来,从而实现整个业务流程。通过云服务厂商提供的FaaS平台,开发人员可以快速实现业务开发。
BaaS将云端能力进行封装,屏蔽服务的复杂细节,为应用程序提供服务化的后端能力,比如对象存储、数据库、消息队列、权限管理等能力。开发人员只需要通过简单的API或SDK调用,即可使用相应的服务能力。开发者的应用程序可以使用BaaS提供的后端服务进行交互,构成完整的Serverless架构,用最简单的方式让业务快速落地。
FaaS主要支持事件触发的计算形式。通过HTTP请求,或者云服务厂商提供的组件调用,可以触发访问业务代码。Serverless平台根据客户的请求,提供负载均衡、弹性伸缩、高可用等最佳实践,将这些最佳实践对客户透明化,客户不用去关心后台资源的调度问题,降低开发和运营成本。
Serverless的主要特点:
聚焦业务
客户只需要聚焦业务逻辑,无需关注资源的管理,还可以使用云服务厂商提供的丰富的后端服务,减少开发周期。
按需弹性
业务流量有比较明显的高峰和低谷,或者业务有临时的大流量需求的时候,客户无需对资源进行预估,平台能够根据请求的实际情况,及时且稳定的负责资源的弹性伸缩,扩展性强。
按需付费
按实际资源使用量进行收费,客户不需要支付固定数额的存储或带宽,没有流量则没有费用。
可维护性高
客户无需管理服务器,由平台提供服务器的管理、故障自动识别、自动剔除等能力,降低客户的运营复杂度。
安全性高
抗攻击等工作可以交由经验丰富的云服务厂商来提供。
三、Serverless实践
Serverless已有多种应用场景,无论是后台服务,还是Rest API都可以部署到Serverless平台上。
下面介绍一下Serverless在音视频处理方面的一个用例。
在视频应用的场景下,用户上传的音视频文件总量大,上传频率有高峰和低谷,对音视频处理系统的实时性和并发能力都有较高的要求。同时,一份视频文件通常需要进行不同清晰度的处理,以满足不同场景下的用户需求。
传统的方式,客户要实现音视频处理的能力,需要完成基础资源的购买和部署,自行实现音视频文件的存储、转码计算能力的开发,需要实现访问控制,负载均衡,监控管理等各个方面的内容,还需要预留足够多的计算资源,以满足高峰时期的计算需求。
使用Serverless平台,客户可以将系统设计如下:
在Serverless平台中,客户可以编写自定义的业务逻辑,对音视频文件进行逻辑处理。
客户可以使用云服务厂商提供的对象存储能力,存储音视频文件。同时,配置对象存储的触发器,当音视频文件被上传、更新、删除时,将自动触发客户的应用程序,完成相应的逻辑处理,包括视频的各分辨率转码、音频转码、视频截图、视频转动图等功能。客户也可以使用接口直接触发相应的业务功能。
客户可以使用Serverless平台提供的日志管理、监控告警等能力,不需要额外关注旁路功能的建设。甚至,客户可以进一步使用平台提供的音视频处理能力,不需要关心具体的音视频处理算法,业务代码本身只需要提供简单的逻辑处理能力。
客户可以把音视频处理的结果存储到对象存储服务中,方便其用户对媒体资源的访问。
使用Serverless平台提供的能力,客户将业务逻辑中与业务不相关的工作剥离出去,由云平台厂商来完成,客户只需要关注核心的业务逻辑,可以显著提升开发效率,快速迭代上线。
四、Serverless问题
Serverless架构是目前比较热门的一种架构方式,但是并不是所有的服务都适合使用Serverless。现阶段,Serverless仍面临着很多挑战,我们需要对其进行权衡。
无状态性
要想服务实现弹性伸缩,客户程序需要是无状态的,Serverless不能保证本地数据的持久性,因此不能够使用本地存储的数据。
业务轻量化
要实现彻底的自动扩缩容,需要使应用程序微服务化,把巨型应用拆分成更细粒度的函数来做到轻量化,需要业务做比较大的改造。
启动时延
FaaS在启动的时候可能需要完成初始化,会带来请求的延迟。如果一个应用程序分发和启动耗时很高,就无法做到快速响应,无法跟上业务流量的变化,就不适合使用Serverless。
多客户问题
不同客户的多个软件实例可能在同一台云服务器上运行,可能出现系统健壮性和性能等方面的问题。
排障问题
在Serverless平台进行调试,客户需要频繁的进行程序部署,为程序调试带来一定的难度。同时,Serverless模式下,客户不需要关心服务器,意味着客户看不到服务器了,那么如果系统出现异常,客户不能登录服务器进行排障,只能通过云服务商提供的排查诊断工具,对问题诊断带来一定的难度。
五、小结
随着云计算的发展,技术分工更加明确,基础设施及平台统一由云服务厂商来提供并管理。Serverless架构让我们不需要关注基础设施和平台的运维,只需要专注于业务的研发,专注于产品的实现,专注于核心竞争力的提升。
随着技术的飞速发展,随着Serverless存在的不足被逐个击破,相信Serverless在未来还有无限可能。
文章作者:蔡馥晗
排版设计:王蔚棋
手绘插画:岳 媛
求分享
求点赞
求在看
原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/32944.html