精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

群聊比單聊,為什么復雜這么多?

開發 開發工具
群聊是多人社交的基本訴求,一個群友在群內發了一條消息,期望做到在線的群友能第一時間收到消息,群消息的實時性、可達性、離線消息的復雜度,要遠高于單對單消息。

群聊是多人社交的基本訴求,一個群友在群內發了一條消息,期望做到:

  • 在線的群友能***時間收到消息;
  • 離線的群友能在登陸后收到消息;

群消息的實時性、可達性、離線消息的復雜度,要遠高于單對單消息。

常見的群消息流程如何?

群業務的核心數據結構有兩個。

群成員表:

  1. t_group_users(group_id, user_id) 

畫外音:用來描述一個群里有多少成員。

群離線消息表:

  1. t_offine_msgs(user_id, group_id, sender_id,time, msg_id, msg_detail) 

畫外音:用來描述一個群成員的離線消息。

業務場景舉例:

  • 假設一個群中有x,A,B,C,D共5個成員,成員x發了一個消息;
  • 成員A與B在線,期望實時收到消息;
  • 成員C與D離線,期望未來拉取到離線消息;

典型群消息投遞流程,如圖步驟1-4所述:

  • 步驟1:群消息發送者x向server發出群消息;
  • 步驟2:server去db中查詢群中有多少用戶(x,A,B,C,D);
  • 步驟3:server去cache中查詢這些用戶的在線狀態;
  • 步驟4:對于群中在線的用戶A與B,群消息server進行實時推送;
  • 步驟5:對于群中離線的用戶C與D,群消息server進行離線存儲;

典型的群離線消息拉取流程,如圖步驟1-3所述:

  • 步驟1:離線消息拉取者C向server拉取群離線消息;
  • 步驟2:server從db中拉取離線消息并返回群用戶C;
  • 步驟3:server從db中刪除群用戶C的群離線消息;

那么,問題來了!對于同一份群消息的內容,多個離線用戶似乎要存儲很多份。假設群中有200個用戶離線,離線消息則冗余了200份,這極大的增加了數據庫的存儲壓力。

如何優化,減少消息冗余量?

為了減少離線消息的冗余度,增加一個群消息表,用來存儲所有群消息的內容,離線消息表只存儲用戶的群離線消息msg_id,就能大大的降低數據庫的冗余存儲量。

群消息表:

  1. t_group_msgs(group_id, sender_id, time,msg_id, msg_detail) 

畫外音:用來存儲一個群中所有的消息內容。

群離線消息表,需要進行優化:

  1. t_offine_msgs(user_id, group_id, msg_id) 

畫外音:優化后只存儲msg_id。

這樣優化后,群在線消息發送就做了一些修改:

  • 步驟3:每次發送在線群消息之前,要先存儲群消息的內容;
  • 步驟6:每次存儲離線消息時,只存儲msg_id,而不用為每個用戶存儲msg_detail;

拉取離線消息時也做了響應的修改:

  • 步驟1:先拉取所有的離線消息msg_id;
  • 步驟3:再根據msg_id拉取msg_detail;
  • 步驟5:刪除離線msg_id;

優化后的流程,能保證消息的可達性么?例如:

  • 在線消息的投遞可能出現消息丟失,例如服務器重啟,路由器丟包,客戶端crash;
  • 離線消息的拉取也可能出現消息丟失,原因同上;

畫外音:單對單消息的可靠投遞一樣,是通過加入應用層的ACK實現的,群消息呢?

群消息,如何通過應用層ACK,保證消息的可靠投遞?

應用層ACK優化后,群在線消息發送又發生了一些變化:

  • 步驟3:在消息msg_detail存儲到群消息表后,不管用戶是否在線,都先將msg_id存儲到離線消息表里;
  • 步驟6:在線的用戶A和B收到群消息后,需要增加一個應用層ACK,來標識消息到達;
  • 步驟7:在線的用戶A和B在應用層ACK后,將他們的離線消息msg_id刪除掉;

對應到群離線消息的拉取也一樣:

  • 步驟1:先拉取msg_id;
  • 步驟3:再拉取msg_detail;
  • 步驟5:***應用層ACK;
  • 步驟6:server收到應用層ACK才能刪除離線消息表里的msg_id;

如果拉取了消息,卻沒來得及應用層ACK,會收到重復的消息么?

似乎會,但可以在客戶端去重,對于重復的msg_id,對用戶不展現,從而不影響用戶體驗。

對于離線的每一條消息,雖然只存儲了msg_id,但是每個用戶的每一條離線消息都將在數據庫中保存一條記錄,有沒有辦法減少離線消息的記錄數呢?

對于一個群用戶,在ta登出后的離線期間內,肯定是所有的群消息都沒有收到的,完全不用對所有的每一條離線消息存儲一個離線msg_id,而只需要存儲最近一條拉取到的離線消息的time(或者msg_id),下次登錄時拉取在那之后的所有群消息即可,而完全沒有必要存儲每個人未拉取到的離線消息msg_id。

群成員表,增加一個屬性:

  1. t_group_users(group_id, user_id, last_ack_msg_id) 

畫外音:用來描述一個群里有多少成員,以及每個成員***一條ack的群消息的msg_id(或者time)。

群消息表,不變:

  1. t_group_msgs(group_id, sender_id, time,msg_id, msg_detail) 

畫外音:還是用來存儲一個群中所有的消息內容。

群離線消息表:不再需要。

離線消息表優化后,群在線消息的投遞流程:

  • 步驟3:在消息msg_detail存儲到群消息表后,不再需要操作離線消息表(優化前需要將msg_id插入離線消息表);
  • 步驟7:在線的用戶A和B在應用層ACK后,將last_ack_msg_id更新即可(優化前需要將msg_id從離線消息表刪除);

群離線消息的拉取流程也類似:

  • 步驟1:拉取離線消息;
  • 步驟3:ACK離線消息;
  • 步驟4:更新last_ack_msg_id;

加入ACK機制,保證群消息的可靠投遞只會,假設1個群有500個用戶,“每條”群消息都會變為500個應用層ACK,似乎會對服務器造成巨大的沖擊。有沒有辦法減少ACK請求量呢?

批量ACK,是一種常見的,降低請求量的方式。

如果每條群消息都ACK,確實會給服務器造成巨大的沖擊,為了減少ACK請求量,可以批量ACK,批量ACK的方式又有兩種方式:

  • 每收到N條群消息ACK一次,這樣請求量就降低為原來的1/N了;
  • 每隔時間間隔T進行一次群消息ACK,也能達到類似的效果;

批量ACK有可能導致新的問題:如果還沒有來得及ACK群消息,用戶就退出了,這樣下次登錄似乎會拉取到重復的離線消息,怎么辦?

客戶端按照msg_id去重,不對用戶展現,就保證良好的用戶體驗。

群離線消息過多,拉取過慢,怎么辦?

分頁拉取(按需拉取),細節就不再展開了,都是常見的優化方案。

總結

群消息還是非常有意思的,做個簡單總結:

  • 不管是群在線消息,還是群離線消息,應用層的ACK是可達性的保障;
  • 群消息只存一份,不用為每個用戶存儲離線群msg_id,只需存儲一個最近ack的群消息id/time;
  • 為了減少消息風暴,可以批量ACK;
  • 如果收到重復消息,需要msg_id去重,讓用戶無感知;
  • 離線消息過多,可以分頁拉取(按需拉取)優化;

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2022-11-09 10:32:50

群業務群聊數據結構

2017-12-21 19:38:50

潤乾中間表

2022-07-26 23:43:29

編程語言開發Java

2013-01-15 09:41:45

編程語言

2016-12-01 13:40:37

2018-12-21 09:36:31

OLAP蘇寧Druid

2022-08-04 23:32:38

比特幣以太坊代幣

2015-06-25 13:31:19

2024-06-14 09:21:32

2022-01-12 20:04:09

網絡故障斷網事件網絡安全

2021-08-19 06:53:18

開發語言Java

2015-01-14 14:27:18

Docker容器鏡像

2024-03-01 17:01:15

GraphQL后端

2020-07-02 14:12:52

C++語言編程

2024-02-04 10:29:58

線程通信

2021-05-31 22:26:20

5G技術通信

2020-04-27 09:45:16

網絡工程師網絡技術網絡

2024-04-02 08:41:10

ArrayListSubList場景

2017-08-11 14:21:33

軟件開發前端框架

2023-07-17 08:21:52

漏洞版本項目
點贊
收藏

51CTO技術棧公眾號

亚洲福利国产精品| 国语产色综合| 久久久9色精品国产一区二区三区| 色素色在线综合| 日韩精品久久久免费观看| 极品蜜桃臀肥臀-x88av| 黄色网页在线免费看| 韩国理伦片一区二区三区在线播放| 久久久国产一区| 欧美一级大片免费看| 韩日毛片在线观看| 91在线观看地址| 国产精品视频白浆免费视频| 在线能看的av网站| 免费在线观看的电影网站| 成人av电影在线播放| 国产成人亚洲综合91| 欧美激情精品久久久久久免费| 久久av影院| 高清不卡在线观看| 欧美在线视频免费播放| 一区二区精品免费| 9999在线视频| 国产性做久久久久久| 国产综合在线观看视频| 久久黄色免费视频| 免费视频国产一区| 日韩一区二区电影网| 国产白丝袜美女久久久久| 成年人视频在线免费观看| 国产成人在线看| 国产精品黄视频| 国产无遮挡免费视频| 日本一区二区三区视频| 亚洲乱码中文字幕| 欧美日韩国产高清视频| 国产高清精品软件丝瓜软件| 媚黑女一区二区| 色综合91久久精品中文字幕| 91视频在线网站| 欧美freesex黑人又粗又大| 91在线国产福利| 亚洲最大激情中文字幕| 国产高清中文字幕| 午夜精品久久久久久久四虎美女版| 日韩av一区在线观看| 亚洲精品国产久| 色8久久影院午夜场| 亚洲影视在线观看| 亚洲欧美一二三| 二人午夜免费观看在线视频| 亚洲精品韩国| 欧美日韩第一页| 9.1片黄在线观看| 97久久香蕉国产线看观看| 亚洲伊人伊色伊影伊综合网| 欧美aaa在线观看| 四虎永久在线观看| 国产激情精品久久久第一区二区| 国产精品视频大全| 黄色片中文字幕| 99伊人成综合| 久久综合久久美利坚合众国| 美国精品一区二区| av在线不卡免费观看| 最近中文字幕一区二区三区| 91嫩草视频在线观看| 国产激情久久久久久熟女老人av| 国产精品资源站在线| 99高清视频有精品视频| 蜜桃视频污在线观看| 99久久精品免费| 欧美一区二区三区在线免费观看| 一级爱爱免费视频| 激情另类小说区图片区视频区| 成人免费在线视频网址| 国产高潮久久久| 久久精品网址| 91精品久久久久| 亚洲成人精品女人久久久| av资源网一区| 视频一区不卡| h网站久久久| 亚洲午夜一二三区视频| 久久久久久久久久久视频| 精品成人av| 日韩一区二区三区电影在线观看| 波多野结衣有码| 欧美日韩激情在线一区二区三区| 深夜精品寂寞黄网站在线观看| 国产a免费视频| 国产日韩精品视频一区二区三区 | 久草热8精品视频在线观看| 147欧美人体大胆444| 四虎在线观看| 自拍偷拍亚洲激情| 免费看一级大黄情大片| 欧美97人人模人人爽人人喊视频| 日韩欧美国产成人一区二区| 好吊日免费视频| 影视亚洲一区二区三区| 日本不卡高字幕在线2019| 国产强伦人妻毛片| 久久综合色播五月| 精品久久久无码人妻字幂| 国偷自产一区二区免费视频| 日韩一区二区三区在线观看| 一卡二卡三卡四卡| 亚洲一级二级| 成人午夜激情网| 你懂得在线网址| 亚洲卡通动漫在线| 国产三级日本三级在线播放| 亚洲综合色婷婷在线观看| 深夜福利国产精品| 欧美a视频在线观看| 国产91精品精华液一区二区三区 | 亚洲综合在线做性| 欧美午夜黄色| 成人性色生活片免费看爆迷你毛片| 久久青青草综合| 波多野结衣在线播放| 制服丝袜日韩国产| 久久久免费看片| 久久精品免费| 九九九久久久| ririsao久久精品一区| 在线电影欧美成精品| 亚洲欧美一区二区三区不卡| 亚洲一区二区三区久久久| 亚洲精选在线观看| 日韩精品一区二区av| 国产福利精品一区| 看全色黄大色大片| abab456成人免费网址| 亚洲第一偷拍网| 懂色av蜜臀av粉嫩av永久| 久久久久91| 免费av一区二区三区| 1区2区3区在线| 精品久久人人做人人爱| 久久久久久久久久网站| 国产一区二区在线视频| 制服国产精品| 日韩成人综合网| 日韩在线视频中文字幕| 亚洲视频一区在线播放| 久久精品欧美日韩精品| 成人免费视频久久| 欧美日韩一二三四| 国产精品一区久久| 日韩毛片久久久| 欧美福利视频导航| www欧美com| 国产传媒欧美日韩成人| 男人添女人下部视频免费| caoporn成人| 欧美一级视频一区二区| 欧美少妇另类| 欧美色综合影院| 亚洲欧美激情一区二区三区| 欧美在线观看天堂一区二区三区| 高清欧美性猛交| 色噜噜在线播放| 精品日本美女福利在线观看| 成人网站免费观看| 日韩激情一区二区| 中文字幕av日韩精品| 久久久久久亚洲精品美女| 欧美高清性猛交| 手机看片福利在线| 在线视频中文字幕一区二区| 国产日韩精品中文字无码| 精品一区二区久久| 男人添女人荫蒂免费视频| 全球av集中精品导航福利| 色一情一乱一区二区| 99热这里只有精品99| 亚洲一区二区三区爽爽爽爽爽| 国产原创剧情av| 日韩专区欧美专区| 男女激烈动态图| 亚洲图区在线| 91亚洲精品久久久| 久草在线资源福利站| 在线观看欧美成人| 性一交一乱一色一视频麻豆| 欧美日韩综合视频| 亚洲综合久久av一区二区三区| 福利一区在线观看| 中文字幕第100页| 韩日精品在线| 午夜视频久久久| 风间由美一区二区av101| 热久久这里只有精品| 黄色av电影在线观看| 亚洲成人网在线观看| 国产精品尤物视频| 亚洲地区一二三色| 免费看的黄色录像| 不卡一区在线观看| 一级黄色在线播放| 性欧美xxxx大乳国产app| 国产精品美女在线播放| 色婷婷狠狠五月综合天色拍| 亚洲一区二区三区视频| 成人片免费看| 久久久久久av| 欧美18hd| 亚洲色图50p| 蜜臀久久精品久久久久| 欧美日韩卡一卡二| 中文字幕免费视频| 国产福利一区二区三区视频| 亚洲高清在线免费观看| 亚洲深夜福利| 日本香蕉视频在线观看| 91久久国产| 日韩亚洲不卡在线| 一区三区在线欧| 国产精品播放| 麻豆一区在线| 国产一区二区在线免费| 毛片无码国产| 韩剧1988免费观看全集| 羞羞视频在线观看不卡| 日韩中文字幕亚洲| 97超碰国产一区二区三区| 国产视频精品一区二区三区| 高h放荡受浪受bl| 日韩午夜在线观看视频| 国产青青草视频| 欧美日韩成人在线| 中文字幕在线视频免费| 亚洲男同性恋视频| 99久久99久久精品免费看小说.| 久久久久久免费网| 亚洲av综合一区二区| 99久久99久久精品国产片果冻| 欧美xxxx日本和非洲| 国产成人一区在线| 成人免费看片载| 校园春色综合网| 日韩欧美亚洲天堂| 亚洲激情自拍| 一女被多男玩喷潮视频| 一本色道久久精品| 欧美黑人经典片免费观看| 最新国产乱人伦偷精品免费网站| 久久久久久www| 99精品国产99久久久久久福利| 成人免费视频91| 亚洲麻豆视频| 97在线免费公开视频| 国产亚洲一区在线| 97公开免费视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 天天爽人人爽夜夜爽| 手机精品视频在线观看| 91n.com在线观看| 精久久久久久久久久久| 老司机av网站| 97精品电影院| 亚欧精品视频一区二区三区| 国产精品全国免费观看高清| 日本精品一二三| av在线播放不卡| 亚洲国产av一区| 国产精品高潮呻吟久久| 欧美激情图片小说| 污片在线观看一区二区| 无码人妻精品一区二区| 欧美精品在欧美一区二区少妇| 999国产精品视频免费| 精品国产乱码久久久久久图片| 这里只有久久精品视频| 欧美精品123区| 香港一级纯黄大片| 中文字幕久久久av一区| av网站免费在线观看| 国产91精品久久久久| 日韩经典一区| dy888夜精品国产专区| 日韩免费电影在线观看| 亚洲一区三区电影在线观看| 欧美日韩精品| 午夜视频你懂的| 成人污视频在线观看| 六月婷婷七月丁香| 中文字幕在线不卡视频| 麻豆changesxxx国产| 色噜噜狠狠色综合中国| 国产成人三级一区二区在线观看一 | 精品无码一区二区三区的天堂| 欧美精品乱码久久久久久| 日韩在线视频免费| 色yeye香蕉凹凸一区二区av| 操喷在线视频| 成人网欧美在线视频| 伊人春色之综合网| 黄色一级大片免费| 美女在线视频一区| www.色多多| 亚洲精品国产a久久久久久 | 久久精品一本| 少妇性l交大片7724com| 欧美激情综合在线| 全部毛片永久免费看| 欧美久久久久中文字幕| 色网站在线免费观看| 欧美成人一区二区三区电影| 日韩久久一区二区三区| 精品蜜桃一区二区三区| 欧美另类综合| 日本一二三四区视频| 欧美激情中文字幕一区二区| 日韩免费不卡视频| 国产精品二三区| 欧美特黄aaaaaa| 欧美va日韩va| h视频在线免费观看| 91精品久久久久久久久久久| 校花撩起jk露出白色内裤国产精品| 99亚洲国产精品| 精品一二三四在线| 国产在线免费av| 在线国产电影不卡| 美女毛片在线看| 68精品国产免费久久久久久婷婷| 一区二区三区在线资源| 永久免费在线看片视频| 九色|91porny| 91无套直看片红桃在线观看| 在线观看日韩高清av| 麻豆影视在线| 国产精品扒开腿做爽爽爽男男 | 亚洲国产精品成人va在线观看| 成人国产免费电影| 91深夜福利视频| 亚洲天天影视网| 宇都宫紫苑在线播放| 亚洲精品亚洲人成人网在线播放| 一级黄色录像大片| www.午夜精品| 麻豆精品在线| 成人国产在线看| 成人小视频在线| 69成人免费视频| 亚洲日本中文字幕| 性欧美freehd18| 亚洲一区二区三区色| 精品无人码麻豆乱码1区2区 | 国产美女福利在线| 亚洲一区免费网站| 狠狠入ady亚洲精品| 国产香蕉精品视频| 精品久久久久久中文字幕一区奶水 | 亚洲精品一区二区三区99| heyzo高清中文字幕在线| 精品福利影视| 日韩 欧美一区二区三区| 国产免费嫩草影院| 欧美一区国产二区| av资源新版天堂在线| 欧美日韩综合网| 韩国av一区二区三区| 69精品久久久| 亚洲系列中文字幕| 少妇高潮一区二区三区99| xxxxxx在线观看| www成人在线观看| 中文字幕一区二区三区波野结| 久久精品99久久久香蕉| 91免费精品国偷自产在线在线| 黄色免费福利视频| 国产农村妇女毛片精品久久麻豆 | 日本在线高清| 亚洲精品日韩成人| 国产98色在线|日韩| youjizz在线视频| 久久精品精品电影网| 日韩中文字幕无砖| 农村妇女精品一二区| 国产精品久久久久久久久果冻传媒| www.xxxx国产| 国产精品99导航| 国内精品久久久久久久影视麻豆 | 欧美码中文字幕在线| 日本黄色www| 色偷偷久久一区二区三区| 亚洲国产精品久久久久久久| 欧美在线视频观看免费网站| 99视频精品全国免费| 激情综合丁香五月| 91精品国产综合久久国产大片| √8天堂资源地址中文在线| 亚洲精品乱码视频| 97久久精品人人做人人爽| 92久久精品一区二区| 国产91精品久久久久久|