serverless部署前后端项目实践
# 一、serverless架构介绍及安装serverless
Serverless又名无服务器,所谓无服务器并非是说不需要依赖和依靠服务器等资源,而是开发者再也不用过多考虑服务器的问题,可以更专注在产品代码上。Serverless是一种软件系统架构的思想和方法,它不是软件框架、类库或者工具。它与传统架构的不同之处在于,完全由第三方管理,由事件触发,存在于无状态(Stateless)、 暂存(可能只存在于一次调用的过程中)计算容器内。构建无服务器应用程序意味着开发者可以专注在产品代码上,而无须管理和操作云端或本地的服务器或运行时(运行时通俗的讲 就是运行环境,比如nodejs环境,java环境,php环境)。Serverless真正做到了部署应用 无需涉及基础设施的建设,自动构建、部署和启动服务。
通俗的讲:Serverless 是构建和运行软件时不需要关心服务器的一种架构思想
虚拟主机已经是快被淘汰掉的上一代产物了。云计算涌现出很多改变传统 IT 架构和运维方 式的新技术,比如虚拟机、容器、微服务,无论这些技术应用在哪些场景,降低成本、提升 效率是云服务永恒的主题。Serverless 的出现真正的解决了降低成本、提升效率的问题。它真正做到了弹性伸缩、高并发、按需收费、备份容灾、日志监控等。
# 1.1 传统的开发模式与serverless开发模式对比
传统的开发模式

新型的serverless开发模式

Serverless 正在改变未来软件开发的模式和流程

# 1.2 Serverless 和 ServerFul 架构的区别
# 传统的 ServerFul 架构模式
ServerFul 架构就是 n 台 Server 通过 网络通信 的 方式 协作在一起,也可以说 ServerFul 架构是基于 Server 和 网络通信(分布式计算) 的 软件实现架构 , Server 可 以是 虚拟机 物理机 ,以及基于硬件实现的云的云服务器

# Serverless 架构模式
Serverless 的核心特点就是实现自动弹性伸缩和按量付费

# 1.3 使用serverless的优势
- 资源分配: 在
Serverless架构中,你不用关心应用运行的资源(比如服务配置、磁盘大小)只提供一份代码就行。 - 计费方式: 在
Serverless架构中,计费方式按实际使用量计费(比如函数调用次数、运 行时长),不按传统的执行代码所需的资源计费(比如固定CPU)。计费粒度也精确到了毫 秒级,而不是传统的小时级别。个别云厂商推出了每个月的免费额度,比如腾讯云提供了每 个月 40 万 GBs 的资源使用额度和 100 万次调用次数的免费额度。中小企业的网站访问量不 是特别大的话完全可以免费使用。

- 弹性伸缩:
Serverless架构的弹性伸缩更自动化、更精确,可以快速根据业务并发扩容更 多的实例,甚至允许缩容到零实例状态来实现零费用,对用户来说是完全无感知的。而传统 架构对服务器(虚拟机)进行扩容,虚拟机的启动速度也比较慢,需要几分钟甚至更久。
# 1.4 Serverless 组成
- 广义的 Serverless 更多是指一种技术理念:Serverless 是构建和运行软件时不需要关心服务 器的一种架构思想。刚开始学 Serverless 你可以把它理解为虚拟主机的升级版本
- 狭义的 Serverless 是指现阶段主流的技术实现:狭义的 Serverless 是
FaaS和BaaS组成

# 1.5 Serverless 开发流程

# 1.6 为什么要学 Serverless
先看看招聘信息

看看最近 2 年 Github 的 start 数量和周下载量



目前已经使用了 serverless 的大公司

# 1.7 Serverless 的能力
# 计算能力
- 资源按需分配,无需申请资原
- Mwm:租户级别强镜离 Docker:进程级别隔离
- Mwm+Docker 轻量级资源毫秒级启动
- 实时扩容,阶梯缩容
- 按需收费
# 系统运维能力
- 性能保障:整个链路耗时毫秒级内,并支持 VPC 内网访问
- 安全保障
- 资源对用户不可见,安全由腾讯云提供专业的保障
- 提供进程级和用户级安全隔离
- 访问控制管理
- 自动性护缩容
- 根据 CPU 内容网络 IO 自动扩容底层资源
- 根据请求数自动扩缩容函数实例,业务高峰期扩容,满足业务高并发需求,业务低 峰期缩容,释放资源,降低成本
- 自愈能力:每一次请求都是一个健康的实例
Serverless 中云函数被第一次调用会执行冷启动,Serverless 中云函数被多次连续调用会 执行热启动

- 冷启动 是指你在服务器中新开辟一块空间供一个函数实例运行,这个过程有点像你把这 个函数放到虚拟机里去运行,每次运行前都要先启动虚拟机加载这个函数,以前冷启动非常 耗时,但是目前云厂商已经能做到毫秒级别的冷启动,这个过程我们也不需要关心,但是需 要注意的是使用 Seesion 的时候可能会导致 Session 丢失,所以我们的 Seesion 建议保存到数 据库。
- 热启动 则是说如果一个云函数被持续触发,那我就先不释放这个云函数实例,下次请求 仍然由之前已经创建了的云函数实例来运行,就好比我们打开虚拟机运行完这个函数之后没 有关闭虚拟机,而是让它待机,等待下一次被重新触发调用运行,这样做的好处就是省去了 给虚拟机「开机」的一个耗时环节,缺点是要一直维持这个虚拟机的激活状态,系统开销会 大一些。
# 业务运维能力
- 工具建设:vscode 插件、WebIDE、Command Line、云 api、Sdk
- 版本管理、操作管理等
- 故障排查
- 监控报警
- 容灾处理
# 1.8 serverless厂家
- 亚马逊 AWS Lambda
- 谷歌 Google Cloud Functions
- 微软 Microsoft Azure
- 阿里云函数计算
- 腾讯云 云函数 SCF(Serverless Cloud Function)
- 华为云 FunctionGraph
# 1.9 云函数和serverless的区别
通过前面的介绍,我们认识到了云函数和
serverless,但是可能会有一个很迷惑云函数和serverless到底有什么区别,他们之间有什么联系,为什么我在创建云函数的时候选择模板方式创建最后创建的是serverless,而不是云函数呢。下面我们将解答云函数和serverless的区别
Serverless Framework是Serverless公司推出的一个开源的Serverless应用开发框架Serverless Framework是由Serverless Framework Plugin和Serverless Framework Components组成Serverless Framework Plugin实际上是一个函数的管理工具,使用这个工具,可以很轻松的 部署函数、删除函数、触发函数、查看函数信息、查看函数日志、回滚函数、查看函数 数据等。简单的概括就是serverless其实就云函数的集合体,使用serverless后我们创建的云函数不需要手动去创建触发器等操作
官方地址
# 1.20 创建serverless的方式
- 在腾讯
serverless控制面板上创建,然后在vscode中使用插件的方式下载到本地(**注意: ** 编辑器上要选择和创建serverless地区相同,才能看到项目,否则是看不到项目代码的) - 使用客户端
serverless cli命令方式创建,个人也更推荐使用这种方式创建,修改代码,然后部署到后台腾讯云服务上
# 二、serverless 脚手架安装、WebIDE中创建、vscode中配置
# 2.1 脚手架安装-三分钟部署一个项目
npm i serverless -g
serverless -v
查看支持的框架部署
sls registry
# 或者输入sls
sls

# 例如初始化egg项目
serverless init eggjs-starter(可以替换成sls registry已有的模板) --name egg-example
部署
sls deploy
# 2.2 在vscode中配置插件来开发serverless
通过该 VS Code 插件,您可以
- 拉取云端的云函数列表,并触发云函数
- 在本地快速创建云函数项目
- 使用模拟的 COS、CMQ、CKafka、API 网关等触发器事件来触发函数运行
- 上传函数代码到云端,更新函数配置
- 在云端运行、调试函数代码
界面上创建应用

- 在
vscode上安装插件

- 在
vscode安装后插件登录并且拉取应用
密钥地址 https://console.cloud.tencent.com/cam/capi 填入appID、secretID、secretKey即可拉取云函数到本地

- 切换地域查看函数

- 点击云函数,可以查看函数基本配置信息

- 下载函数代码到本地调试,点击下载图标选择要保存的路径

- 本地修改完代码后,上传函数代码到云端

- 本地调试云函数

# 2.3 WebIDE创建云函数实践
创建一个云函数

给云函数创建触发器来访问

创建了触发器后,就可以通过触发器里面的访问路径来访问云函数

我们可以在控制台修改代码,然后重新部署云函数,或者开启自动安装依赖等

# 三、Serverless Framework部署项目实战
# 3.1 Serverless Framework简介及应用场景
- Serverless Framework 是 Serverless 公司推出的一个开源的 Serverless 应用开发框架
- Serverless Framework 是 由 Serverless Framework Plugin 和 Serverless Framework Components 组成
- Serverless Framework Plugin 实际上是一个函数的管理工具,使用这个工具,可以很轻 松的部署函数、删除函数、触发函数、查看函数信息、查看函数日志、回滚函数、查看函数 数据等
Serverless Framework Components 可以看作是一个组件集,这里面包括了很多的 Components,有基础的 Components,例如 cos、scf、apigateway 等,也有一些拓展的 Components,例如在 cos 上拓展出来的 website,可以直接部署静态网站等,还有一些框 架级的,例如 Koa,Express等
- Serverless Framework 官网:https://www.serverless.com/
- Serverless Framework 中文网站:https://www.serverless.com/cn
- Github 地址:https://github.com/serverless/serverless
# Serverless Framework 应用场景
上面既然介绍了云函数和
serverless的区别,现在我们介绍下什么场景下需要使用serverless,而不是使用云函数,其实在实际开发过程中,我们都是使用serverless而不去使用云函数,毕竟云函数的使用场景受限,或者说比较基础。打一个简单的比方,在写js操作dom的时候,你会选择用原生js还是会使用jquery一样的比喻
基于云函数的命令行开发工具
通过
Serverless Framework,开发者可以在命令行完成函数的开发、部署、调试。还可以结合前端服务、 API 网关、数据库等其它云上资源,实现全栈应用的快速部署。
传统应用框架的快速迁移
# Serverless Framework 支持的平台
https://github.com/serverless/serverless/tree/master/docs/providers

# 基础组件
# 高阶组件



初始化项目