serverless及小程序云开发实践总结
# 一、Serverless 架构详解
# 1.1 什么是serverless

我们使用函数的时候不用关心后端IP、域名,只需要调用函数,后端的服务是一个函数。serverless并不是没有服务器,只是服务器部署在云上面的,比我们去自己维护更方便多
Serverless又名无服务器,所谓无服务器并非是说不需要依赖和依靠服务器等资源,而是开发者再也不用过多考虑服务器的问题,可以更专注在产品代码上。Serverless是一种软件系统架构的思想和方法,它不是软件框架、类库或者工具。它与传统架构的不同之处在于,完全由第三方管理,由事件触发,存在于无状态(Stateless)、 暂存(可能只存在于一次调用的过程中)计算容器内。构建无服务器应用程序意味着开发者可以专注在产品代码上,而无须管理和操作云端或本地的服务器或运行时(运行时通俗的讲 就是运行环境,比如nodejs环境,java环境,php环境)。Serverless真正做到了部署应用 无需涉及基础设施的建设,自动构建、部署和启动服务。
- 第一种:
狭义 Serverless(最常见)=Serverless computing 架构=FaaS 架构=Trigger(事件驱动)+ FaaS(函数即服务)+ BaaS(后端即服务,持久化或第三方服务)=FaaS + BaaS- 第二种:广义
Serverless=服务端免运维=具备 Serverless 特性的云服务

- FAAS:函数及服务,通俗来说就是我们可以写一个函数,在该函数内执行业务逻辑,函数由fas平台运行
- BAAS:后端及服务,通常指云服务,该云服务常指中间件服务,
FAAS+BAAS 构成了Serverless架构

整体架构十分简单明了, 用 FC 替代了 Web 服务器,但是换来的是免运维,弹性扩容,按需付费等一系列优点
目前,Serverless 的应用场景广泛,大部分传统业务均可以在 Serverless 云函数上完美支持
# 1.2 Serverless要解决什么?
问题:前端和后端分离后,彼此独立,这样就导致前端需要关注一些后端关注的问题,如下。
- 完整的后端应用上线流程
- 机器管理运维:扩缩容
- 降级、熔断、限流
- 域名、性能、监控
是不是触及了很多同学的知识盲区。作为一个前端,确实大多数人对于服务端的环境,部署基础设施等等东西并不了解。但是现在前端是独立的部署,前端必然面临这些东西。这就是serverless要解决的问题。
# 1.3 Serverless做什么事?
问题:是不是可以弄一个工具,我们只需要关心前端代码,服务器的东西工具自动帮我们做好。
这就是serverless做的事情。如下图,我们只需要关心业务代码,不需要关心服务器的基础设施。

# 1.4 Serverless和函数计算的区别

# 1.5 Serverless 的技术特点
事件驱动
- 云函数的运行,是由事件驱动起来的,在有事件到来时,云函数会启动运行
- Serverless 应用不会类似于原有的「监听 - 处理」类型的应用一直在线,而是按需启动
- 事件的定义可以很丰富,一次 http 请求,一个文件上传,一次数据库条目修改,一条消息发送,都可以定义为事件

单事件处理
- 云函数由事件触发,而触发启动的一个云函数实例,一次仅处理一个事件
- 无需在代码内考虑高并发高可靠性,代码可以专注于业务,开发更简单
- 通过云函数实例的高并发能力,实现业务高并发

自动弹性伸缩
- 由于云函数事件驱动及单事件处理的特性,云函数通过自动的伸缩来支持业务的高并发
- 针对业务的实际事件或请求数,云函数自动弹性合适的处理实例来承载实际业务量
- 在没有事件或请求时,无实例运行,不占用资源

无状态开发
- 云函数运行时根据业务弹性,可能伸缩到 0,无法在运行环境中保存状态数据
- 分布式应用开发中,均需要保持应用的无状态,以便于水平伸缩
- 可以利用外部服务、产品,例如数据库或缓存,实现状态数据的保存

# 1.6 传统服务器架构 VS Serverless架构
- 传统的开发模式

- 新型的
serverless开发模式