zoukankan      html  css  js  c++  java
  • 基于 Amazon SQS 进行扩展

    https://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/as-using-sqs-queue.html

    此配置有三个主要部分:

    • 一个 Auto Scaling 组,用于管理处理来自 SQS 队列的消息的 EC2 实例。

    • 一个发送到 Amazon CloudWatch 的自定义指标,用于衡量 Auto Scaling 组中每个 EC2 实例的队列的消息数。

    • 一个目标跟踪策略,配置您的 Auto Scaling 组根据自定义指标和设定的目标值进行扩展。CloudWatch 警报调用该扩展策略。

    下图演示了此配置的架构。

    
                    使用队列架构图的 Amazon EC2 Auto Scaling
     

    配置 Amazon SQS 扩展

    以下部分向您说明如何使用 AWS CLI 为 SQS 队列设置自动扩展。前面的过程假设您已经有一个队列(标准队列或 FIFO 队列)、一个 Auto Scaling 组以及 EC2 实例(运行使用队列的应用程序)。

    步骤 1:创建 CloudWatch 自定义指标

    首先,从您的 AWS 账户中读取指标以创建自定义计算指标。然后,计算前面的章节中建议的每个实例的积压指标。最后,按照 1 分钟的粒度将该数字发布到 CloudWatch。

    只要可能,您应该按照 1 分钟的频率根据 EC2 实例指标进行扩展(也称为详细监控),因为这会确保更快地响应使用率变化。如果将随指标扩展的频率设置为 5 分钟,可能会导致响应速度变慢,并根据过期的指标数据进行扩展。默认情况下,为 EC2 实例启用基本监控,也就是说,实例的指标数据以 5 分钟为间隔提供。您可以启用详细监控,以按照 1 分钟的频率获取实例的指标数据。有关更多信息,请参阅 使用 Amazon CloudWatch 监控 Auto Scaling 组和实例

    创建 CloudWatch 自定义指标

    1. 使用 SQS get-queue-attributes 命令获取在队列中等待的消息数 (ApproximateNumberOfMessages):

       
      aws sqs get-queue-attributes --queue-url https://sqs.region.amazonaws.com/123456789/MyQueue 
        --attribute-names ApproximateNumberOfMessages
    2. 使用 describe-auto-scaling-groups 命令获取组的运行容量,这是处于 InService 生命周期状态的实例数。此命令返回 Auto Scaling 组的实例及其生命周期状态。

       
      aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg
    3. 通过将 ApproximateNumberOfMessages 指标除以队列的运行容量指标来计算每个实例的积压。

    4. 使用 AWS CLI 或 API,按照 1 分钟的粒度将结果发布为 CloudWatch 自定义指标。自定义指标是使用您选择的指标名称和命名空间定义的。自定义指标的命名空间不能以“AWS/”开头。有关发布自定义指标的更多信息,请参阅 Amazon CloudWatch 用户指南 中的发布自定义指标主题。

      以下是一个 CLI put-metric-data 命令的示例。

       
      aws cloudwatch put-metric-data --metric-name MyBacklogPerInstance --namespace MyNamespace 
        --unit None --value 20 --dimensions MyOptionalMetricDimensionName=MyOptionalMetricDimensionValue

    应用程序发出所需的指标之后,数据发送到 CloudWatch。该指标会显示在 CloudWatch 控制台中。您可以登录到 AWS 管理控制台并导航到 CloudWatch 页面来访问它。然后,通过导航到指标页面或者使用搜索框搜索指标来查看指标。如需有关查看指标方面的帮助,请参阅 Amazon CloudWatch 用户指南 中的查看可用指标

    步骤 2:创建目标跟踪扩展策略

    然后,创建目标跟踪扩展策略,指示 Auto Scaling 组在应用程序负载变化时动态地增加或减少组中正在运行的 EC2 实例。您可以使用目标跟踪扩展策略,因为扩展指标是与组容量成比例增加或减少的使用率指标。

    创建目标跟踪扩展策略

    1. 使用以下命令可以在您的主目录的 config.json 文件中为扩展策略指定目标值。

      对于 TargetValue,计算每个实例的可接受积压指标并在此处输入。要计算此数值,请考虑正常延迟值并将其除以处理一条消息所需的平均时间。

       
      $ cat ~/config.json
      {
         "TargetValue":100,
         "CustomizedMetricSpecification":{
            "MetricName":"MyBacklogPerInstance",
            "Namespace":"MyNamespace",
            "Dimensions":[
               {
                  "Name":"MyOptionalMetricDimensionName",
                  "Value":"MyOptionalMetricDimensionValue"
               }
            ],
            "Statistic":"Average",
            "Unit":"None"
         }
      }
    2. 使用 put-scaling-policy 命令以及在前面的步骤中创建的 config.json 文件创建扩展策略:

       
      aws autoscaling put-scaling-policy --policy-name my-scaling-policy --auto-scaling-group-name my-asg 
        --policy-type TargetTrackingScaling --target-tracking-configuration file://~/config.json

      这会创建两个警报:一个用于增加实例数量,另一个用于减少实例数量。它还将返回注册到 CloudWatch 的策略的 Amazon 资源名称 (ARN),CloudWatch 使用该名称在突破指标时调用扩展。

    步骤 3:测试扩展策略

    在您完成设置后,验证您的扩展策略是否正常工作。要进行测试,可以增加 SQS 队列中的消息数,然后验证您的 Auto Scaling 组是否启动另一个 EC2 实例,也可以减少 SQS 队列中的消息数,然后验证 Auto Scaling 组是否终止一个 EC2 实例。

    测试扩展函数

    1. 按照教程:将消息发送到 Amazon SQS 队列中的步骤将消息添加到队列。请确保您增加了队列中的消息数量,使得每个实例的积压指标超过目标值。

      您的更改触发 CloudWatch 警报可能需要几分钟时间。

    2. 使用 describe-auto-scaling-groups 命令确认该组已启动一个实例:

       
      aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

    测试缩减函数

    1. 按照教程:将消息发送到 Amazon SQS 队列中的步骤从队列中删除消息。请确保您减少了队列中的消息数量,使得每个实例的积压指标低于目标值。

      您的更改触发 CloudWatch 警报可能需要几分钟时间。

    2. 使用 describe-auto-scaling-groups 命令确认该组已终止一个实例:

       
      aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg
  • 相关阅读:
    1、编写一个简单的C++程序
    96. Unique Binary Search Trees
    python 操作redis
    json.loads的一个很有意思的现象
    No changes detected
    leetcode 127 wordladder
    django uwsgi websocket踩坑
    you need to build uWSGI with SSL support to use the websocket handshake api function !!!
    pyinstaller 出现str error
    数据库的读现象
  • 原文地址:https://www.cnblogs.com/cloudrivers/p/11457278.html
Copyright © 2011-2022 走看看