SNS和Lambda一起用,可以吗?
这里指的是SNS的输出,作为Lambda的输入。
首先答案肯定是可以的,但有一些需要注意的事项,尤其是:限制。
SNS和SQS不同,SNS是push的策略,也就是,通知发出去了,就不管了。
那可以设想一个场景。你的SNS拼命地发,你的lambda拼命地处理……那Lambda会不会跟不上?
答案也是肯定的,我的意思是,肯定会有情况下跟不上。
这就得说说Lambda自己的限制了。
首先Lambda自己有内存啊CPU啊文件大小等限制。但这些限制不涉及这里讨论的问题。
我们主要拿出来Lambda Concurrent Executions这个指标来说,这个指标代表Lambda可以并行处理的数量,默认值1000。可提高到十万级别。
也就是说,默认情况下,如果你SNS通知数超过1000个每秒,那么将会有一些通知不能够被Lambda即使处理。而且会被扔到Lambda Dead Letter Queue(如果配置了的话)。
这就是使用SNS+Lambda,或者任何使用PUSH方法集成Lambda时需要注意的点。
解决办法有两个:
- 提高Lambda Concurrent Executions数量。如果你就是想提高并行能力的话,这样做是必须的。尤其是当使用”旺季“来临时,默认的1000个concurrent Executions很可能就不够了,这时候需要打电话给AWS提高Concurrent Executions值。但要记住,治标不治本,因为如果突然的并发仍然超过你设置的新的值的话,依旧会失败的;
- 使用SQS,也就是SNS->SQS->Lambda。千万记得,SQS+Lambda才是珠联璧合。
