开发函数计算的正确姿势 —— 使用 ROS 进行资源编排

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
函数计算FC,每月15万CU 3个月
简介: 前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。

前言

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考
ROS: 阿里云资源编排服务(ROS)助您简化云计算资源的管理。您可以遵循ROS定义的模板规范,在模板中定义所需云计算资源的集合及资源间依赖关系。ROS自动完成所有资源的创建和配置,实现自动化部署和运维。更多文档参考

备注: 本文介绍的技巧需要 Fun 版本大于等于 3.0.0+。

背景介绍

在 Fun 3.0 版本之前,Fun Deploy 功能只有一种部署方式,即直接使用 fun deploy 命令进行部署。

随着用户的不断反馈,虽然我们一直在增强 deploy 的功能,但我们 Fun 依旧在某些场景下做的依旧不够好:

  1. 没有完善的资源状态管理机制:原有的 Fun 部署的资源,只支持创建、更新两种操作。我们希望,在部署时,Fun 能够准确的感知到,哪些资源是新增的、哪些资源是更新的、哪些资源是被删除了的以及哪些资源是不变的。通过感知到这些资源的状态变化,Fun 才能作出正确的决策,达到预期的行为。
  2. 回滚机制缺失:一次部署往往涉及非常多的资源,而这些资源可能存在着错中复杂的依赖关系,其中的某服务部署失败,都可能会导致整个部署操作的失败,一旦部署失败,能否自动回滚到上一正确状态,是保证用户服务可用性的关键。
  3. 严格遵循模型定义:通常一个 template.yml 用来描述一个完整的应用,我们想为用户提供保证,你看到的 template.yml 的内容,就是你部署到线上的应用的最终形态。
  4. 难以明确部署差异。如果是一个许久没有更新的应用,用户可能很难作出直接将本地模板部署到生产的决定。难于作出这种决定的原因在于,用户也无法知晓当前的模板文件与线上是否为同步的状态。
  5. 支持有限的云资源。我们已经为用户提供了比较多的云资源的支持,但即使这样,也很难覆盖全用户的场景,我们需要纳入更多的云资源的管理。
  6. 无法快速创建多套开发环境。由于没有资源集合的概念,所以,使用不同的模板进行部署时,操作的单位永远是单个资源,所以,单个模板文件进行多次部署时,操作的永远都是同一批资源。当需要创建多套开发环境时,需要手动修改资源的唯一名称等标识。

为了解决这些问题,我们在 Fun 3.0 引入了一种全新的部署方式:ROS。

ROS 通过 Transform 宏实现了将函数计算的模板语法转换为 ROS 支持的语法。这意味着对于 Fun 规范文档 里描述的语法规则,ROS 是同样支持的。同时,ROS 支持的资源 也能在 Fun 模板文件中进行声明了,比如 RAM、函数工作流 等等。

ROS 部署方式的命令格式

可以使用 -h,查看 fun deploy 的帮助文档:

$ fun deploy -h
Usage: fun deploy [options] [resource]
  Deploy a serverless application.

  use 'fun deploy' to deploy all resources
  use 'fun deploy serviceName' to deploy all functions under a service
  use 'fun deploy functionName' to deploy only a function resource

  with '--only-config' parameter, will only update resource config without updating the function code

Options:
  -t, --template [template]  The path of fun template file.
  -c, --only-config          Update only configuration flags
  --use-ros                  Deploy resources using ROS
  --stack-name <stackName>   The name of the ROS stack
  -h, --help                 output usage information

当部署 ROS 相关资源时,需要在 fun deploy 后面追加 --use-ros 以及 --stack-name 两个参数,--use-ros 表示使用 ROS 的方式进行部署,--stack-name 表示使用 ROS 部署时使用的资源栈的名称。

如何理解资源栈呢?简单理解起来就是使用模板文件部署的一整套应用(云端资源集合)的 ID。即使同一个模板文件,也可以通过指定不同的资源栈的名称,实现部署多套应用。当通过模板文件进行部署时,会将模板文件的资源属性与所指定的资源栈进行对比并计算差异,进而完成线上资源的创建、删除、更新等操作。

ROS 部署示例

1. 初始化示例项目

直接执行下面的命令即可初始化一个简单的函数示例:

fun init -n RosDemo event-nodejs8

2. 项目打包

在体验上,由于 ROS 部署,要求资源必须“云化”。也就是没办法直接使用本地的代码资源。必须先通过 fun package 命令将资源上传到 oss:

fun package --oss-bucket bucket-name

3. 项目部署

最后将资源通过 ROS 的方式进行部署:

fun deploy --use-ros --stack-name bucket-name

ROS 更多使用场景举例

1. 快速创建多套应用部署环境

通过在部署时,指定不同的 stackName,可以部署应用到不同环境:

fun deploy --use-ros --stack-name test
fun deploy --use-ros --stack-name staging
fun deploy --use-ros --stack-name prod
... ...

2. 测试 demo 效果,并快速清理

从网上、模板或者官方文档看到相关示例,进行一些测试后,想要将这些资源全部清理干净。可以打开 ROS 控制台,找到想要删除的资源栈,点击删除后。我们测试时创建的所有云资源,就都会被正确的清理掉了。

3. 部署过程失败,自动回滚上一正确状态

在部署过程中,任何资源的操作失败,都会导致整个资源栈的回滚,通过这种机制,可以成功解决部署过程中的服务不可用的问题。

4. 在模板文件里描述更多资源

除了原有的 Fun 定义的资源外,现在 ROS 支持资源也可以在 Fun 的模板文件里声明了,比如我们可以通过下面的方式声明一个 oss 的 bucket 实例:

Bucket:
  Type: 'ALIYUN::OSS::Bucket'
  Properties:
    BucketName: 'oss-unzip-demo-bucket'

总结

通过引入 ROS 的部署方式,解决了我们在开篇提到的几个问题(除“部署差异查看”功能还在开发外,其他功能均可以在 Fun 3.0.0 版本中使用了)。

如果大家在使用 Fun 的过程中遇到了一些问题,可以在 github 上提 issue,或者加入我们的钉钉群 11721331 进行反馈。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
2月前
|
前端开发 大数据 数据库
🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
50 0
|
2月前
|
存储 设计模式 运维
Angular遇上Azure Functions:探索无服务器架构下的开发实践——从在线投票系统案例深入分析前端与后端的协同工作
【8月更文挑战第31天】在现代软件开发中,无服务器架构因可扩展性和成本效益而备受青睐。本文通过构建一个在线投票应用,介绍如何结合Angular前端框架与Azure Functions后端服务,快速搭建高效、可扩展的应用系统。Angular提供响应式编程和组件化能力,适合构建动态用户界面;Azure Functions则简化了后端逻辑处理与数据存储。通过具体示例代码,详细展示了从设置Azure Functions到整合Angular前端的全过程,帮助开发者轻松上手无服务器应用开发。
19 0
|
3月前
|
运维 Serverless API
Serverless 应用引擎使用问题之如何开发HTTP服务
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
弹性计算 关系型数据库 MySQL
使用资源编排 ROS 轻松部署单点网站——以 WordPress 为例
WordPress 是流行的开源CMS,阿里云的ROS(Resource Orchestration Service)提供模板化部署服务,简化云上环境如VPC、ECS、MySQL的创建。用户可通过ROS控制台选择模板一键部署WordPress,配置包括实例区、类型、系统盘及密码等参数。ROS模板定义了资源、参数和输出,自动处理依赖关系,实现云资源和应用的自动化部署。通过ROS,用户可以高效管理和更新整个资源栈,实现快速、可靠的云服务部署。
206 1
使用资源编排 ROS 轻松部署单点网站——以 WordPress 为例
|
2月前
|
监控 Serverless Go
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
|
2月前
|
Java Serverless Go
Golang 开发函数计算问题之在 Golang 中避免 "concurrent map writes" 异常如何解决
Golang 开发函数计算问题之在 Golang 中避免 "concurrent map writes" 异常如何解决
|
2月前
|
Serverless Go
Golang 开发函数计算问题之defer 中的 recover() 没有捕获到 如何解决
Golang 开发函数计算问题之defer 中的 recover() 没有捕获到 如何解决
|
3月前
|
监控 IDE Java
函数计算产品使用问题之如何不使用FC的IDE进行开发,并将开发好的应用部署到FC上
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
运维 前端开发 Serverless
云开发如何解决serverless对端的最后一公里问题
云开发如何解决serverless对端的最后一公里问题
|
4月前
|
JSON 弹性计算 运维
深入浅出资源编排ROS:构建云环境下的自动化运维利器引言
**资源编排ROS是阿里云提供的自动化管理工具,通过声明式模板定义云资源生命周期,简化复杂IT架构的运维。它解析JSON或YAML模板,自动创建、更新资源,确保状态与模板一致。ROS用于环境一致性、故障恢复、成本优化,是现代云管理的关键,助力企业提升效率和成本效益。**
138 3

相关产品

  • 函数计算
  • 推荐镜像

    更多