什么是Serverless
Serverless架构,或者称为无服务器架构,是最近几年新冒出来的一种架构风格。这究竟是一种什么样的架构?无服务器,就是真的没有服务器了么? 其实,对于Serverless来说,只是用户不用更多的去考虑服务器的相关内容了,无需再去考虑服务器的规格大小、存储类型、网络带宽、自动扩缩容问题了; 同时,也无需再对服务器进行运维了,无需不断的打系统补丁、应用补丁、无需进行数据备份、软件配置等工作了。
但是没有服务器,如何来将程序、应用运行起来呢?这里要介绍的是Serverless下包含的两个概念: 函数即服务(FaaS,Function as a Service)、后端即服务(BaaS,Backend as a Service)。
函数即服务 FaaS
FaaS,作为一种新的计算能力提供方式,让用户抛弃了对服务器的配置和管理, 仅需编写和上传核心业务代码,交由平台完成部署、调度、流量分发、弹性伸缩等能力。 FaaS的出现,会从底层开始变革计算资源的形态,提供了一种新的方式来提供计算资源,同时也会给软件架构与应用服务部署带来新的设计思路, 进一步降低云计算的使用门槛,推动全行业在服务架构上的创新步伐。
后端即服务 BaaS
BaaS,其实大家已经使用很久了,这里的后端,指的就是各种云产品和云服务, 例如对象存储COS,消息队列CMQ,云数据库CDB、TDSQL,云缓存CRedis、CMemcached,甚至到各种以API形式提供的服务。 这些产品或服务,用户直接开通即可使用,无需考虑部署、扩容、备份、优化、安全等各种运维工作, 做到了开箱即用,无需自己去进行服务器或应用的维护和管理,因此同样也是Serverless的一部分。
Serverless的价值
首先,从开发者使用的来说,不用更多的去考虑服务器的相关内容,无需再去考虑服务器的规格大小、存储类型、网络带宽、自动扩缩容问题; 同时,也无需再对服务器进行运维了,无需不断的打系统补丁、应用补丁、无需进行数据备份、软件配置等工作了。
其次,Serverless产品是完全自动化的弹性扩缩容的;在业务高峰时,产品的计算能力、容量自动扩容, 承载更多的用户请求,而在业务下降时,所使用的资源也会同时收缩,避免资源浪费。
从业务角度来说,Serverless架构带来的是进一步的业务解耦,应用功能被解构成若干个细颗粒度的无状态函数,开发可以聚焦在单功能的快速开发和上线上; 同时拆解后的云函数,也都可以进行独立的迭代升级,更快速的实现业务迭代,缩减功能的上市时间。
另外,利用Serverless架构的简单运维、低成本及快速上线能力,可以来快速尝试业务的新形态、新功能。
Serverless的技术特点
事件驱动
- 云函数的运行,是由事件驱动起来的,在有事件到来时,云函数会启动运行;
- Serverless应用不会类似于原有的监听 – 处理类型的应用一直在线,而是按需启动;
- 事件的定义可以很丰富,一次http请求,一个文件上传,一次数据库条目修改,一条消息发送,都可以定义为事件;
单事件处理
- 云函数由事件触发,而触发启动的一个云函数实例,一次仅处理一个事件;
- 无需在代码内考虑高并发高可靠性,代码可以专注于业务,开发更简单;
- 通过云函数实例的高并发能力,实现业务高并发;
自动弹性伸缩
- 由于云函数事件驱动及单事件处理的特性,云函数通过自动的伸缩来支持业务的高并发;
- 针对业务的实际事件或请求数,云函数自动弹性合适的处理实例来承载实际业务量;
- 在没有事件或请求时,无实例运行,不占用资源;
无状态开发
- 云函数运行时根据业务弹性,可能伸缩到0,无法在运行环境中保存状态数据;
- 分布式应用开发中,均需要保持应用的无状态,以便于水平伸缩;
- 可以利用外部服务、产品,例如数据库或缓存,实现状态数据的保存;
微服务
- Serverless带来的业务解藕、事件驱动以及无状态,非常适合微服务化。