精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

午夜久久久久久电影| 成人免费毛片嘿嘿连载视频| 久久精品国产99国产精品澳门| 成人av毛片在线观看| 俄罗斯一级**毛片在线播放| 久久精品在这里| 91免费视频国产| 国产成人无码精品亚洲| 欧美综合在线视频观看 | 苍井空浴缸大战猛男120分钟| 成人亚洲综合天堂| 国产99久久久精品| 国产精品久久电影观看| 久久久久久久久久久97| 国产欧美一区二区三区精品观看| 91精品婷婷国产综合久久性色 | 精品国产sm最大网站| aaa毛片在线观看| 在线不卡日本v二区707| 国产欧美日韩不卡| 久久久久一区二区| 国产特级黄色片| 老牛嫩草一区二区三区日本| 色综合色综合网色综合| 亚洲色图第四色| 牛牛精品成人免费视频| 欧美一级国产精品| 亚洲老女人av| 亚洲一二三四| 亚洲成人自拍一区| 国产a级片免费看| 国产视频第一页在线观看| 99热这里都是精品| 99久久久精品免费观看国产| 一级黄色片在线观看| 久久久久在线| 性欧美xxxx视频在线观看| 成人做爰视频网站| 欧美aaaaaaaaaaaa| 国产一区二区精品丝袜| www.中文字幕av| 你懂的在线观看一区二区| 日韩欧美久久一区| 伊人五月天婷婷| 亚洲人成网站在线在线观看| 欧美在线小视频| 黑森林精品导航| 天天综合网站| 91精品办公室少妇高潮对白| 苍井空浴缸大战猛男120分钟| 麻豆理论在线观看| 精品国产福利视频| 少妇高潮喷水在线观看| 97天天综合网| 午夜伦欧美伦电影理论片| 2019日韩中文字幕mv| 国产激情视频在线| 亚洲精品国产第一综合99久久| 在线免费观看成人网| av网站大全在线观看| 国产亚洲精品中文字幕| 手机在线观看国产精品| av在线免费观看网| 国产精品久久久久久久午夜片| 亚洲午夜精品久久久久久浪潮| 99re在线视频| ...xxx性欧美| 麻豆传媒网站在线观看| 免费在线中文字幕| 亚洲二区视频在线| 91猫先生在线| 国产精品高清乱码在线观看 | 欧美国产日韩在线| 久久久久人妻一区精品色欧美| 欧美日韩三级| 欧美一级片久久久久久久| 国产精品suv一区| 日本麻豆一区二区三区视频| 成人免费视频网址| 男人天堂综合网| 2014亚洲片线观看视频免费| 日韩视频专区| av片在线观看永久免费| 亚洲福利一区二区| 狠狠热免费视频| av在线成人| 精品少妇一区二区三区在线播放 | 精品区在线观看| 成人av综合在线| 日韩av高清在线播放| 岛国大片在线观看| 专区另类欧美日韩| 日本网站免费在线观看| 玖玖精品在线| 欧美成人三级电影在线| 91丨九色丨国产在线| 欧美三区在线| 中文字幕亚洲一区在线观看| 日韩成人毛片视频| 国产精品黄色| 国产精品成人播放| 精品久久久中文字幕人妻| 91在线视频观看| 影音先锋欧美在线| segui88久久综合| 在线观看av一区| 无人码人妻一区二区三区免费| 久久久久97| 久久视频免费在线播放| 日韩少妇高潮抽搐| 免费成人在线影院| 精品欧美一区二区精品久久| 欧美18hd| 色综合久久天天| 爱情岛论坛亚洲自拍| 国产精品日韩精品中文字幕| 九九九久久国产免费| 亚洲黄网在线观看| 高清成人在线观看| 午夜欧美一区二区三区免费观看| 国产盗摄精品一区二区酒店| 欧美日韩中文一区| 日韩精品卡通动漫网站| 狠狠爱www人成狠狠爱综合网| 国产精品久久久久久久app| 色婷婷在线视频| 亚洲欧美aⅴ...| 国产又大又黄又粗的视频| 国产精品玖玖玖在线资源| 日韩网站免费观看高清| 久久久黄色大片| 成人免费视频一区二区| 少妇高潮大叫好爽喷水| 国产亚洲精彩久久| 精品亚洲一区二区三区在线观看| 欧美精品成人久久| 久久成人免费网| 日韩av高清| 国产精品av一区二区三区| 精品日产卡一卡二卡麻豆| 内射一区二区三区| 奇米888四色在线精品| 免费成人在线观看av| 欧亚av在线| 日韩av在线网站| 国产成人无码精品久久久久| 不卡的av网站| 日本午夜激情视频| 巨人精品**| 高清一区二区三区四区五区| jlzzjlzzjlzz亚洲人| 1024国产精品| 青娱乐国产精品视频| 91精品国产自产拍在线观看蜜| 国产日韩亚洲欧美| 秋霞午夜理伦电影在线观看| 欧美日韩精品免费观看视频| 亚洲一二三精品| 久久99精品国产麻豆婷婷洗澡| 性欧美.com| 国内自拍亚洲| 日韩在线观看成人| 国产精品久久久久久无人区| 亚洲精品少妇30p| 亚洲成a人无码| 一本色道88久久加勒比精品| 极品尤物一区二区三区| 北岛玲heyzo一区二区| 国产亚洲美女久久| 国产精品久久久久毛片| 一级中文字幕一区二区| 性欧美18—19sex性高清| 亚洲国内精品| 日本免费一区二区三区| 日韩毛片网站| 久久久久久亚洲精品| 天堂中文字幕在线| 欧美三级电影精品| 欧美在线视频第一页| 成人在线视频一区| 国产主播在线看| 蜜臀av免费一区二区三区| 国产精品第一视频| 国产精品扒开做爽爽爽的视频| 日韩三级精品电影久久久| 日韩乱码人妻无码中文字幕| 国产色婷婷亚洲99精品小说| 欧美视频国产视频| 一区二区日韩免费看| 午夜老司机精品| 大桥未久女教师av一区二区| 欧美资源在线观看| 日本中文在线观看| 亚洲精品wwww| 一级特黄录像免费看| 亚洲一区影音先锋| 天天操天天舔天天射| 国产激情一区二区三区四区| 欧美日韩在线一| 久久久久国产精品| 久久人人九九| 91精品视频一区二区| 91干在线观看| a免费在线观看| 亚洲日本欧美日韩高观看| 国产日韩欧美一区二区东京热| 午夜视频一区二区| 天堂网av2018| 91丝袜美腿高跟国产极品老师| 日日干日日操日日射| 久久精品一区二区国产| 国产精品av免费观看| 欧美日韩伦理| 鲁鲁视频www一区二区| 日韩精品一区二区三区中文| 人九九综合九九宗合| 婷婷色在线播放| 中文字幕成人在线| 手机亚洲第一页| 日韩午夜在线播放| 在线视频播放大全| 欧美日韩在线影院| 国产在线成人精品午夜| 成人免费在线视频| 波多野结衣av在线观看| 成人黄色a**站在线观看| 在线观看av免费观看| 日韩精品三区四区| 国产淫片免费看| 最新国产拍偷乱拍精品| 资源网第一页久久久| 欧美三级伦理在线| 久久亚洲免费| 精品一区二区男人吃奶| 97在线中文字幕| 亚洲欧美专区| 国产一区二区在线免费| 全球最大av网站久久| 国产成人精品优优av| 在线天堂资源| 91精品国产91久久久久| 99久久精品免费看国产小宝寻花| 美女视频黄免费的亚洲男人天堂| 天天影视久久综合| 中文字幕日韩视频| 91精品大全| 少妇精69xxtheporn| shkd中文字幕久久在线观看| 亚洲人成电影网站色…| 日本视频在线观看一区二区三区| 亚洲精品理论电影| 神马午夜在线观看| 亚洲国产高清福利视频| 欧日韩在线视频| 亚洲国产一区自拍| 天天干视频在线观看| 日韩经典第一页| 日韩有码电影| 亚洲欧美国产精品久久久久久久| 日本又骚又刺激的视频在线观看| 日韩二区三区在线| 嫩草在线播放| 中文字幕日韩欧美| 成人a在线视频免费观看| 久久av在线播放| 黄网av在线| 18久久久久久| jizzyou欧美16| 亚洲va欧美va国产综合剧情| 日韩中文字幕一区二区高清99| 99re在线视频观看| 国产女人18毛片水真多18精品| 久久精品国产美女| 成人国产精品一级毛片视频| 亚洲午夜精品久久久中文影院av| 91精品一区二区三区综合在线爱| 黄色a级片免费看| 在线一区免费观看| 成人免费毛片播放| 精品综合免费视频观看| 国产精品嫩草69影院| 久久亚洲精品国产精品紫薇| 五月激情四射婷婷| 一区二区三区四区av| 国产成人无码av| 欧美浪妇xxxx高跟鞋交| 亚洲第一天堂在线观看| 亚洲欧美999| 成人免费网址| 91av视频在线播放| 日韩黄色碟片| 鲁丝片一区二区三区| 欧美电影《睫毛膏》| 精品人妻人人做人人爽| 日韩精品一级二级| 激情综合激情五月| 国产日韩欧美精品综合| 久久国产精品波多野结衣| 欧美亚洲高清一区| www香蕉视频| 国产亚洲一区二区精品| 日本动漫理论片在线观看网站| 日韩免费观看高清| 天堂va在线高清一区| 日韩电影天堂视频一区二区| 极品av少妇一区二区| www.日本一区| 26uuu色噜噜精品一区| 欧美激情一区二区视频| 欧美亚男人的天堂| 天堂在线中文网| 久久激情视频久久| 新片速递亚洲合集欧美合集| 国产欧美在线一区二区| 97精品在线| 成年人小视频网站| 粉嫩蜜臀av国产精品网站| 天天干天天操天天拍| 欧美日韩亚洲91| 亚洲成a人片77777精品| 色综合影院在线| 欧美一级大黄| 精品一区2区三区| 欧美片第1页综合| 手机免费av片| 国产精品区一区二区三区| 日韩精品久久久久久免费| 精品国产sm最大网站| 少女频道在线观看免费播放电视剧| 国产精品一区二区女厕厕| 外国成人在线视频| 秋霞无码一区二区| 大陆成人av片| 免费一级片在线观看| 91精品国产综合久久福利| 思思99re6国产在线播放| 国产精品三级久久久久久电影| 在线视频亚洲专区| 男女午夜激情视频| 91在线国内视频| 日韩欧美高清在线观看| 欧美va日韩va| www在线观看黄色| 国产嫩草一区二区三区在线观看| 韩日在线一区| 国产国语老龄妇女a片| 一区二区三区国产精品| 国产肥老妇视频| 欧美另类99xxxxx| 91精品啪在线观看国产爱臀| 草草草视频在线观看| 国产精品538一区二区在线| 黑鬼狂亚洲人videos| 欧美一区二区三区免费视频| 超碰个人在线| 99在线高清视频在线播放| 韩国在线视频一区| 中文字幕第3页| 欧美色xxxx| 国产精品一级伦理| 国产精品欧美一区二区三区奶水| 日韩欧美视频在线播放| 婷婷激情综合五月天| 亚洲人成网站色在线观看| 精品欧美在线观看| 国内精品在线一区| 欧美美乳视频| 精品久久久99| 一卡二卡欧美日韩| 人人九九精品| 国产日韩在线亚洲字幕中文| 91精品国产麻豆国产在线观看| 中文字幕18页| 一本大道av伊人久久综合| 无遮挡动作视频在线观看免费入口| 成人黄色片网站| 亚洲精品男同| 日本理论中文字幕| 5566中文字幕一区二区电影| 黄页网站大全在线免费观看| 欧美日韩一区二区三区在线观看免 | 国产精品三区在线观看| 精品99久久久久久| 中文在线8资源库| 亚洲一区二区三区午夜| 国产成人激情av| www.欧美色| 久久6精品影院| 国产亚洲一区二区三区啪| 91精品视频国产| 日韩欧美成人精品| 黄网站视频在线观看| 九九99玖玖| 精品一区二区免费视频| 国产情侣自拍av| 久久成人国产精品| 少妇一区二区视频| 亚洲国产日韩在线一区| 在线免费av一区| 999福利在线视频|