分布式消息通道廣泛應用在很多公司,尤其是在移動app和服務端需要上傳、推送大量的數據和消息時。比如打車app每天要上傳大量的位置信息,服務端也有很多訂單要及時推送給司機;此外,由于司機是在高速移動過程中,所以網絡連接的穩定性也不是很好這類場景給消息通道的高可用設計帶來很大的挑戰。
一個典型的移動ap的消息通道的設計架構圖,這種設計比較適合上傳數據量大,并且高速移動導致網絡不太穩定的鏈路。
鏈路1是 client和整個服務端的長連接鏈路,一般采用私有協議的tcp請求。如果是第一次請求還會通過2做鏈接認證,認證通過后會把該 client和接入集群的某個服務器做個kv對,并記錄到路由表里這可以方便下發消息時找到該鏈接。經過鏈路4,上行消息處理集群會將tcp請求轉成普通的http請求,再調用后端業務執行具體的業務邏輯,或者只是上傳一個數據而已,不做任何響應。如果業務有數據需要下發,會經過鏈路6,把消息推送到消息下發處理集群,由它把消息推送給 client。
消息下發集群公査向鏈接路表,確足當前cent的鏈按在言,再通該服務器把消息推送下去。這里常見的問題是當前 client的網絡不可達,導致消息無法推送。在這種情況下,消息下發處理集群會保持該消息,并定時嘗試再推送;如果client重新建立連接,連接的服務器也會隨之變化,那么消息下發集群會去查詢鏈接路由表再重新連接新的kv對。
鏈路9是為了處理 client端的一些同步請求而設計的。例如 client需要發送一個http請求并且期望能返回結果,這時client中的業務層可能直接請求http,再經過 client i中的網絡模塊轉成私有tcp協議,在上行長鏈請求集群轉成htp請求,調用后端業務并將http的response轉成消息發送到消息下發處理集群,異步下發給client,到達client再轉成業務的httpresponse。這種設計的主要考慮是當http響應返回時,如果長鏈已經斷掉,該響應就沒法再推送回去。因此,這種上行同步請求而下行異步推送是一種更高可用的設計。
從整體架構上看,只有接入集群是有狀態的,其他集群都是無狀態的,這也保證了網站設計集群的擴展性。如果接入點在全國有多個點,并且這些點與服務端有專線網絡服務,接人集群還可以做到就近接入。
佛山到平涼物流專線石家莊到中山物流專線嘉興到灌南物流專線金華到肥城物流專線武漢到惠州物流專線百度推廣真的有效果嗎?蘭州到襄垣物流專線如何判斷營銷網站是否被百度降權了