通过将 OCI 队列与 OCI 功能集成来优化异步工作流
Oracle Cloud Infrastructure (OCI) 队列服务允许以异步方式在系统之间发送消息,从而允许您分离系统并提高其性能。它设计用于处理大量事务处理数据,并确保在处理消息时不会丢失或重复。
OCI 队列服务根据生产者和使用者的吞吐量进行完全管理和自动扩展,采用开放标准支持与任何客户端或生产商的通信,同时尽可能减少工作量。无服务器应用通常依赖于各种服务(API 网关、函数等)的组合来正常运行。但是,为了使这些分布式组件相互通信,队列服务至关重要。它还允许您的应用将通信扩展到其他 OCI 组件,甚至在 OCI 外部。
体系结构
此引用体系结构将示例 Python 应用程序部署到 Oracle Container Engine for Kubernetes (OKE),这会定期轮询已配置的队列来提取新消息,使用提取的消息调用已配置的函数,并在成功执行时从队列中删除消息。
应用程序在与 OCI 服务交互时将自身验证为 instance_principal。队列和函数可以位于任何区域中,并且必须在创建堆栈期间指定队列和函数 OCID。如果需要在 Terraform 部署后更新队列和函数 OCID,则可以编辑 Kubernetes 部署构件(创建的 OCI DevOps 项目的一部分)。
Terraform 部署包括创建 OCI DevOps 服务所需的管道和系统信息库,以自动执行将应用程序源代码始终投入生产所需的步骤。应用程序源代码托管在 DevOps 代码资料档案库上。然后,用户可以将代码提交到资料档案库中,这将触发构建管道的启动。
下图说明了此参考体系结构。
queue-fn-automation-arch-oracle.zip
该体系结构包含以下组件:
- 区域
Oracle Cloud Infrastructure 区域是一个局部地理区域,包含一个或多个称为可用性域的数据中心。区域独立于其他区域,广阔的距离可以将其分开(跨国家甚至大陆)。
- DevOps 项目
实施 CI/CD 工作流所需的 DevOps 资源的逻辑分组。DevOps 资源可以是构件、构建管道、部署管道、外部连接、触发器和环境。DevOps 项目使您可以轻松地为所有 DevOps 资源启用日志记录、监视和通知。
- 构建管道
构建管道从源代码资料档案库获取提交 ID,然后使用该源代码运行构建指令。构建管道为构建流程定义一组阶段:构建、测试和编译软件构件、将构件交付到 OCI 资料档案库以及(可选)触发部署。您可以在构建规范文件中定义构建运行的流和说明。
- 代码资料档案库
由 DevOps 服务托管的专用 Git 系统信息库。您可以使用 OCI DevOps 代码资料档案库存储、管理和开发源代码。
- 部署管道
向目标环境提供和部署一组构件的一系列步骤。可以通过定义可以串行或并行运行的阶段来控制软件发行版的流和逻辑。
- 部署阶段阶段是在管道运行期间发生的单个操作。DevOps 部署管道包括以下预定义的阶段类型,供您在发布过程中使用:
- 滚动部署:向 OKE、函数或实例组增量发行版。
- 等待:等待 N 秒。
- 人工审批:在提供审批时继续;在拒绝审批时停止。
- 调用函数:通过调用函数并传递请求参数的构件来执行定制任务或集成。
- DevOps 构件
DevOps Artifact 是对构成应用程序的任何文件、二进制文件、程序包、清单或映像的引用或指针。创建构件时,通知 Oracle DevOps 实际构件的源位置。DevOps 支持 OCI 容器映像注册表和 OCI 构件注册表资料档案库。
- OCI 日志记录和通知服务
OCI 日志记录服务存储与部署相关的日志。部署运行时输出和部署的最终结果显示为日志条目。通过 OCI 通知服务,您可以了解部署项目及其资源的最新状态并采取任何必要的操作。例如,当重要事件(例如部署管道中的阶段等待审批)时,会通知您。收到通知消息时,您可以转至 DevOps 部署管道并批准该阶段。
- 部署环境
环境是部署构件的客户计算资源的集合。环境可以是函数、计算虚拟机 (VM) 或裸金属实例,也可以是 OKE 集群。
- OKE 集群:适用于 Kubernetes 的 OCI 容器引擎是一项完全托管、可扩展且高可用性服务,可用于将容器化应用部署到云中。
- 计算实例:利用 OCI 计算服务,您可以在云中预配和管理计算主机。您可以部署计算实例,其中配置满足您在 CPU、内存、网络带宽和存储方面的资源需求。
- 功能:Oracle Functions 是一个完全托管的多租户、高度可扩展的按需功能即服务平台。该服务基于企业级 Oracle Cloud Infrastructure 构建,由 Fn 项目开源引擎提供支持。
环境可以位于与部署管道区域不同的 OCI 区域中。通过这种隔离,开发人员可以使用相同的部署管道在多个 OCI 区域中部署。
- IAM 动态组和策略
动态组是特殊类型的组,其中包含与您定义的规则匹配的资源(例如计算实例)(因此,在创建或删除匹配的资源时,成员资格可以动态更改)。这些实例充当“主要”角色,可以根据您为动态组编写的策略对服务进行 API 调用。
策略是指定谁可以访问哪些资源以及如何访问的文档。在组和区间级别授予访问权限,这意味着您可以编写策略来向组授予特定区间内或租户本身的特定类型的访问权限。
考虑事项
部署解决方案和使用应用程序时,请考虑以下方面:
- 部署解决方案
设置必需的动态组和关联的策略需要具有管理权限。OCI 用户名和验证令牌是授权 OCI DevOps Git 系统信息库和在 OKE 中设置密钥所必需的。
- 使用应用程序
通过在
queue_automation.py程序开始时修改变量并在 OKE 中设置 OCIR 密钥,可以在创建的 DevOps 项目中处理 Python 应用程序参数的调整。
