push推送服務設計

2022-03-19 15:01:59 字數 2881 閱讀 8804

push

一.網路傳輸協議的選擇

push系統協議選取:

udp協議實時性更好,但是如何處理安全可靠的傳輸並且處理不同客戶端之間的訊息互動是個難題,實現起來過於複雜,

那就非tcp協議莫屬了,要考慮的同樣也有很多,特別是如果有海量使用者的需求。

a)基於tcp協議的長連線;

b) 基於websocket的輪詢;

c)基於http的短鏈結pull方式;

二.應該選擇什麼格式的資料協議

對於客戶端和服務端的資料傳輸通常會有以下幾點考慮:

1.網路資料大小——占用頻寬,傳輸效率以下我們通過幾種不同類別的協議資料型別進行比較:

a)

缺點:編碼複雜度高(自己定義訊息格式,自己編寫序列化和反序列化方法,自己進行容錯處理,可擴充套件性不強,比如新增個字段,就必須改兩端的邏輯處理)

b)提供序列化和反序列化庫的開源協議:

比如protocol buffers

優點:是一種流行的通用資料格式,擴充套件相當方便,序列化和反序列化相當方便(有相應庫),錯誤處理方便(庫支援);

c)文字化協議:

優點:序列化,反序列化容易(庫支援),除錯方便,視覺化強

缺點:相對於二進位制儲存占用體積大

三.架構設計

架構考量

由於採用可靠傳輸協議tcp,考慮到負載問題(長連線的保持、訊息推送等);

後台架構的靈活性、可擴充套件性,支援分布式,可橫向擴充套件,易伸縮,高可用。同時把網路層、業務邏輯層、資料層分離,網路層和業務層支援負載均衡策略、資料層支援分布式儲存。

架構圖

push推送服務架構圖:

架構設計說明:

a) 右側四

大元件分別是zk服務、

配置中心

、日誌系統、監控系統.

1)log system 主要負責業務日誌輸出,主要有鏈結相關日誌、推送鏈路日誌、心跳日誌、監控日誌等;

2)monitor 主要用作系統狀態監控,可用於系統調優,包括記憶體,執行緒,系統堆疊,gc等情況

;3) zk client 主要負責註冊長鏈結ip:port,閘道器ip:port以及監聽各個節點變化,同時增加了快取;

4) config-center 是push server 配置化服務。

b)core模組分別是長鏈結服務,閘道器服務,packet編譯碼及訊息

分發模組,message序列化及處理模組。

1)connectserver用於維持和客戶端之間的tcp通道,主要負責和客戶端互動;

2)connectionmanager主要負責鏈結管理,定時檢查鏈結情況,是否讀寫超時,如果鏈結斷開發出相應的事件給路由中心去處理;

3) rsa/des加解密,主要

是訊息傳輸中的des加解

密,以及登入的rsa會話金鑰生成及session復用;

4)send/receive-packet主要負責訊息的傳送和接收;

5)packet主要是協議部分的資料報

編譯碼和包的完整性校驗等

;6) message部分是處理訊息的序列化,還有訊息

壓縮、加密等

。messagehandler會根據不同訊息獨立處理自己所屬的業務,主要有:心跳響應、握手及金鑰交換、快速重連、登入/退出

使用者等。

8)路由中心主要包括:

遠端等;

a) router—center負責維護使用者+裝置與鏈結所在機器ip及鏈結

之間的關係

;c)儲存部分:

1)redis主要儲存離線裝置資訊,登入裝置資訊和組資訊等,其

集群支援水平橫向擴充套件,

雙寫,主備

,hash 等特性;

2)mongo集群,支援副本集和分配,主要儲存訊息流水資訊,以便做查詢彙總等處理。

服務端平台及技術選型

系統開發平台: centos——linux系統,穩定可靠、可定製優化、支援豐富;

快取儲存層: redis——支援豐富的儲存結構,支援分布式儲存;

資料庫: mysql/mongo——最適合網際網路的資料庫,免授權、高效穩定、可控性高;

開發語言: golang/erlang——高併發,跨平台;

部分熱點問題考量

編碼角度:採用高效的網路模型,執行緒模型,i/o處理模型,合理的資料庫設計和操作語句的優化;

垂直擴充套件:通過提高單伺服器的硬體資源或者網路資源來提高效能,如linux核心引數,網路協議棧引數調優等;

水平擴充套件:通過合理的架構設計和運維方面的負載均衡策略將負載分擔,有效提高效能;後期甚至可以考慮加入資料快取層,突破io瓶頸;

系統的高可用性:(防止單點故障)

在架構設計時做到業務處理和資料的分離,從而依賴分布式的部署使得在單點故障時能保證系統可用。

對於關鍵獨立節點可以採用雙機熱備技術進行切換。

資料庫資料的安全性可以通過磁碟陣列的冗餘配置和主備資料庫來解決。

iOS遠端推送之友盟Push

更新記錄 1 2015年10月23日上午10 10分更新,優化了該類,去除了不必要的方法。入職後的乙個任務,就是做遠端推送,聽老大說用的是友盟push.所以就看了一下友盟push,具體的整合以及證書的生成請參照這裡。具體的就不再多說了,主要是自己重新封裝了一下umessage,具體的內容如下 not...

git同時push推送到github和碼雲

當自己專案的時候,想同時更新多個地方 github 碼雲,等。可以通過git的配置實現,這樣就不用創多份檔案,每次更新都得更新多個地方 如果還不熟悉git的操作的,可以先看這個 git使用和常見命令 1 先再github和碼雲。建立2個空的倉庫 或者乙個倉庫為空,另外乙個倉庫不為空也行 2 再本地拉...

資訊精準智慧型推送(push 的五個關鍵

有時候沒有選擇,反而是好的選擇。古時候隨便找個表哥嫁了,就不會有什麼剩女。資訊也同樣如此。在全國只有1家電視台 幾份報紙的時代,不會有人去談資訊焦慮 資訊有效性。如今網際網路帶來的資訊氾濫時代,關鍵在於資訊的篩選和推送。推送是天下最麻煩的事情。韓劇往往有這樣一段對話。女生哭著對男生說 你別走。我知道...