今天聽喬斌講了公司im系統的整體框架以及各部分的特點,還有一歇需要注意的問題,趁著熱乎總結紀錄一下。
首先分幾大模組,也可以理解為幾層:entry,logic,router,das。
entry是接入層,負責管理成千上萬的連線,主要處理高併發,用到了epoll,並將接收到的資料報加入乙個任務佇列,交給下一層處理(類似於自己完成的web伺服器中處理連線及任務的流程)。
logic是業務層,主要關心各種業務,user msg friend這幾方面的業務流程。它直接與entry和das直連,只關心業務處理,不關心資料收發,所以資料來了之後放入任務佇列,logic從佇列中取出任務後,只對任務進行處理,處理完之後就將資料報傳遞給router,由router判斷該傳遞給哪一台entry伺服器以回發資料報。
router是路由層,負責對資料報在各層之間進行**。 紀錄了各個使用者分別來自哪一台entry伺服器。那entry是如何得知router轉給的資料報是對那一條訊息的處理呢?這裡會對每一條訊息都有乙個訊息id,這個id由entry生成之後,在整個系統的流程中都是存在的可以用來做校驗判斷是哪條訊息的。至於每乙個資料報是用來幹什麼的,那就是logic裡面協議的活兒了。
das是資料層,為業務層logic提供了一系列運算元據庫的介面,業務層只關心業務,同時也會關心資料是如何儲存,但是不會關心das介面是如何實現的,這兩層實現了業務和資料的分離。之後如果資料庫到達瓶頸,需要切換資料庫,那就直接切另一套介面,不會影響其他層次。另外,這一層還聽喬斌講到了redis,這個在記憶體中訪問,kv儲存方式的乙個東西,之後要好好了解一下。
等會會上。
再說一下系統主要解決的幾個問題。
1.無狀態。logic是無狀態的,它不關心使用者這一條訊息在傳輸過程中的狀態,只負責處理業務。目的是為了便於擴充套件,當要擴充套件logic伺服器數量時,無狀態的話,就不需要同步原始狀態到新的伺服器上面。 優化前的router是有狀態的,現在也優化為無狀態的了,優化方法是將原來的狀態直接kv儲存到redis中,這樣隨著使用者量增大伺服器壓力增大,router擴充套件也不必同步狀態,並且redis可以集群,不必擔心記憶體不足。
2.非同步。使用者發來的訊息,logic在處理時肯定不能序列處理,這裡要非同步處理,用到了多執行緒和任務佇列。
3.不丟包。這個問題的解決看圖。中的疑問,如果b正好離線,伺服器是可以通過長連線狀態得知的,這時直接將訊息存到資料庫,b上線時自動拉離線獲取離線訊息。
移動IM開源框架對比
移動im技術選型要點 1 協議選型 2 im 伺服器選型 3 協議和im伺服器改造 4 移動im常見問題以及一些解決方案 5 一些第三方服務 一 常用的im協議 二 im 伺服器的選擇 經過這幾天在網上的調研,發現目前比較流行的幾個im 伺服器 也就是 openfire tigase,ejabber...
移動IM開源框架對比
2016 02 18 16 43 5676人閱讀收藏 舉報 it 300 目錄 移動im技術選型要點 1 協議選型 2 im 伺服器選型 3 協議和im伺服器改造 4 移動im常見問題以及一些解決方案 5 一些第三方服務 一 常用的im協議 二 im 伺服器的選擇 經過這幾天在網上的調研,發現目前比...
IM系統的架構
im全稱instant messaging 早期的cs p2p架構 im系統中最核心的部分是訊息系統,訊息系統中最核心的功能是訊息的同步 儲存和檢索 整體結構如下圖 具體功能 1 使用者接入及訊息流程 2 離線訊息 使用者的訊息除了特殊可丟訊息以外缺省會入庫,包含個人訊息和組訊息等,離線訊息按照順序...