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月份逐條解答。
畫外音:自從有了群訊息已讀回執,我再也不能裝作不線上,領導的訊息沒看到了。
相關文章
- 狀態同步,究竟是推還是拉?
- 支付系統之非同步通知非同步
- 系統通知,居然有人使用拉取?
- 現在常說的 宣告式,狀態 到底是個啥?一篇文章淺聊清楚
- 薪資留人還是情感留人?
- SAP ERP實施專案,到底是公司適應系統還是系統適應公司?
- win10怎麼恢復系統初始狀態 win10系統還原成原始狀態的方法Win10
- Feed 流系統雜談
- 聊一聊 C# 後臺GC 到底是怎麼回事?C#GC
- 網頁端收訊息,究竟是推還是拉?網頁
- 到底是Java好還是Python好?JavaPython
- 跳槽季,你是該跳,還是該留?
- 一個 sprint 測完後有一些遺留問題,到底是發版還是不發版?
- 系統設計架構:有狀態與無狀態架構
- 如何打造千萬級Feed流系統
- 系統狀態統計和檢視
- 聊一聊目前國內IDC主機管理系統現狀和使用感受
- 網路遊戲同步方式(幀同步和狀態同步)遊戲
- Kylin系統檢視firewalld狀態
- Android 隱藏系統狀態列Android
- netty無縫切換rabbitmq、activemq、rocketmq實現聊天室單聊、群聊功能NettyMQ
- kali linux如何開啟電源狀態通知Linux
- Feed流系統重構-架構篇架構
- 簡簡單單的Vue3(外掛開發,路由系統,狀態管理)Vue路由
- linux系統電視盒子到底是什麼Linux
- 聊一聊系統重構
- 推薦一款系統執行狀態監測工具:Monit mac版Mac
- SAP PP COR2下達工單系統報錯說-系統狀態APNG是啟用的- 分析第二篇
- 系統狀態下的洞察力
- Linux中系統狀態檢測命令Linux
- 面向場景,HTAP到底是剛需還是炒作?
- 到底是倉庫模式好,還是MVC模式好?模式MVC
- 【Android】狀態列通知Notification、NotificationManager詳解(轉載)Android
- Django是同步框架還是非同步框架Django框架非同步
- 到底是誰還在給4399充錢?
- [ - Flutter 狀態篇 redux - ] StoreConnector還是StoreBuilder,讓distinct把好關FlutterReduxRebuild
- Vuex 單狀態庫 與 多模組狀態庫Vue
- 做FMEA,到底是方法論重要?還是技術重要?