我们计划将推送应用程序引入我们的移动应用程序(适用于Android手机和平板电脑,iPhone,iPad和Blackberry)。
每15分钟我们会得到一组新数据。该数据存储在MySQL数据库中。然后,我们将检查此数据是否与我们用户的订阅匹配(数据是基于位置的,因此用户将订阅一个或多个位置的通知)。然后,应通过各自平台的推送服务通知所有具有匹配数据的用户。
服务器容量不是问题。我们主要使用PHP,并希望继续使用它,但如果有必要,我们愿意使用其他语言。
我的问题是:
您能就我在服务器端使用的技术给出建议吗?它应该可以很好地扩展(我希望在平台上有很多订阅),理想情况下可以使用公共推送网关,并且在下一批数据进入之前足够快地处理所有通知。
我对这些通知的投放速度感到担忧。假设我们有500,000个订阅,数据匹配到50%,这意味着我们需要在15分钟内推送250.000个通知。您对高数字和推送通知有什么经验吗?
非常感谢, 标记
答案 0 :(得分:0)
尽管PHP非常适合生成动态Web内容,但我觉得它缺少一些必要的功能来执行这样的高性能后台操作。我会使用支持多线程的语言(我的个人偏好会引导我使用C#4.0,但这也取决于你的服务器平台)。
如果您具有多线程支持,则可以编写从数据库加载数据的线程,并在加载时让其他线程推出通知。确保您可以配置交易的每个部分使用多少线程,因此您可以根据需要限制性能。
如果一台服务器无法完成这项工作,您可能希望查看跨多台服务器对数据进行分区。我想最快的方法是将记录块分配给不同的服务器。
最后一句建议,获得一个测试环境,您可以在其中模拟您的问题并进行压力测试。在进行压力测试时,不要停留在目标数500.000,而是至少要达到目标数的十倍。这将更有效地提前找到您的软件的弱点。此外,能够限制某些硬件参数非常有用,例如memorey,磁盘IO,网络IO和CPU。通过模拟这些中的任何一个数量较少,您可以了解软件在特定条件下的行为方式。如果您遇到生产中的任何性能问题,这种经验将对您有所帮助,它将帮助您提出硬件要求。