2011-05-27 63 views
3

我們計劃將推送應用程序引入我們的移動應用程序(適用於Android手機和平板電腦,iPhone,iPad和Blackberry)。針對多平臺推送通知的基礎設施建議

每15分鐘我們會得到一組新數據。這些數據存儲在MySQL數據庫中。然後,我們會檢查這些數據是否與我們用戶的訂閱相匹配(數據是基於位置的,因此用戶會訂閱一個或多個位置的通知)。所有具有匹配數據的用戶都應該通過各自平臺的推送服務得到通知。

服務器容量不是問題。我們主要使用PHP,並希望保持它,但願意與其他語言,如果有必要。

我的問題是:

  1. 你能不能給我建議的技術,在服務器端使用?它應該很好地擴展(我期望跨平臺的大量訂閱),理想情況下與通用推送網關一起工作,並且足夠快以在下一批數據進入之前處理所有通知。

  2. 我有關於這些通知的發送速度。假設我們有500.000個訂閱,數據匹配達到50%,這意味着我們需要在15分鐘內推送250.000個通知。你有任何高數量和推送通知的經驗嗎?

非常感謝, 馬克。

回答

0

雖然PHP非常適合生成動態網頁內容,但我覺得它錯過了一些基本功能來做高性能的後臺操作。我會選擇支持多線程的語言(我的個人偏好會導致我使用C#4.0,但它也取決於您的服務器平臺)。

如果您有多線程支持,則可以編寫線程來加載數據庫中的數據,並在加載時讓其他線程推出通知。確保您可以配置交易的每個部分使用多少線程,因此您可以根據需要調整性能。

如果一臺服務器無法完成這項工作,則可能需要考慮將數據分區到多臺服務器上。我想象最快的方法是將記錄塊分配給不同的服務器。

最後一句忠告,獲得一個測試環境,您可以在其中模擬問題並進行壓力測試。在進行壓力測試時,不要停留在500.000的目標數量上,而是至少提高10倍。這將提前發現軟件的薄弱點更有效。此外,能夠抑制某些硬件參數(如memorey,磁盤IO,網絡IO和CPU)會非常有幫助。通過模擬其中任何一項的低數量,您可以感覺到軟件在特定條件下的表現。如果遇到生產中的任何性能問題,此體驗將幫助您,它將幫助您提出硬件要求。

+0

感謝您的寫作。我們使用Linux服務器,所以C#不是一個選項(我自己會這麼做))。將不得不考慮C++或類似的。感謝您的輸入! – Cornelius 2011-07-11 10:02:39