天天看點

直播間or語音房分布式im消息(彈幕)解決方案 推與拉

在開發分布式系統中要一個直播間的,需要考慮 彈幕/禮物消息的實時性。

在多台伺服器的情況下如何考慮實時性的問題?

推與拉

先梳理一下流程

使用者1發送了一個彈幕 到666的直播間 ,然後在666直播間的所有人都收到這個消息

如果選擇推的話需要做哪些準備什麼?

消息隊列

該怎麼做?

開始進入拆分開發階段

1.假設使用者1在伺服器A時 發送在666直播間一個消息後,伺服器開始處理 開啟一個協程 自旋發送 在伺服器A 666直播所有人收到這個消息,

2.用消息隊列往 伺服器B 伺服器C 伺服器D 伺服器E

3 當各個伺服器收到這個消息隊列的時候  各個伺服器發送這條消息給在 666直播間的人。

圖解開發步驟

直播間or語音房分布式im消息(彈幕)解決方案 推與拉

如果選擇拉的話需要做哪些準備什麼?

消息隊列 記憶體緩存庫(go-cache/freecache)

該怎麼做?

開始進入拆分開發階段

1.假設使用者1在伺服器A時 發送在666直播間一個消息後,伺服器開始處理 開啟一個協程 将消息放入記憶體緩存中2秒過期時間,将有心跳請求并且在666直播間的使用者,讀取記憶體緩存(讀取2秒内的資料) 然後塞入到protobbuf 響應給使用者,

2.再通過消息隊列的形式 把這條消息 轉發給  伺服器B 伺服器C 伺服器D 伺服器E,

3. 當各個伺服器收到時 都存進記憶體緩存中 2秒,将有心跳請求并且在666直播間的使用者,讀取記憶體緩存(讀取2秒内的資料) 然後塞入到protobbuf 響應給使用者

圖解開發步驟

直播間or語音房分布式im消息(彈幕)解決方案 推與拉

 圖解使用者步驟

直播間or語音房分布式im消息(彈幕)解決方案 推與拉

本文隻寫2種解決方案 至于選擇哪種方案 還是要看具體的業務,例如 需要消息/送禮的曆史記錄 這些 自行參考

繼續閱讀