注意:

基于 OCI 负载平衡器 HTTP 请求自动缩放 Oracle Cloud Infrastructure 实例池

简介

在本教程中,我们将了解如何根据 OCI 负载平衡器收到的 HTTP 请求数自动扩展 Oracle Cloud Infrastructure (OCI) 实例池。我们将讨论三个主要议题。

OCI 监视:使用 OCI 监视服务主动和被动地使用指标和预警功能监视云资源。OCI 监视服务使用度量来监视资源和预警,以便在这些度量满足警报指定的触发器时通知您。

OCI 通知:当 OCI 中的资源出现问题时,您可以通过受支持的端点获取人工可读的消息,包括使用预警、事件规则和连接器发送的电子邮件和短信 (SMS)。您还可以通过定制 HTTPS 端点和 OCI 函数自动执行任务。

OCI Functions: OCI Functions 是一个完全托管、多租户、高度可扩展的按需函数即服务平台。它基于企业级 OCI 构建,由 Fn Project 开源引擎提供支持。当您需要专注于编写代码以满足业务需求时,请使用 OCI Functions(有时缩写为 Functions,以前称为 Oracle Functions)。

高级别体系结构

T3_1

注:

目标

先决条件

任务 1:设置动态组

转到域,单击动态组并创建以下组。

动态组名:MyFunctions

ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}

任务 2:创建策略

转到策略并创建以下策略。

策略名:FunctionsPolicies

Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage compute-management-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage load-balancers in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read metrics in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read alarms in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-pools in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME

任务 3:创建 OCI 容器注册表

  1. 转到开发人员服务,单击容器注册表并为 Fn 映像创建专用资料档案库。

    资料档案库名称:lab/fn-autoscale-instance-pool

    T3_1

  2. 检查系统信息库并记下名称空间

    T3_1

  3. 打开安装了 OCI CLI 和 Docker 的终端 shell,然后继续登录注册表。请检查您所在区域的正确 URL。在本教程中,我们将使用注册表 URL 为 gru.ocir.io巴西东部(圣保罗)区域。

    docker login gru.ocir.io
    Username: <your container namespace>/youruser
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    T3_3

任务 4:创建 Python OCI 函数以自动缩放实例池

注:请确保已选择专用子网,即流池的同一子网。

  1. 转到 OCI 控制台,然后单击开发人员服务。在 Functions(函数)下,单击 Applications(应用程序)Create application(创建应用程序)

    T9_1

  2. 创建一些配置以设置缩放大小。

    注:这些配置变量用于确定函数将用于横向收缩和横向收缩实例池的值。

    密钥名称
    INSTANCE_POOL_TARGET_SIZE 设置新实例池大小的值
    INSTANCE_POOL_DESIRED_SIZE 设置实例池的常规大小

    在本教程中,我们将使用一个包含 1 个实例的实例池并横向扩展到 2

    T4_2

  3. 转到安装了 Docker、OCI CLI、Fn Project CLI 的终端 shell,然后运行以下命令来初始化函数。

    注:如果您执行了这些任务,则 Docker 登录命令现在已经执行,如果不是,请继续执行任务 3.3 中的 Docker 登录。

    mkdir lab
    cd lab
    fn create context oci-cloud --provider oracle
    fn use context oci-cloud
    fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID
    fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com
    fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab
    fn init --runtime python fn-autoscale-instance-pool
    cd fn-autoscale-instance-pool
    ls -lrt
    

    注:在本教程中,我们将使用巴西东部(圣保罗)区域,如果您使用的是其他区域,则需要更改 api-urlregistry 位置。

    T4_3

    init 命令将在 func.py 上创建 Hello World 函数。我们将覆盖此代码。

  4. 从此处获取 Python 函数示例代码:func.py ,并覆盖在函数 init 命令期间创建的本地 func.py

    # Copy the function code from this lab and save it on /tmp/func.py in your shell machine
    ls -lrt /tmp/func.py
    
    # Overwrite the func.py with tha lab's code
    cp /tmp/func.py func.py
    
    # Add the OCI package on the requirements.txt file, this will be needed to work with OCI.
    echo -e "\noci" >> requirements.txt
    
    # Check if requirements.txt has two lines
    cat requirements.txt
    

    T9_1

  5. 构建新代码并部署函数。

    ls -lrt
    fn deploy --app MyApp
    

    T4_1

任务 5:创建 OCI 通知

  1. 转到 OCI 控制台,然后单击开发人员服务。在应用程序集成下,选择通知,然后单击创建主题

    名称:AutoScaleTopic

    T5_1

  2. 单击订阅可创建新订阅并选择在任务 4 中创建的函数。

    T5_2

任务 6:创建要横向扩展的预警定义(将实例池大小调整为目标值)

  1. 转到 OCI 控制台,然后单击观测和管理。在监视下,选择预警定义,然后单击创建预警

    注:此预警的阈值、间隔是为教程定义的,您可以根据您的应用程序定制自己的需求。

    警报名称:instance_pool_scale_OUT

  2. 输入以下信息以定义预警。

    1. 度量说明部分中,输入以下信息。

      • 度量名称空间:oci_lbaas
      • 度量名:HttpRequests
      • 间隔:1 minute
      • 统计信息:Max
    2. 度量维部分中,输入以下信息。

      • 第一个度量维:

        • 维名称:resourceID
        • 维值:选择负载平衡器 OCID。
      • 第二个度量维:

        • 维名称:backendSetName
        • 维值:选择 backendSet 名称。

      T6_1

    3. 触发器规则 1 部分中,输入以下信息。

      • 运算符:greater than
      • 值: 30
      • 报警正文:连接数高于预期,启动缩放过程。

      T6_1

  3. 输入以下信息以定义预警通知。

    1. 目标部分中,输入以下信息。

      • 目的地服务:选择通知
      • 区间:选择您的区间。
      • 主题:选择您的主题。
    2. 消息格式部分中,选择发送漂亮的 JSON 消息(带换行符的原始文本),并为测试目的,选择重复通知?,其中 1 分钟为通知频率

    T6_1

  4. 单击高级选项并添加新标记。

    注:为了定义缩放、传入或传出的类型,这是必需的标记。

    标记名称空间:选择无(应用自由形式标记)
    标记键:autoscaling_type值:out

    T6_1

任务 7:创建要缩放的预警定义(将实例池大小调整回所需大小)

  1. 转到 OCI 控制台,然后单击观测和管理。在监视下,选择预警定义,然后单击创建预警

    注:此预警的阈值、间隔是为教程定义的,您可以根据您的应用程序定制自己的需求。

    警报名称:instance_pool_scale_IN

  2. 输入以下信息以定义预警。

    1. 度量说明部分中,输入以下信息。

      • 度量名称空间:oci_lbaas
      • 度量名:HttpRequests
      • 间隔:1 minute
      • 统计信息:Max
    2. 度量维部分中,输入以下信息。

      • 第一个度量维:

        • 维名称:resourceID
        • 维值:选择负载平衡器 OCID。
      • 第二个度量维:

        • 维名称:backendSetName
        • 维值:选择 backendSet 名称。
    3. 触发器规则 1 部分中,输入以下信息。

      • 运算符:less than
      • 值: 30
      • 预警正文:连接计数返回到可接受的值,调用缩放以将实例数减少到所需的值。

      T7_1

  3. 输入以下信息以定义预警通知。

    1. 目标部分中,输入以下信息。

      • 目的地服务:选择通知
      • 区间:选择您的区间。
      • 主题:选择您的主题。
    2. Message Format(消息格式)部分中,选择 Send Pretty JSON messages (raw text with line breaks)

  4. 单击高级选项并添加新标记。

    注:为了定义缩放、传入或传出的类型,这是必需的标记。

    标记名称空间:选择无(应用自由形式标记)
    标记键:autoscaling_type值:in

    T7_1

任务 8:创建装入并检查报警工作

  1. 获取 LoadBalancer IP,并在端口 80 上运行对应用程序的多次调用。打开 shell 控制台并运行以下代码来调用负载平衡器。

    i=1
    while true
    do
    echo "Request $i"
       curl http://your-ip-here
       ((i++))
       echo ""  # Prints a newline for better readability between requests
    done
    

    简单应用程序加载的输出。

    T8_1

    注:这是用于演示方案的简单 HTTP Apache Web 服务器。

  2. 检查实例池的实际大小和状态。对于本教程,我们有一个大小为 1 的实例池。

    T8_1

  3. 打开预警定义以查看度量并检查预警是否触发。

    T8_1

    T8_1

  4. 几分钟后,根据度量间隔,它将触发横向扩展函数。

    打开实例池并检查状态,即缩放目标实例计数2

    T8_1

    扩展过程后,您可以看到实例池大小为 2

    T8_1

  5. 停止 shell 脚本,等待横向扩展转换的报警恢复为 OK ,然后观察报警以进行横向扩展。等待几分钟,直到两个警报都更新,并观察缩放的警报何时触发。

    T8_1

    现在,放大报警处于火灾状态。

    T8_1

    请注意,HttpRequests 已降至低于阈值 30 的数字。

    T8_1

    实例池收缩已启动。

    T8_1

    请注意,实例池大小返回到所需的值 1

    T8_1

确认

更多学习资源

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

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