在開發分布式系統中要一個直播間的,需要考慮 彈幕/禮物消息的實時性。
在多台伺服器的情況下如何考慮實時性的問題?
推與拉
先梳理一下流程
使用者1發送了一個彈幕 到666的直播間 ,然後在666直播間的所有人都收到這個消息
推
如果選擇推的話需要做哪些準備什麼?
消息隊列
該怎麼做?
開始進入拆分開發階段
1.假設使用者1在伺服器A時 發送在666直播間一個消息後,伺服器開始處理 開啟一個協程 自旋發送 在伺服器A 666直播所有人收到這個消息,
2.用消息隊列往 伺服器B 伺服器C 伺服器D 伺服器E
3 當各個伺服器收到這個消息隊列的時候 各個伺服器發送這條消息給在 666直播間的人。
圖解開發步驟
拉
如果選擇拉的話需要做哪些準備什麼?
消息隊列 記憶體緩存庫(go-cache/freecache)
該怎麼做?
開始進入拆分開發階段
1.假設使用者1在伺服器A時 發送在666直播間一個消息後,伺服器開始處理 開啟一個協程 将消息放入記憶體緩存中2秒過期時間,将有心跳請求并且在666直播間的使用者,讀取記憶體緩存(讀取2秒内的資料) 然後塞入到protobbuf 響應給使用者,
2.再通過消息隊列的形式 把這條消息 轉發給 伺服器B 伺服器C 伺服器D 伺服器E,
3. 當各個伺服器收到時 都存進記憶體緩存中 2秒,将有心跳請求并且在666直播間的使用者,讀取記憶體緩存(讀取2秒内的資料) 然後塞入到protobbuf 響應給使用者
圖解開發步驟
圖解使用者步驟
本文隻寫2種解決方案 至于選擇哪種方案 還是要看具體的業務,例如 需要消息/送禮的曆史記錄 這些 自行參考