初步聊聊訊息系統
移動網際網路時代,訊息系統、推送訊息是系統必不可少的一部分,無論是促銷資訊的推動,還是朋友圈有人點贊評論之後推送,亦或者公眾號留言被選為精選都會發送訊息。可以說訊息已經是移動網際網路很重要一部分。
訊息從傳送方式看可以分為兩種,一種是系統傳送訊息,比如JD app傳送促銷訊息,由系統傳送系統圈定一部分使用者進行傳送。訊息推薦系統,這篇文章對系統傳送促銷訊息個性化推薦做了相應介紹。
另外一種訊息系統是使用者傳送訊息給使用者,典型應用是即時通訊工具。使用者傳送訊息給使用者,這種場景下發送方也是使用者。
訊息推送從業務場景很清晰,傳送文字、圖片或視訊等內容從A到B,實際情況中存在一個點是,app有線上和離線情況,線上採取一種策略傳送訊息,離線採用一種策略傳送訊息。
線上進行訊息推送一般採用長連結方式,通過長連結將訊息進行傳送。離線方式app不再已經推出,無法通過線上長連結方式進行傳送,需要採取其他方式進行傳送。
離線訊息是一種重要訊息型別,因為當用戶不線上時app退出時,線上長連結方式無法用,這時就需要離線的訊息架構,離線需要考慮對於訊息儲存,或者通過離線訊息通道將訊息傳送給app,離線訊息蘋果和谷歌都給出相應方案,核心理念是將訊息通過蘋果谷歌訊息通道傳送到手機由手機轉發給app,這兩種方式時離線訊息常用傳送方式。
訊息架構還有一個點就是訊息傳送速率,比如微信使用者傳送訊息是通過中間訊息佇列進行轉發,而不是採取早些時候qq 基於udp點對點訊息傳送方式,這樣架構方式簡化了對於應對各種NAT網路穿透啊等等問題,但也需要面對新的問題就是訊息轉發要高效,以及要不丟失。
訊息系統還面臨一個挑戰就是架構本身要滿足業務需求擴充套件,比如訊息本身協議設計要支援擴充套件,比如需要已送達、已閱讀、撤回等各種個樣需求。協議本身要能支援,整個系統架構不需要推翻重做。
訊息系統在有就是安全性,對於即時通訊工具,通訊資料需要被加密,不能被輕易破解,以及賬號安全性,是通訊工具要面臨挺大一個問題,因為哪個使用者也不想自己用的好好被別人盜去。
訊息系統還有就是當訊息變大極大量的時候,需要能夠系統動態擴容,動態去增加處理訊息能力,而不是訊息丟失、以及訊息延時,這都是嚴重影響使用者體驗的。
訊息系統本身說起來很簡單,就是內容從A傳送到B,但真的做到,不卡、不慢、不丟、安全、穩定並且能夠穩定支援各種線上離線,以及保證速率並且能夠支援各種業務擴充套件就相對難度大了很多很多。