具有多个应用程序的 APNS 推送服务器

APNS Push Server with multiple Apps

我目前正处于计划阶段,以便在基于 PHP 的 Web 服务中实现推送通知功能,该服务将支持多个应用程序。我当前的服务结构包括用于处理大型 traffic/request 负载的非持久性自动缩放服务器。

对于使用 APNS,我在想出一个架构时遇到了麻烦。 我已通读 APNS Getting Started

Apple,声明需要保持连接以使用 APNS 进行推送,以避免被视为 DDOS 攻击:

Keep your connections with APNs open across multiple notifications; don’t repeatedly open and close connections. APNs treats rapid connection and disconnection as a denial-of-service attack. You should leave a connection open unless you know it will be idle for an extended period of time—for example, if you only send notifications to your users once a day it is ok to use a new connection each day.

对于大量推送,Apple 声明:

"You may establish multiple connections to the same gateway or to multiple gateway instances. If you need to send a large number of remote notifications, spread them out over connections to several different gateways. This improves performance compared to using a single connection: it lets you send the remote notifications faster, and it lets APNs deliver them faster."

我在网站上找到了关于 Persistent APNS connections 的 post,它指出“...根据经验看来,最多 15 个连接

我的问题是:

1.How 我应该处理这些对多个应用程序的推送,而不冒被视为 DDOS 的风险吗?。我不认为我可以使用我的非持久性自动缩放服务器,因为它们会 connection/disconnection 在 boot/shutdown 上。我需要将我的连接分散到多个静态服务器上吗?

2.If 我将我的连接分散到多个服务器上,这是否允许我绕过 15 个连接的伪限制?如果每个应用程序都需要多个连接来发送大量推送通知,我觉得随着客户群的增长我会超过 15 个。

看过类似的用例,TBH 似乎只使用 Amazon SNS Mobile Push 更容易。您可以使用他们的服务维护多个平台应用程序,并在您想要发送通知时仅对端点执行 ping 操作。它还提供了对

的开箱即用支持
  • 发送到其他平台(GCM/Android/Baidu 推送、WNS/MPNS/Windows phone、ADM/Kindle、SMS、AWS Lambda 函数、SQS 队列生成器、HTTP/HTTPS 端点、短信、电子邮件、MacOSX 等)
  • Handling 的 APNS 反馈服务,以防止 APNS 对垃圾邮件取消注册的设备进行制裁 - 如果您要使用 APNS
  • ,则必须自己实施
  • 主题(所有用户或用户子集的单个端点允许您通过一次调用发送数千条通知)
  • 使用 CloudWatch and logging with CloudTrail 进行检测以跟踪您的交付率、失败等,并根据您可以定义的指标级别提供警报
  • 一个Service Mock for integration tests
  • SDKs,大多数主要语言的文档和示例

在保持连接无限期打开(对于每个应用程序,在多个网关上)、在流中重新发送失败通知和管理反馈服务 APNS 之间只是一个巨大的 PITA。另外,如果您触发他们的任何服务限制,他们将吊销您的证书或更糟,并且您不会发送任何通知,直到您使用新系统更新系统。

不妨让其他人为您处理所有这些令人头疼的事情:D

我自己的解决方案是:

-一系列有自己IP地址的专用服务器

-在高流量传输期间监控和调整传出请求的速度以避免 DDOS 中断。

我发现的第二个问题是,特定的 phone 运营商会限制您可以发送给他们的推送次数,然后他们才会切断您的联系。因此,即使 APNS 限制是 15 个左右的连接,如果不达到特定运营商的限制并让他们的服务器将我拒之门外,我什至无法全速拥有那么多 运行。这可能是日本运营商特有的问题(docomo 尤其严格,我最终为他们提供了专用服务器,并进行了繁重的传输负载调整)。