我目前正处于规划阶段,在我的基于PHP的Web服务中实现推送通知功能,该服务将支持多个应用程序。我目前的服务结构包括用于处理大量流量/请求负载的非持久性自动扩展服务器。
对于使用APNS,我遇到了令人不安的架构问题。 我通读了APNS Getting Started。
Apple表示,需要保持与APNS推送的连接,以避免被视为DDOS攻击:
在多个通知中保持与APN的连接;不要反复打开和关闭连接。 APN将快速连接和断开视为拒绝服务攻击。您应该保持连接处于打开状态,除非您知道它将在一段时间内处于空闲状态 - 例如,如果您每天只向用户发送一次通知,则可以每天使用新连接。
对于大量推送,Apple表示:
“您可以建立到同一网关或多个网关实例的多个连接。如果您需要发送大量远程通知,请将它们分散到多个不同网关的连接上。与使用单个连接相比,这可以提高性能:它可以让您更快地发送远程通知,并让APN更快地发送它们。“
我在网站上发现了关于Persistent APNS connections的帖子,其中指出“ ......出现了经验法则是最多15个连接”
我的问题是:
1.如何处理这些推送到多个应用程序,而不会被视为DDOS?我认为我不能使用我的非持久性自动扩展服务器,因为它们会在启动/关闭时连接/断开连接。我是否需要在多个静态服务器上传播我的连接?
2.如果我将我的连接分散到多个服务器上,是否允许我绕过15个连接的伪限制?如果我需要为每个应用程序提供多个连接以发送大量推送通知,我觉得随着我的客户群增长,我将超过15个。
答案 0 :(得分:0)
看过类似的用例和TBH,使用Amazon SNS Mobile Push似乎更容易。您可以使用他们的服务维护多个platformApplications,并在您想要发送通知时ping一个端点。它还具有开箱即用的支持
在保持连接无限期打开(对于每个应用程序,在多个网关上),重新发送流中的失败通知,以及管理反馈服务APNS只是一个庞大的PITA。此外,如果您触发任何服务限制,他们将撤销您的证书或更糟,并且您不会发送任何通知,直到您使用新系统更新系统。
也许让别人为你处理所有这些令人头痛的问题:D
答案 1 :(得分:0)
我自己解决问题的方法是:
- 一系列具有自己IP地址的专用服务器
- 在高容量传输期间监控和调整传出请求的速度,以避免DDOS切断。
我发现的第二个问题是,特定的电话运营商会限制您可以发送的推送次数,然后再将其切断。因此,即使APNS限制是15个左右的连接,我甚至不能让那么多人全速运行而不会达到特定运营商的限制并让他们的服务器关闭我。这可能是日本运营商特有的问题(docomo特别严格,我最后只为他们配备了一个专用服务器,传输负载调整很大)。