feed留,單聊群聊,系統通知,狀態同步,到底是推還是拉?
feed留,單聊群聊,系統通知,狀態同步,到底是推還是拉?
今天拋一個話題,根據業務現象,一起討論其後端實現是推還是拉?
一、feed流
可以理解為一個釋出訂閱業務,典型業務是微博(朋友圈)。你關注了姚晨的微博,姚晨釋出了訊息,你的主頁能看到她最新發布的訊息,這個場景是推送,還是拉取呢?
畫外音:微博是弱關係,關注無需對方同意,粉絲可以無上限;朋友圈是強關係,好友需要對方同意,好友個數有上線。
如果推送,姚晨釋出訊息的時候,要把訊息ID投遞到所有粉絲的主頁訊息佇列裡,推送量巨大。
如果拉取,一來主頁訊息無法實時更新,二來每次重新整理動作非常複雜:
拉取你關注人的list<user_id>
拉取這些人的訊息list<msg_id>
對於這些人的這些訊息進行rank處理,例如按照時間排序
還無法對主頁進行快取,因為只要有關注人釋出訊息,主頁內容就會變化
還得考慮“不看誰的訊息”,以及“訊息不給誰看”
...
是不是覺得有點煩?如果你是架構師,你會怎麼做?
二、聊天訊息
聊天訊息又分為單聊和群聊,典型的業務是微信。和朋友小窗溝通是單聊,群內扯淡是群聊。
單聊,很容易想到是伺服器推送,但瀏覽器裡的聊天工具JS只能使用http式的request - response協議,又能不能保證訊息的實時性呢?
群聊,一個群500個人,有人線上,有人離線,到底是推送,還是拉取呢?
如果是推送,1條訊息將轉變為500條訊息,系統壓力會異常之大。
如果是拉取,訊息的實時性又該如何保障呢?
還有一個坑爹的需求,“釘釘”的群聊天訊息“已讀回執”,這個需求簡單描述是:對於每一條你發出的每一群訊息,你能夠看到,多少人已讀,多少人未讀。這個群訊息已讀回執,猜猜看,又是怎麼實現的呢?
三、系統通知
系統訊息聽上去比較泛,典型的業務是QQ的登入廣告彈窗,以及登入後的右下角廣告提示。
QQ每天首次登入後的新聞彈窗
拉取?第二次登入卻又沒有。
QQ執行過程中的QQ彈窗廣告
推送?一次推送幾千萬條,會不會系統抖動?
或許,真實的實現方式或許與我們想的並不一樣。
四、狀態同步
玩桌面QQ時,收到過“你的好友XXOO登入了”的彈窗提示麼?這是一個好友登入/登出狀態的客戶端同步。同理,群有500人,每個群友的線上/不線上狀態又是怎麼實現同步的呢?
推送?那一個使用者登入退出都要推送N個好友?M個群友?
拉取?如何保證好友狀態,群友狀態的實時性?
畫外音:好友/群友狀態一致性是非常複雜的,移動的時代,索性引入“一律線上”的概念,微信的好友就不存在所謂“頭像亮”和“頭像灰”的概念了,客戶端狀態同步這一塊複雜性有所降低。
看到產品功能,思考後面的技術實現,其實是很有意思的一件事。
究竟是推,還是拉?大夥怎麼看。
還有其他業務場景的疑惑,也歡迎評論提問,有價值的問題,5月份逐條解答。
畫外音:自從有了群訊息已讀回執,我再也不能裝作不線上,領導的訊息沒看到了。
相關文章
- 狀態同步,究竟是推還是拉?
- 到底是用"靜態類"還是單例單例
- websocket技術,實現單聊和群聊Web
- 系統通知,居然有人使用拉取?
- 支付系統之非同步通知非同步
- Android通知之狀態列通知Android
- 微博feed系統的推(push)模式和拉(pull)模式和時間分割槽拉模式架構探討模式架構
- SAP ERP實施專案,到底是公司適應系統還是系統適應公司?
- 網頁端收訊息,究竟是推還是拉?網頁
- 聊一聊 C# 後臺GC 到底是怎麼回事?C#GC
- win10怎麼恢復系統初始狀態 win10系統還原成原始狀態的方法Win10
- Feed 流系統雜談
- 一個 sprint 測完後有一些遺留問題,到底是發版還是不發版?
- 到底是Java好還是Python好?JavaPython
- 用於資料的 XML: XSL 樣式表:推還是拉? (轉)XML
- 你的知識體系是動態還是靜態?
- 系統設計架構:有狀態與無狀態架構
- 如何打造千萬級Feed流系統
- 關於工作當中系統引擎到底是用手寫還是用類似yacc工具編寫?
- 系統狀態統計和檢視
- 網路遊戲同步方式(幀同步和狀態同步)遊戲
- 再問分級診療,聊模式還是聊如何落地?模式
- 聊一聊系統重構
- 聊一聊目前國內IDC主機管理系統現狀和使用感受
- 巨人網路製作人聊遊戲長留: 提高遊戲長留是遊戲製作終極追求遊戲
- 判斷是蘋果系統還是安卓系統的代蘋果安卓
- 區塊鏈遊戲到底是投資工具,還是遊戲?區塊鏈遊戲
- 到底是倉庫模式好,還是MVC模式好?模式MVC
- 面向場景,HTAP到底是剛需還是炒作?
- 【Android】狀態列通知Notification、NotificationManager詳解Android
- 系統狀態檢視工具Sysstat
- Feed流系統重構-架構篇架構
- Win10系統下刪除應用通知列表殘留專案的方法Win10
- 【LINUX】在redhat6系統中 當NFS啟動後 rpc.svcgssd 狀態還是STOPLinuxRedhatNFSRPC
- 推薦一款系統執行狀態監測工具:Monit mac版Mac
- 王者榮耀安琪拉技能詳解析,安琪拉技能效果到底是怎樣的?
- 簡簡單單的Vue3(外掛開發,路由系統,狀態管理)Vue路由
- linux系統電視盒子到底是什麼Linux