`
大涛学长
  • 浏览: 105632 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
前言
首先介绍下在本文出现的几个比较重要的概念:
函数计算(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 依旧在某些场景下做的依旧不够好:
没有完善的资源状态管理机制:原有的 Fun 部署的资源,只支持创建、更新两种操作。我们希望,在部署时,Fun 能够准确的感知到,哪些资源是新增的、哪些资源是更新的、哪些资源是被删除了的以及哪些资源是不变的。通过感知到这些资源的状态变化,Fun 才能作出正确的决策,达到预期的行为。
回滚机制缺失:一次部署往往涉及非常多的资源,而这些资源可能存在着错中复杂的依赖关系,其中的某服务部署失败,都可能会导致整个部署操作的失败,一旦部署失败,能否自动回滚到上一正确状态,是保证用户服务可用性的关键。
严格遵循模型定义:通常一个 template.yml 用来描述一个完整的应用,我们想为用户提供保证,你看到的 template.yml 的内容,就是你部署到线上的应用的最终形态。
难以明确部署差异。如果是一个许久没有更新的应用,用户可能很难作出直接将本地模板部署到生产的决定。难于作出这种决定的原因在于,用户也无法知晓当前的模板文件与线上是否为同步的状态。
支持有限的云资源。我们已经为用户提供了比较多的云资源的支持,但即使这样,也很难覆盖全用户的场景,我们需要纳入更多的云资源的管理。
无法快速创建多套开发环境。由于没有资源集合的概念,所以,使用不同的模板进行部署时,操作的单位永远是单个资源,所以,单个模板文件进行多次部署时,操作的永远都是同一批资源。当需要创建多套开发环境时,需要手动修改资源的唯一名称等标识。
为了解决这些问题,我们在 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 版本中使用了)。
本文作者:tanhe123
原文链接:https://yq.aliyun.com/articles/719104?utm_content=g_1000077709
本文为云栖社区原创内容,未经允许不得转载。
分享到:
评论

相关推荐

    linux——ros 摄像头驱动

    在Linux操作系统中,ROS(Robot Operating System)是一个广泛使用的开源框架,用于机器人系统的软件开发。ROS为机器人设备和应用程序提供了一个灵活的框架,允许不同组件之间的通信和数据交换。在这个场景中,我们...

    ROS学习历程(一)———— ros安装-附件资源

    ROS学习历程(一)———— ros安装-附件资源

    开源机器人操作系统——ROS (张建伟等著

    开源机器人操作系统——ROS (张建伟等著

    阿里云 专有云企业版 V3.6.0 资源编排ROS 开发指南 - 20180824.pdf

    "阿里云 专有云企业版 V3.6.0 资源编排ROS 开发指南" 阿里云专有云企业版资源编排开发指南是阿里云旗下的一个专门为企业用户设计的资源编排解决方案。该解决方案旨在帮助企业用户更好地管理和编排云资源,提高企业...

    阿里云 专有云企业版 V3.6.0 资源编排ROS 技术白皮书 - 20180824.pdf

    阿里云专有云企业版V3.6.0资源编排ROS技术白皮书是阿里云推出的资源编排技术白皮书,旨在帮助用户更好地使用阿里云的资源编排服务。该白皮书详细介绍了阿里云专有云企业版V3.6.0的资源编排技术,包括法律声明、通用...

    阿里云 专有云企业版 V3.5.2 资源编排ROS 用户指南 - 20180831.pdf

    资源编排控制台提供了多种资源类型,包括计算资源、存储资源、网络资源等。 六、管理资源 用户可以通过资源编排控制台管理资源,包括查看资源状态、停止资源、启动资源、删除资源等。资源编排控制台提供了多种管理...

    ROS开发指导手册 全中文

    ROS开发指导手册全中文 本手册主要介绍ROS(Robot Operating System,机器人操作系统)开发指导,涵盖了ROS的基础知识、工作空间和程序包、ROS节点和话题、修改项目源码、修改Autoware源码等内容。下面是本手册的...

    ROS机器人开发实践,ros机器人开发实践pdf,Python

    ROS(Robot Operating System)机器人操作系统是机器人领域广泛使用的开源软件框架,它为机器人硬件和软件提供了标准化接口,促进了不同组件间的交互。本实践教程聚焦于ROS在机器人开发中的应用,结合Python编程语言...

    阿里云 专有云企业版 V3.6.1 资源编排ROS 开发指南 - 20181105.pdf

    阿里云专有云企业版V3.6.1的资源编排ROS(Resource Orchestration Service)开发指南,是针对企业级用户设计的一份详细的技术手册。ROS是一种强大的自动化工具,允许用户通过模板定义和部署复杂的云基础设施,实现...

    阿里云 专有云Enterprise版 V3.5.0 资源编排ROS 产品简介 - 20180710.pdf

    8. **自定义函数和逻辑**:ROS模板支持使用内置的函数和条件语句,允许在模板中实现更复杂的逻辑判断和计算。 9. **API和SDK支持**:ROS提供了丰富的API和SDK,便于开发人员集成到自动化工作流或CI/CD流程中。 10....

    阿里云 专有云Enterprise版 V3.5.0 资源编排ROS 开发指南 - 20180710.pdf

    阿里云专有云Enterprise版V3.5.0的资源编排ROS(Resource Orchestration Service)开发指南,是针对企业级用户设计的一份详细的技术手册。ROS是一种强大的自动化工具,它允许用户通过模板定义和部署复杂的云资源结构...

    ROS机器人开发实践_ROS_

    ROS(Robot Operating System,机器人操作系统)是机器人领域广泛使用的开源框架,它为机器人软件开发提供了一个标准化的平台,包括各种工具、库以及消息传递机制,使得开发者能够方便地构建复杂机器人应用。...

    ROS培训课件——广州站

    ROS(Robot Operating ...通过深入学习这个“ROS培训课件——广州站”,你将具备开发和调试ROS系统的实际技能,这对于机器人研究、开发和应用都是非常宝贵的。无论你是初学者还是有一定经验的开发者,都能从中受益。

    阿里云 专有云企业版 V3.6.2 资源编排ROS 开发指南 - 20181228.pdf

    阿里云专有云企业版V3.6.2的资源编排ROS(Resource Orchestration Service)开发指南,是针对企业级用户管理和部署云资源的重要工具。ROS允许用户通过模板定义和自动化部署复杂的云资源结构,提高基础设施管理的效率...

    阿里云 专有云企业版 V3.6.2 资源编排ROS 技术白皮书 - 20181228.pdf

    资源编排服务(Resource Orchestration Service,简称ROS)是阿里云专有云企业版V3.6.2中的一项关键技术,它旨在帮助用户高效、自动化地管理云计算资源。通过ROS,用户可以定义模板,模板中包含了创建和配置云资源的...

    阿里云 专有云企业版 V3.6.0 资源编排ROS 用户指南 - 20180824.pdf

    阿里云专有云企业版V3.6.0的资源编排服务ROS(Resource Orchestration Service)是一款强大的工具,旨在帮助企业用户更高效地管理和部署云计算资源。ROS允许用户通过模板定义、创建和管理复杂的云资源堆栈,实现自动...

    阿里云 专有云企业版 V3.6.2 资源编排ROS 用户指南 - 20181228.pdf

    阿里云专有云企业版V3.6.2的资源编排服务ROS(Resource Orchestration Service)是一款强大的工具,旨在帮助企业用户更高效地管理和部署云计算资源。ROS允许用户通过编写模板来定义和自动化资源的创建、配置和更新...

    ROS2编程基础课程文档.pdf

    超过10年的ROS项目通过发展一个由数十万开发人员和用户组成的全球社区,为机器人技术创建了一个庞大 的生态系统,他们为这些软件做出贡献并进行了改进。 ROS 2由该社区开发并为该社区开发,他们将成为未 来的管理者...

Global site tag (gtag.js) - Google Analytics