Serverless 多函数开发示例

01. 什么是 Serverless?

Serverless 的定义和理解在不同的角度和场景会有不同的解读,AWS 将 Serverless(在 AWS 云上) 定义为 “是一种用于描述服务、实践和策略的方式,使您能够构建更敏捷的应用程序,从而能够更快地创新和响应变化”的一种服务。 而红帽认为 Serverless 是 “可使开发人员专注构建和运行应用,而无需管理服务器” 的一种开发模型,并进一步将 Serverless 的产品分为两类:BaaS(后端即服务,让开发人员访问各种各样的第三方服务和应用) 与 FaaS(功能即服务,开发人员编写逻辑,部署到完全由平台管理的容器中,然后按需执行) 两种形态。 而 Serverless Framework 则认为 Serverless 是“一场由开发人员和企业推动,让单个开发人员可以完成高流量的应用开发,同时只将精力集中在产生价值的方面”的运动,

不管哪个方面,哪种角度,Serverless 都具有以下共同特点:

  1. 快速开发,快速部署
  2. 按量付费,降低成本
  3. 自动扩容,无需维护

而目前都是基于各个云厂商的 FaaS 服务来实现,如: 腾讯云的 SCF, AWS 的 Lambda, Azure 云的 Azure Funcitons 等。

Serverless 解决什么问题?

随着计算能力的加强,系统复杂度的增加,用户规模的增长,软件问题(如下, 也称为软件危机)也会发生指数型的增长。

  • 软件开发进度难以预测
  • 软件开发成本难以控制
  • 软件产品质量无法保证
  • 软件产品难以维护

而 Serverless 则可以通过以下方式提出了对于软件危机问题的解决方案:

  • 通过函数方式将系统功能拆分为更小的颗粒度,更便于设计,开发,测试和维护。
  • 通过按量计费大幅度减少资源闲置时的开销费用,降低服务器成本。
  • 通过自动扩容以及云平台的支持,大幅减少运维工作量以及软件维护成本。

同时在现在普遍倡导敏捷工作方式的现代工作环境中,Serverless 也为快速验证想法、迭代功能提供了开发方式的最佳实践,同时而不需要担心代码改动会影响系统的其他功能,也无需考虑部署前的服务器配置以及部署后的维护工作。

02. Serverless Framework

Serverless Framework 是业界非常受欢迎的无服务器应用框架,通过与众多一流云供应商如腾讯云,AWS 等的紧密合作,为广大开发者提供无需关心底层基础设施,即可编写和部署代码的无服务开发体验。

Serverless Framework 同时提供资源管理、自动伸缩、统计分析等能力,让广大开发者可以节省运维成本,真正做到“按量付费”的同时,也无需花费精力处理日志收集、异常统计等任务。

Serverless Framework 通过 CLI 工具与腾讯云紧密合作,为中国用户提供了基于组件(Serverless Components)的完整解决方案。覆盖了无服务应用编码、测试、部署等全生命周期,同时切合中国用户的使用场景和习惯。

为什么选用 Serverless Framework?

通过 Serverless Framework 的短短几行配置文件和 CLI 工具,开发者就可以额外获得:

  • 在本地进行函数开发,并一键部署到云端,无需额外适配云函数,也无需登录控制台。
  • 支持将传统开发框架的应用 (如:Express, Next.js, Flask, Laravel 等)部署为 Serverless 应用。
  • 在本地对函数代码进行调试,或使用远程开发模式在本地实时查看部署服务的日志输出,并进行调试。
  • 通过简单配置即可完成所有基础设施配置(如:API 网关、COS 存储、DB 链接等)
  • 快速切换应用的部署环境(开发,演示,生产),地区。
  • 更详细轻松的了解应用状态,查看日志、报错统计等信息。

03. 多函数开发示例

本示例使用 Serverless Framework 的多函数组件(multi-scf)和 PostgreSQL 组件(postgresql)实现,实现以下 3 个 API 接口。

  • GET /todos/ 获取所有的 todo 事项
  • POST /todos/ 创建新的 todo 事项
  • POST /todos/{id}/actions/complete 完成 todo 事项

并使用 Serverless Framework 提供的 invoke 和 logs 功能进行调试以及查看生产环境实时日志。

本示例相关代码可以在 Git 仓库 中获取。

步骤 1: 安装 Serverless Framework

执行以下命令安装 Serverless Framework

$ npm install serverless -g

如果之前您已经安装过 Serverless Framework,可以通过下列命令升级到最新版:

$ npm update serverless -g

此命令会安装最新的 Serverless Framework 到你的计算机,安装成功后可以通过 serverless 或者 sls 开始使用 Serverless Framework

步骤 2: 初始化多函数项目
$ sls init multi-scf-nodejs --name sls-demo-msn-todo

此命令会使用应用模板 multi-scf-nodejs 初始化名为 my-multi-scf-demo 的应用目录。初始化成功后该目录结构为

.
├── README.md
├── index.js
└── serverless.yml

这里的文件用途如下:

  • index.js:函数文件。
  • serverless.yml:Serverless Framework 配置文件。
    • app:应用名称,会作为应用识别的唯一标识。
    • stage:应用环境,通过不同环境,部署不同的应用实例。
    • component:组件名称
    • name:组件实例名称
    • inputs:组件部署的输入参数
步骤 3: 链接数据库

因为 Serverless 是无状态的(运行后就会销毁), 所以这里需要链接数据库用来持久化 todo 信息。添加数据库需要先借助 VPC 网络连接。

1. 添加 VPC

创建子目录 vpc 并在子目录中添加新的 serverless.yml 文件如下:

component: vpc # [必选]要使用组件,更多组件请查看 https://github.com/serverless-components
name: sls-demo-msn-vpc # [必选]组件实例名称

inputs:
  region: ap-guangzhou # 实例所属地区
  zone: ap-guangzhou-2 # 实例所属地区区域
  vpcName: ${
   name} # 实例名称,这里复用字段 name 作为名称。
  subnetName: sls-demo-msn-subnet # 子网的名称

更多 VPC 的配置内容,查看 VPC 私有网络 获取更多详情信息。

在子组件的配置文件中,app 名称会自动继承父目录的 serverless.yml 中的配置。 同时同一个应用的 app 名称需要保持一致。

2. 添加数据库

创建子目录 db 并在子目录中添加新的 serverless.yml 文件如下:

component: postgresql #(必填) 引用 component 的名称,当前用到的是 postgresql 组件
name: sls-demo-msn-DB # (必填) 该 postgresql 组件创建的实例名称

inputs:
  region: ap-guangzhou # 实例所属地区
  zone: ap-guangzhou-2 # 实例所属地区区域
  dBInstanceName: ${
   name}-${
   stage} 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值