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
  • 相关阅读:
    pymssql连接Azure SQL Database
    Python升级后ssl模块不可用问题解决和浅析
    CentOS 7升级Python到3.6.6后yum出错问题解决总结
    Python监控SQL Server数据库服务器磁盘使用情况
    fastjason常用方法
    类型擦除真的能完全擦除一切信息吗?java 泛型揭秘
    spring boot打包成war包的页面该放到哪里?
    为什么delete后磁盘空间没有释放而truncate会释放?
    leetcode 977. Squares of a Sorted Array
    leetcode 844. Backspace String Compare
  • 原文地址:https://www.cnblogs.com/cloudrivers/p/11457278.html
Copyright © 2011-2022 走看看