先介紹下之前所做的push服務的設計模型
當初的設計比較簡單,將壓力全部放在了推送訊息處理執行緒上,執行緒不僅需要建立apns伺服器的通訊,也需要對廣播訊息進行轉換。對於單播訊息而言效能似乎還可以接受,然而對廣播訊息處理,執行緒的處理效能明顯降低。因為apns服務是不支援廣播訊息的,進行廣播必須要獲取到所有廣播物件的devicetoken,這就需要執行緒去批量獲取推送物件列表,並將這個列表組成單播message,而後批量傳送。這樣的設計將訊息處理和傳送耦合在了一起,無法並行處理。雖然通過非同步通訊的方式實現了批量傳送,但是總體而言效能還是很低的。
之前設計最根本的的問題是耦合了廣播訊息本身的處理和傳送的處理,發揮不了多執行緒處理的效能。這次重構,主要的效能優化就是,區分了推送請求佇列和推送訊息佇列,請求處理執行緒只專注對推送請求的處理,生成可用於直接傳送的推送報文,並均衡負載到推送訊息佇列上。推送執行緒則專注於推送本身,每個執行緒hold乙個與apns的連線,傳送推送報文。
將push請求處理和push傳送處理分開,也給系統擴充套件提供了更多的可能性。單伺服器可以設定多個請求佇列、多個傳送佇列,每個佇列允許多個執行緒進行監聽處理。也可以將推送請求處理和傳送處理分開部署,並進行均衡負載。
使用OData快速構建REST服務
odata是微軟支援的一種查詢標準,它的第四版使用了rest規範,看起來簡潔多了。它的最大的特點是可以在客戶端自行配製查詢條件,使用它構建rest服務時再也不用擔心查詢的擴充套件性問題了。如下是幾個簡單的示例 更多的示例可以參看官方的文件 由於它是基於rest的服務,使用的是通用的協議和序列化方式,...
使用systemd來構建你的服務
systemd 服務是一種以 service 結尾的單元 unit 配置檔案,用於控制由systemd 控制或監視的程序。簡單說,用於後台以守護精靈 daemon 的形式執行程式。service檔案編寫簡單易用 可以自動維持程序存活 強大的功能,可以取代pm2 自動收集程序輸出的輸出 可以看到sys...
使用systemd來構建你的服務
systemd 服務是一種以 service 結尾的單元 unit 配置檔案,用於控制由systemd 控制或監視的程序。簡單說,用於後台以守護精靈 daemon 的形式執行程式。service檔案編寫簡單易用 可以自動維持程序存活 強大的功能,可以取代pm2 自動收集程序輸出的輸出 可以看到sys...