Serverless
什么是 Serverless
云计算的三种模式:IaaS(基础架构即服务)、PaaS(平台即服务)、SaaS(软件即服务)。
早期开发人员开发应用的时候,需要考虑主机,内存,数据库,扩展,消息处理等很多层面的因素
虽然IaaS平台帮助实现了资源流动,PaaS平台帮助实现了公共基础服务层的抽象,但开发人员仍然要考虑灰度发布、容错、并发等一系列架构问题,
而 Serverless 的目标就是帮助开发人员减少对基础设施及公共基础服务的关注,让业务开发人员更简单容易地实现业务逻辑,关注更多的架构细节。
Serverless架构可以认为是对微服务和容器化的一种补充,为用户提供了一种新的选择,来应对复杂多变的需求,尤其适合快速发展的初创型公司。
无服务器云函数可以让用户无需关心服务器的部署运营,只需开发最核心的业务逻辑,即可实现上线运营,
具备分布容灾能力,可以依据负载自动扩缩容,并按照实际调用次数与时长计费。
但Serverless 并不意味着没有任何服务器去运行代码,Serverless是无需管理服务器,只需要关注代码,而提供者将处理其余部分工作。
“无服务器架构”也可以指部分服务器端逻辑依然由应用程序开发者来编写的应用程序,
但与传统架构的不同之处在于,这些逻辑运行在完全由第三方管理,由事件触发的无状态(Stateless)暂存于计算容器内。
Serverless的主要含义
- 云服务商提供的、使应用开发者无须关心服务器的一种服务
- 构建和运行不需要服务器管理的应用程序,描述了一种更细粒度的部署模型,
- 应用程序捆绑一个或多个函数(function),上传到平台进行部署和执行,并可以根据负载的变化实现自动伸缩和按需计费。
“无服务器架构是基于互联网的系统,应用开发不使用常规的服务进程,仅依赖于第三方服务,是客户端逻辑和服务托管远程过程调用的组合”。
Serverless并不是不需要服务,而是开发者不用关注服务,而在 Serverless 环境下,开发者只需要关注代码层面的东西。
也就是写完代码直接提交到Serverless服务上,并设置相关的策略, Serverless就会帮开发者考虑好一切,包括基础设施、扩展性、性能等。
如果想用MQ则只需调用函数,无须关注MQ是否能承受压力,至于什么时候需要扩展,成本如何控制等问题,Serverless 会做好一切。
特点
- 开发人员只需要专注于业务代码实现,不需要关心运维、扩容等其他工作
- 按需使用的粒度更小,有请求的时候才开始建立服务,运行服务
- 严重依赖于特定的云平台,可能会被特定厂商绑定
- 按调用次数收费的
优势
- 成本低。只有运行的时候才启动服务,按调用次数收费,花费更少
- 开发速度更快。开发人员需要关注的范围更小,开发速度大幅提升
- 质量属性高。由于云厂商的基础设施及公共基础服务都有 SLA 要求,Serverless 经过大规模验证过,质量属性相对较高。
- 简化运维。相关的运维工作全转移到云厂商一侧。
重要的角色
- 开发者: 应用程序的编写人员。作为服务的使用者,关注应用的设计和实现
- 云服务商:应用程序运行环境的提供者,负责提供计算和存储资源
对于开发者来说:
Serverless架构可以将其服务器端应用程序分解成多个执行不同任务的函数,整个应用分为几个独立、松散耦合的组件,这些组件可以在任何规模上运行。
使用Serverless架构可以免除所有运维性操作,开发人员可以更加专注于核心业务的开发,实现快速上线和迭代,把握业务发展的节奏。
常见的Serverless架构
所有的服务都以FaaS(函数即服务)的方式对外进行提供。
在语言和环境方面,FaaS 函数就是常规的应用程序,例如使用JavaScript、Python以及 Java等语言实现。
Serverless架构优势
### 缩短交付时间
Serverless架构允许开发人员在极短时间内(几小时、几天)交付新的应用程序,而不是像以前一样需要几个星期或几个月。
在新的应用程序中,依赖于第三方API提供服务的例子很多,如认证(OAuth)、社交、地图、人工智能等。
### 增强可伸缩性
所有人都希望自己开发的应用能够快速获取大量的新增用户,但是当活跃用户快速增长的时候,服务器的压力也会激增。
使用Serverless架构的体系不再有上述担忧,可以及时、灵活进行扩展来应对快速增长的活跃用户带来的访问压力。
### 降低成本
Serverless架构模式可以降低计算能力和人力资源方面的成本,如果不需要服务器,就不用花费时间重新造轮子、风险监测、图像处理,以及基础设施管理,操作成本会直线下降。
### 改善用户体验
用户通常不太关心基础设施,而更注重于功能和用户体验。Serverless架构允许团队将资源集中在用户体验上。
### 减少延迟及优化地理位置信息
应用规模能力取决于三个方面:用户数量、所在位置及网络延迟。
当应用要面向全国甚至全球用户的时候,通常会产生较高的延迟,从而降低用户体验。
在Serverless架构下,供应商在每个用户附近都有节点,大幅度降低了访问延迟,因此所有用户的体验都可以得到提升。
Serverless分类
# Backend-as-a-Service(BaaS):
后端即服务,云服务商使用统一的 API 和 SDK 将开发者的移动端或Web应用连接到后端云服务,并为其提供账户管理、文件管理或消息推送等公共服务。
# Functions-as-a-Service(FaaS):
函数即服务,开发者以一个函数(function)为入口,将业务逻辑编程打包上传,同时指定触发该函数的事件,如一个HTTP请求。当无事件发生时,函数不会执行且不产生费用。
当指定的事件发生时,这些函数即被触发并执行,且可以自动扩展,当事件结束时自动销毁,按函数实际执行时间计费。
# BaaS 与 FaaS 都向开发者屏蔽了底层服务器,
不同之处在于,前者只提供一些标准化的可复用软件服务,而后者提供的是实实在在的计算和存储资源,
开发者可以随意利用这些资源来运行自己的代码。
SCF(Serverless Cloud Function)
- 基本概念入门:https://www.infoq.cn/article/s101GtcCV05_2AgKo8GD
- 运行原理与组件架构:https://www.infoq.cn/article/ojdHHzHVrh3TpNRAX7qR
- 开发者工具建设:https://www.infoq.cn/article/kOVzg4OOxJUZfYRPGT2d
行动是绝望的解药!
欢迎转载和引用,但请在明显处保留原文链接和原作者信息!
本博客内容多为个人工作与学习的记录,少数内容来自于网络并略有修改,已尽力标明原文链接和转载说明。如有冒犯,即刻删除!
以所舍,求所得,有所获,方所成。