Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 估计SQS处理时间和负载_Amazon Web Services_Amazon Sqs - Fatal编程技术网

Amazon web services 估计SQS处理时间和负载

Amazon web services 估计SQS处理时间和负载,amazon-web-services,amazon-sqs,Amazon Web Services,Amazon Sqs,我将使用AWS SQS(常规队列,而不是FIFO)来处理不同的客户端度量 我希望每秒有大约400条消息(最坏的情况)。我的SQS消息将包含文件的S3位置 我创建了一个应用程序,它将侦听我的SQS队列,并处理来自它的消息 我所说的过程是指: 阅读SQS消息-> 从该SQS消息中获取S3位置-> 调用S3客户端-> 阅读该文件-> 添加几个附加字段-> 将此文件中的数据发布到AWS Kinesis Firehose 对于队列中的每个SQS消息,将执行类似的过程。S3文件的大小很小,小于0,5 K

我将使用AWS SQS(常规队列,而不是FIFO)来处理不同的客户端度量

我希望每秒有大约400条消息(最坏的情况)。我的SQS消息将包含文件的S3位置

我创建了一个应用程序,它将侦听我的SQS队列,并处理来自它的消息

我所说的过程是指:

  • 阅读SQS消息->
  • 从该SQS消息中获取S3位置->
  • 调用S3客户端->
  • 阅读该文件->
  • 添加几个附加字段->
  • 将此文件中的数据发布到AWS Kinesis Firehose
对于队列中的每个SQS消息,将执行类似的过程。S3文件的大小很小,小于0,5 KB。



如何计算我是否能够每秒处理400条消息?我如何估计我的解决方案能够处理x5的数据增长?

确定这一点的唯一方法是创建一个反映您的场景的测试环境

如果您的解决方案设计为并行处理消息,那么应该可以扩展您的系统以处理几乎任何工作负载

一个好的架构是使用AWS Lambda函数来处理消息。Lambda默认为1000个并发函数。因此,如果一个函数需要3秒钟才能运行,它将始终支持每秒333条消息。您可以请求增加Lambda并发性以处理更高的工作负载


如果您使用的是Amazon EC2而不是Lambda函数,那么您只需要扩展并添加更多EC2实例和更多工作人员来处理所需的任何工作负载。

确定这一点的唯一方法是创建一个反映您的场景的测试环境

如果您的解决方案设计为并行处理消息,那么应该可以扩展您的系统以处理几乎任何工作负载

一个好的架构是使用AWS Lambda函数来处理消息。Lambda默认为1000个并发函数。因此,如果一个函数需要3秒钟才能运行,它将始终支持每秒333条消息。您可以请求增加Lambda并发性以处理更高的工作负载

如果您使用的是AmazonEC2而不是Lambda函数,那么您只需要扩展并添加更多EC2实例和更多的工作人员来处理所需的任何工作负载

如何计算我是否能够每秒处理400条消息?我如何估计我的解决方案能够处理x5的数据增长

测试它从一个小规模开始,然后从那里进行数学推断。使您的测试环境尽可能接近生产环境

  • 在单个主机和单个线程上,数学很简单:
    • 1000/AvgTotalTimeMillis=AvgMessagesPerSecond
      ,或
    • 1000/AvgMessagesPerSecond=AvgTotalTimeMillis
如何进行测试:

  • 从单个线程和主机开始,为您概述的每个步骤以及总时间生成一些计时指标

    • 计算您的平均/最大/最小时间,以及每秒转换为的消息数
    • 在一个线程上每秒400条消息&主机的每条消息不超过3ms。希望这能使您明显地需要多个线程/主机
  • 放大

    • 现在,您已经知道了单个线程可以处理多少个线程,请计算出单个主机可以有效处理多少个线程(您需要进行实验)。在可能的情况下考虑批处理消息- SQL提供批处理操作。< /LI>
    • 使用数学计算您需要多少台主机
    • 如果你需要5倍的数字,从那里开始
  • 在计算时,考虑所使用系统的任何限制:

    • 查看SQS/S3/Firehose/等的节流限制。如果您计划使用Lambda而不是EC2来完成工作,它也有限制。确保你在这些限制之内,并且考虑如果你接近AWS,请联系AWS支持。
根据我的经验,还有一些其他建议:

  • 根据您的工作流程概要和详细信息,使用EC2,您可能可以在每个主机上处理相当数量的线程
  • 应该足够了—您可能可以做得更小,因为性能瓶颈可能是获取和发送消息的网络I/O
  • 考虑在需要增加吞吐量时使用自动缩放来处理消息峰值,但请记住,自动缩放可能需要几分钟的时间
如何计算我是否能够每秒处理400条消息?我如何估计我的解决方案能够处理x5的数据增长

测试它从一个小规模开始,然后从那里进行数学推断。使您的测试环境尽可能接近生产环境

  • 在单个主机和单个线程上,数学很简单:
    • 1000/AvgTotalTimeMillis=AvgMessagesPerSecond
      ,或
    • 1000/AvgMessagesPerSecond=AvgTotalTimeMillis
如何进行测试:

  • 从单个线程和主机开始,为您概述的每个步骤以及总时间生成一些计时指标

    • 计算您的平均/最大/最小时间,以及每秒转换为的消息数
    • 在一个线程上每秒400条消息&主机的每条消息不超过3ms。希望这能使您明显地需要多个线程/主机
  • 放大

    • 现在,您已经知道了单个线程可以处理多少个线程,请计算出单个主机可以有效处理多少个线程(您将