使用 Oracle Cloud Infrastructure 批处理服务部署云原生批处理负载

简介

现代应用严重依赖后台处理来处理数据转换、报告生成、媒体处理和大规模模拟等任务。这些工作负载通常是计算密集型的,异步运行,并且在规模和频率上可能会有很大差异。使用传统方法管理此类工作负载可能很复杂,需要团队预配基础设施、构建调度系统和手动处理扩展。

Oracle Cloud Infrastructure (OCI) Batch Service 旨在简化此过程。它提供了一种完全托管的方式来大规模运行批处理工作负载,使您能够在平台处理执行和资源管理的同时专注于定义作业。

在本教程中,我们将探讨 OCI Batch 如何工作、其体系结构以及如何在实际场景中有效地使用它。

OCI Batch 可解决哪些问题?

运行批处理工作负载通常涉及多层复杂性。团队通常需要提前预配计算资源,实施自己的作业调度机制,并构建逻辑来处理重试、故障和扩展。即使在使用 Kubernetes 等平台时,也需要大量精力来配置和维护环境。这会增加运营开销并减慢开发速度。

OCI 批处理通过提供统一的服务来管理批处理工作负载的生命周期,从而解决这些挑战。它消除了构建自定义排程引擎或管理基础设施的需要,使团队能够以更少的运营工作更有效地运行大规模作业。

OCI 批处理服务概览

OCI Batch 充当管理和运行批处理工作负载的集中服务。提交作业时,会将其置于队列中,并根据计划决策和资源可用性进行处理。该服务评估作业需求,并动态预配计算能力以运行任务。每个任务都在一个容器化环境中运行,以确保一致性和隔离性。执行完成后,将存储输出并生成日志以进行监视和故障排除。

此方法提供了一个简化的工作流,可以在单个托管服务中处理作业提交、调度、执行和观测。

深入了解架构

OCI 批处理的体系结构遵循从作业提交到执行和输出的明确流,如图中所示。

OCIBatchArch

该过程从用户使用 OCI 控制台、CLI 或 API 提交作业时开始。此请求与充当基础配置层的 Batch Context 相关联。上下文定义了网络、计算组和日志记录等关键设置,确保所有作业都在一致的环境中运行。

然后将作业组织到 Job Pools 中,以提供逻辑分组并帮助控制调度行为。这在跨不同团队或环境管理工作负载时特别有用,因为它允许优先排序和隔离。每个提交的作业代表一个完整的工作单元,可以包括一个或多个任务。任务是使用定义的任务环境运行的最小可执行单元。这允许作业被分解为可以独立运行或按顺序运行的较小部分,具体取决于定义的依赖项。

提交后,作业将放置到 Queue 中,它们将等待资源可用。调度程序会不断评估队列,并根据优先级和容量选择作业。这样可以确保工作负荷得到高效处理,而不会使系统受损。

为了执行这些任务,OCI Batch 使用 Compute Fleets 表示底层计算能力。这些组是根据负载需求动态预配的。提交更多作业后,将分配更多容量;在需求减少时,将缩减资源。这可确保高效使用,而无需人工干预。

执行后,结果存储在 OCI storage services 中,并捕获日志和度量以获得可见性。这提供了作业执行和系统性能的完整视图。

为什么这种架构很重要

OCI Batch 的一个关键优势在于它在作业提交和执行之间进行了分离。系统使用队列和调度逻辑来高效管理工作量,而不是立即运行每个作业。OCI Batch 采用此设计,无需预配基础设施即可满足突发峰值需求。它还确保可以首先运行优先级更高的作业,从而提高共享环境中的可预测性。

通过动态管理资源分配和通过队列控制执行,该服务可以在性能、可扩展性和成本效率之间实现平衡。

OCI Batch 的核心组件

OCI Batch 是基于一组核心组件构建的,这些组件协同工作以提供批处理功能。

现实生活中的示例:视频处理管道

考虑一下需要处理数千个视频的情况。例如,转换格式、生成缩略图或应用过滤器。

使用 OCI Batch,可以将每个视频视为作业中的单独任务。这些任务可以在多个计算资源中并行运行,从而显著缩短总处理时间。随着工作负载需求的增加,OCI Batch 会自动预配额外的计算能力来处理任务。处理完成后,将存储结果并生成日志进行监视。此模式可以应用于许多其他用例,包括数据管道、机器学习工作负载和工程模拟。

Prerequisites

请遵循 IAM 策略示例,以允许 OCI 批处理服务访问所需的 OCI 服务。

如果您要使用 OCI CLI 创建作业,则还需要下载 OCI CLI

任务 1。创建批上下文

批上下文是批工作量的顶层配置层。它包括网络、组、权利、作业优先级设置和日志记录配置。

要创建批上下文,请转至批服务,然后选择批上下文,然后选择创建批上下文。根据您的环境填写以下详细信息。

  1. 名称
  2. 区间
  3. 说明
  4. VCN
  5. 子网
  6. 权利(可选)
  7. 作业优先级配置(可选)
  8. 日志记录设置

    创建批上下文

任务 2。创建作业池

作业池只是作业的逻辑容器。运行作业时,将选择一个作业池以创建该作业池。要创建作业池,您只需要以下配置。

  1. 名称
  2. 说明
  3. 区间

    创建作业池

任务 3。创建任务概要信息

任务配置文件是一种可重用的配置,用于定义任务所需的最小计算资源,例如 1 个 OCPU 和 16 GB 内存。可以创建多个配置文件,每个配置文件对应于不同的资源需求。要创建任务配置文件,您需要以下配置:

  1. 名称
  2. 说明
  3. 最小 OCPU 数—在此示例中,您可以将其设置为 1
  4. 最小内存 (GB) - 在此示例中,可以将其设置为 8

    创建任务概要信息

任务 4。设置本地环境和推送容器映像

  1. 从 GitHub 中提取代码并移至正确的目录。

     git clone https://github.com/oracle-devrel/technology-engineering.git
     cd technology-engineering/app-dev/developer-tools-and-lowcode/batch/video-transcoding/ 
    
  2. 在 OCI Container Registry (OCIR) 中创建存储库。

    创建容器注册表中

  3. 将容器映像推送到 OCIR。映像路径应与您的区域、租户名称空间、资料档案库名称和映像标记(即 iad.ocir.io/<tenancy-namespace>/convert_mp4_to_avi:latest)匹配

     docker build -t <image>:<tag> .
     docker push <image>:<tag>
    

    将容器推送到 OCIR

  4. 为输入和输出视频创建对象存储桶。

    创建输入存储桶

    创建输出存储桶

  5. 将视频文件上载到对象存储

任务 5。创建任务的环境

任务环境是任务的运行时配置。要设置任务环境,您需要:

  1. 名称
  2. 说明
  3. 安全上下文:
    1. 用户 ID:将此值设置为 1
    2. 组 ID:将此值设置为 1
    3. 文件系统组 ID:将此值设置为 1
  4. 工作目录:将此设置为 /video

    创建任务的环境

任务 6。提交作业

有多种方法可以将作业提交到批处理服务。在本教程中,我们将使用 OCI CLI。

  1. 创建名为 video_conversion_job.json 的文件
  2. 将以下内容复制并粘贴到 video_conversion_job.json
     {
     "batchJobPoolId": "JOB_POOL_OCID",
     "compartmentId": "COMPARTMENT_ID",
     "description": "Task to convert video from MP4 to AVI format",
     "displayName": "convert_video",
     "maxWaitSeconds": 0,
     "tasks": [
         {
         "batchJobPoolId": "JOB_POOL_OCID",
         "compartmentId": "COMPARTMENT_ID",
         "description": "Task to convert video from MP4 to AVI format",
         "displayName": "convert_video",
         "maxWaitSeconds": 0,
         "tasks": [
             {
               "batchTaskEnvironmentId": "TASK_ENVIRONMENT_OCID",
               "batchTaskProfileId": "TASK_PROFILE_OCID",
               "description": "Task to convert video from MP4 to AVI format",
               "environmentVariables": [
                 {
                   "name": "INPUT_BUCKET",
                   "value": "input_bucket"
                 },
                 {
                   "name": "INPUT_OBJECT",
                   "value": "input.mp4"
                 },
               {
                   "name": "OCI_BUCKET",
                   "value": "output_bucket"
               },
               {
                   "name": "OUTPUT_FILENAME",
                   "value": "output.avi"
               },
               {
                   "name": "OCI_NAMESPACE",
                   "value": "TENANCY_NAMESPACE"
               },
               {
                   "name": "OCI_REGION",
                   "value": "REGION"
               }
               ],
               "fleetAssignmentPolicy":
               {
                   "type": "BEST_FIT"
                 },
               "name": "convert_video",
               "type": "COMPUTE"
             }
         ],
         "waitForState": [
           "ACCEPTED"
         ],
         "waitIntervalSeconds": 0
              
    

    根据您的环境替换以下内容:

    • 职务池标识
    • 区间标识
    • 任务 _ENVIRONMENT_OCID
    • TASK_PROFILE_OCID
    • TENANCY_NAMESPACE
    • REGION
  3. 运行以下命令:

     oci batch batch-job create --from-json file://video_conversion_job.json
    

    此作业最多需要 10 分钟才能完成。在 OCI 控制台中查看作业处于什么阶段。

任务 7。验证结果

  1. 在 OCI 控制台中,转至对象存储。
  2. 查找输出存储桶并验证是否存在转码视频。

OCI 批处理与传统方法

传统的批处理解决方案通常需要管理基础设施、配置排程引擎以及手动处理扩展。这增加了复杂性和运营开销。但是, OCI Batch 通过提供自动处理调度、执行和资源预配的托管环境来消除这些挑战。这使得在没有深厚基础设施专业知识的情况下更轻松地运行大规模工作负载。

最佳做法

要有效地使用 OCI Batch ,工作负载设计时应考虑可扩展性。将大型作业分成较小的任务,可以实现更好的并行执行并提高性能。此外,还必须定义适当的任务配置文件,以便有效地分配资源。应启用适当的日志记录和监视,以确保对作业执行的可见性。使用作业池和优先级有助于确保按时执行关键工作负载,尤其是在共享环境中。

小结

OCI 批处理服务提供了一种简化的可扩展方法来在云中运行批处理工作负载。通过在单个服务中处理作业编排、调度和计算预配,降低运营复杂性并提高效率。对于处理大规模、计算密集型工作负载的组织,OCI Batch 提供了一个可靠、灵活的解决方案,让团队能够专注于交付成果,而不是管理基础设施。

相关链接

确认

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心