im大型分散式實時計費伺服器系統架構2.0
整個創業團隊後臺就我一個設計,架構,和開發.一路上很辛苦,因為遇到的問題很多很多,並不是想象的那麼簡單.本來2.0想用go語言開發的,簡單,又快,又支援熱更新.處理速度和c++差不多,但靈活度沒有c++高,沒有那麼多特性.設計一個複雜的Im系統,有點不合適.然後我又用回了c++,本人還是熱衷於c++,我使用很多語言,都沒有c++的靈活,好用.
感覺qt的類庫非常強大,還有它的機制,非常容易擴充套件,所以還是繼續qt+epoll模型.
我重新設計了以前1.0伺服器不足之處,整個伺服器效能提升到將近20倍左右,並支援動態擴容,容易維護和升級.能夠分佈到全球不同地方,包扣一套運維繫統的架構,能夠實現方便的管理.
我們伺服器系統業務邏輯非常複雜,超過了騰訊的業務邏輯,對於一般的IM軟體只需要傳送訊息到目標客戶端就可以了,而我們這套系統需要對視訊時間和每條訊息進行實時計費,如果接受者無法在這段時間內回覆訊息就得重新轉發到其他客戶端,一直到此條訊息有人回覆或者生命週期結束.並且支援訊息型別的過濾,訊息傳送的演算法優化.保證資料的安全性和計費的準確性,所有計算全部都是由伺服器來承擔的
客戶端能夠支援訊息預約,訊息條件的過濾,訊息的生命週期,當前使用者的狀態.離線訊息,推送訊息,電子郵件的通知,資料的校驗,充值的反饋
,快速拉取個人資訊和記錄.
1.增加了資料同步伺服器,在整個叢集裡面只存在一個使用者例項,個人資料資訊的實時同步.
2.資料庫採用redits+msyql叢集組合,從以前單臺數據庫處理速度升級到 4000+/s升級到70000+/s
3.離線訊息系統獨立,離線訊息系統從以前和業務伺服器分離開來了,成為一條獨立的系統和apns推送叢集銜接在一起了,這樣能夠更加快速進行離線推送到使用者移動端上.
4.獨立的apns輪詢推送叢集,對於移動端使用者來說,大多數使用者都是待機狀態,當每秒要推送上千或者上萬,單臺apns推送伺服器根本就沒法支撐,所以設計了apns輪詢推送機制,能夠減輕伺服器的負載,並且快速進行推送
5.充值伺服器實時響應,伺服器不停的會對大量使用者進行實時計費,考慮到大量充值事件響應,獨立到一臺伺服器上,paypal的ipns通知事件,能夠立刻更新當前使用者的賬戶金額.
6.狀態監測伺服器,能夠監測當前業務伺服器的負載狀態,並實時更新和傳送到負載最小的業務伺服器給客戶端登陸
7.資料驗證伺服器,對使用者登入資訊進行驗證,並通知到需要的登入的業務伺服器,防止使用者非法登入.
8.訊息管理伺服器,對訊息轉發到幾十個相應的接收者上,生命週期的計算,訊息的計費,視訊訊息的實時計費,無人響應的轉發規則,預約訊息的轉發規則
9.後臺伺服器管理端,能否對不同型別的服務端進行配置和設定,每條服務端日誌的記錄.
10.web後臺管理系統的設計,對使用者的資訊進行管理和操作.金額的統計,資金流的發放.
11.當然也有一套強大監控系統,服務端監控和伺服器監控平臺,伺服器監控平臺用的是監控寶,服務端用的自己開發的.
伺服器架構圖: