我正在尝试评估SNS是否正在构建一个实时应用程序,并且需要非常快速的转换时间<传递信息需要2秒钟。
由于我位于亚太地区,我在新加坡有一个SNS,在美国东部地区的Lambda有一个订户。
鉴于此设置,我运行了一个代码,试图找出调用lambda的延迟并进行零处理并记录时间。有人可能会说你在这种情况下也考虑了lambda调用延迟。这是真的。我需要调用Lambda并执行并回复到< 2秒。
我发送了23914条消息,其中我有平均653.520毫秒的传输+ lambda调用。 峰值大约600995毫秒(约10分钟),这是像pubsub这样的技术的潜在延迟。 大约20117年消息由lambda发送和接收< 653毫秒,这意味着3797个数据包或15%比平均时间更多。
2958条消息或12.36%消息需要1秒才能执行。 379条消息或1.59%消息需要2秒才能被调用和执行(这意味着1.6%的消息不能被视为实时且必须被忽略) 超过10秒的82条消息 64秒超过20秒 它持续到约45秒,之后延迟是10分钟。我有3包,延迟10分钟。
困扰我的是,大约2%(如果你也包括处理时间)我的消息无法实时处理,只需要一小部分~24K的消息。在我想要呈现的比例计算中,要求我每月处理大约2160亿条消息。在这种规模上,我担心我将无法实时处理43亿条消息。
鉴于这种体验,我不确定SNS的扩展程度。那些#of不到实时的消息(读取> 2秒延迟)会更多吗?还是会减少?
现在可能有人质疑我的互联网连接可靠性,我在EC2上做了这个实验并得到了非常相似的结果。
事实上,在同一时间内匹配的时间延迟类型。
具体问题
- SNS性能的SLA是什么?
- 间接地:这些SLA如何转换为AWS Lambda服务?
- 有关这些延误可能发生在何处的任何理由?
醇>
答案 0 :(得分:0)
这里发生的事情很可能是对Lambda函数的限制。 concurrent Lambda invocations is 100的默认限制。如果您发送了20K消息,则可能超出了该限制,尽管lambda的运行时间很短。当您的lambda函数在执行SNS请求时受到限制时,请求将进入重试队列并最多重新执行3次,这通常会在很长一段时间内发生(最多一个小时)。
您可以在该功能的CloudWatch指标中查看限制数量(不幸的是,您在发布CloudWatch保留6个月之前运行了测试)。
答案 1 :(得分:0)
最后我检查了SNS没有SLA。 SNS设计为可水平扩展,并且(几乎)永远不会丢弃消息而不能快速交付。
是否有任何理由可以通过API从发布者调用lambda并将数据存储在传递给调用的事件中?