问题:
因此,我们正在为我们的应用构建一个新闻通讯系统,该系统必须能够每天发送多达20k-40k的电子邮件。
偏好工具:
亚马逊SES的限制:
Azure功能的限制:
在消费计划中,无法限制Azure功能执行的实例数量。目前,扩展由Azure内部处理,因此该功能可以在几个到几百个实例之间执行。
通过阅读Azure功能的其他帖子,Azure功能似乎有“预热”期,这意味着只要通过其中一个记录的触发器触发该功能,该功能就不会立即执行。
使用SES的Azure功能限制:
显而易见的问题是Amazon SES限制从Azure功能发送电子邮件,因为发送电子邮件的Azure功能的缩放执行将远远高于SES允许的发送速率。
由于Azure功能消息的“预热”期,在Azure功能实际开始按比例开始处理它们并发送电子邮件之前,最终可能会堆积在队列中,因此很有可能达到发送/速率限制。
问题:
其他想法:
如果客户的实施不断达到限制限制,亚马逊SES可能不希望为客户持续限制SES。亚马逊SES人员,您能评论一下吗?
Azure功能 - 根据文档,消费计划中Azure功能的扩展在内部处理。但是,有没有办法在缩放上设置手动“上限”?从顾客的角度来看,这似乎是一个普遍的要求。 问题不在于Azure功能无法处理负载,问题是与Azure功能接口的系统的其他组件无法处理Azure功能可以处理它的大规模负载。 / EM>
感谢您的帮助。
答案 0 :(得分:1)
如果我正确理解您的问题,最简单的方法是自定义队列限制解决方案。
基本上你的AF只检索所有邮件请求的调用,然后将它们排队到队列系统(比如ServiceBus / EventHub / IoTHub)然后你可以有另一个以x分钟间隔运行的Azure函数,这将拉动一个最多y消息并将其推送到SES。您的控制点变为该时钟功能,并且由于队列系统将帮助您确保您知道您的消息传递状态(已发送到SES)并且您可以在完成后弹出队列,它将允许您最终确保作业处理。
答案 1 :(得分:0)
您应该能够在函数的host.json文件中将maxConcurrentCalls设置为1;这将确保在任何给定时间仅执行1个函数执行,并且应该将您的处理速率从AWS透视图中以每秒发送量更加令人满意:
host.json
{
// The unique ID for this job host. Can be a lower case GUID
// with dashes removed. When running in Azure Functions, the id can be omitted, and one gets generated automatically.
"id": "9f4ea53c5136457d883d685e57164f08",
// Configuration settings for 'serviceBus' triggers. (Optional)
"serviceBus": {
// The maximum number of concurrent calls to the callback the message
// pump should initiate. The default is 16.
"maxConcurrentCalls": 1,
...