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

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

開發
群聊是多人社交的基本訴求,群消息的實時性、可達性、離線消息的復雜度,要遠高于單對單消息。

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

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

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

常見的群消息流程如何?

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

群成員表:

t_group_users(group_id, user_id)

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

群離線消息表:

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,就能大大的降低數據庫的冗余存儲量。

群消息表:

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

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

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

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。

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

t_group_users(group_id, user_id, last_ack_msg_id)

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

群消息表,不變:

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去重,讓用戶無感知;
  • 離線消息過多,可以分頁拉取(按需拉?。﹥灮?/li>

思路比結論重要,希望大家有收獲。?

責任編輯:趙寧寧 來源: 架構師之路
相關推薦

2019-01-31 10:15:14

群聊單聊消息

2020-09-07 10:23:01

MySQL索引查詢

2020-09-07 13:05:17

MySQL面試索引

2017-06-06 16:30:55

戴爾交付保障

2017-12-21 19:38:50

潤乾中間表

2022-07-26 23:43:29

編程語言開發Java

2013-01-15 09:41:45

編程語言

2024-04-02 08:41:10

ArrayListSubList場景

2017-08-11 14:21:33

軟件開發前端框架

2023-07-17 08:21:52

漏洞版本項目

2016-12-01 13:40:37

2024-07-12 09:35:38

前端工具檢驗

2018-06-26 15:00:24

Docker安全風險

2024-02-20 08:09:51

Java 8DateUtilsDate工具類

2023-11-13 08:49:54

2018-12-21 09:36:31

OLAP蘇寧Druid

2025-06-04 11:06:54

比特幣區塊鏈挖礦

2021-01-29 08:52:10

App微信移動應用

2021-01-14 05:08:44

編譯鏈接

2021-09-08 22:38:56

區塊鏈公有鏈網絡
點贊
收藏

51CTO技術棧公眾號

日韩在线视频免费播放| 久久人妻一区二区| a天堂中文在线官网在线| 狠狠狠色丁香婷婷综合激情 | theav精尽人亡av| 日韩电影大全网站| 自拍偷拍国产精品| 黑人巨大精品欧美一区二区小视频| 国产精品免费精品一区| 99精品全国免费观看视频软件| 日韩欧美激情一区| 成人羞羞国产免费网站| 成人在线免费看黄| 91麻豆国产在线观看| 国产一区二中文字幕在线看| 国产一级做a爰片在线看免费| 免费看成人哺乳视频网站| 欧美在线观看一二区| 国产精品av免费观看| 久久久久久久久亚洲精品| 国产精品2024| 国产精品久久久久久久久久免费| 久久久久免费看| 狠狠做深爱婷婷综合一区| 精品国产一二三区| 国产在线观看中文字幕| 欧美一区国产| 亚洲超碰精品一区二区| av电影一区二区三区| 成人77777| 99久久精品国产网站| 91免费综合在线| 波多野结衣电影在线播放| 影音国产精品| 久久国产精品电影| 久久久精品成人| 香蕉久久夜色精品国产使用方法 | 亚洲一区二区三区精品在线| 中文字幕成人一区| аⅴ资源新版在线天堂| 91丨porny丨国产入口| 国产精品久久久久久久久婷婷 | 色多多在线观看| 亚洲午夜精品一区二区三区他趣| 一级黄色录像免费看| 精品资源在线看| 久久久亚洲欧洲日产国码αv| 国产日韩精品久久| 狠狠综合久久av一区二区| 国产在线精品一区二区夜色| 国产日本欧美在线观看| 成人一二三四区| 日韩中文欧美在线| 日韩免费观看网站| 久久久久99精品成人片我成大片 | 91福利国产成人精品播放| 欧美第一视频| 在线视频一区二区三| 亚洲中文字幕久久精品无码喷水| 春色校园综合激情亚洲| 亚洲成人激情综合网| 人妻无码久久一区二区三区免费| 爱搞国产精品| 欧美日韩亚洲网| 国产精品亚洲a| 欧美国产日韩电影| 欧美日韩另类国产亚洲欧美一级| 欧美伦理片在线观看| 青娱乐极品盛宴一区二区| 欧美日韩国产欧美日美国产精品| 日本中文字幕影院| 试看120秒一区二区三区| 精品少妇一区二区三区| 精品无码人妻少妇久久久久久| 久久综合社区| 亚洲欧洲国产一区| 亚洲一级黄色录像| 亚洲国产一区二区在线观看| 欧美激情精品久久久久久黑人| 日本在线观看中文字幕| 日日摸夜夜添夜夜添精品视频| 国产精品第2页| 91免费视频播放| 国产成人免费在线观看| 精品久久久三级| 麻豆app在线观看| 国产精品国产精品国产专区不蜜 | 爱爱免费小视频| 日韩欧美视频在线播放| 欧美国产激情18| 西西44rtwww国产精品| 久久综合九色| 亚洲精品日韩激情在线电影| 头脑特工队2免费完整版在线观看| 国产调教视频一区| 欧美大片免费播放| 激情黄产视频在线免费观看| 欧美日韩国产经典色站一区二区三区| 在线观看免费视频污| 亚洲精品无吗| 欧美精品免费看| 99久热在线精品996热是什么| 蜜臀av一级做a爰片久久| 不卡视频一区二区| 超碰在线国产| 精品国产91久久久| 国产精品igao网网址不卡| 久久99高清| 欧美高跟鞋交xxxxxhd| 日韩电影在线观看一区二区| 国产成人精品影视| 视频一区二区在线观看| 不卡视频观看| 欧美亚洲自拍偷拍| 97人妻精品一区二区三区免费| 久久人人88| 日本精品一区二区三区在线播放视频| 国产福利第一视频| 欧美国产激情一区二区三区蜜月| 五十路熟女丰满大屁股 | 国产精品一区二区av| 1024国产在线| 色综合天天视频在线观看| gogo亚洲国模私拍人体| 区一区二视频| 国产91免费看片| 四虎在线视频免费观看| 亚洲视频免费在线观看| 三年中国国语在线播放免费| 日韩精品a在线观看91| 欧美日韩国产成人高清视频| 亚洲天堂自拍偷拍| 国产色91在线| 国产一区亚洲二区三区| 欧美一级三级| 国产做受高潮69| 精品国产无码一区二区| 亚洲欧洲精品一区二区精品久久久| 精品久久久久久无码国产| 日韩精品导航| 91福利视频在线观看| 嫩草影院一区二区| 亚洲在线视频网站| 午夜诱惑痒痒网| 一区二区三区在线| 91久久精品国产| 成年人网站在线| 日韩一区二区精品| 国产suv一区二区三区| 久久机这里只有精品| 亚洲午夜激情| 91精品国产色综合久久不卡粉嫩| 色阁综合伊人av| 在线中文字幕网站| 亚洲欧美一区二区在线观看| 999在线精品视频| 一区二区在线影院| 亚洲专区中文字幕| 色操视频在线| 精品国产凹凸成av人网站| 黄色小说在线观看视频| 99久久免费视频.com| 亚洲熟妇av一区二区三区漫画| 麻豆成人入口| 国产精品电影观看| 在线观看a视频| 91精品国产品国语在线不卡| 18岁成人毛片| 成人小视频在线观看| 欧美 丝袜 自拍 制服 另类| 中国av一区| 国产精品自拍网| 亚洲www色| 亚洲精品电影在线观看| 欧美男人亚洲天堂| 日韩理论片一区二区| 乱码一区二区三区| 亚洲深夜激情| 日日骚一区二区网站| 欧美国产亚洲精品| 欧美一区二区三区…… | 中日韩免费视频中文字幕| 色播五月激情五月| 国产综合自拍| 欧美最大成人综合网| 日日夜夜亚洲| 91国在线精品国内播放| porn视频在线观看| 日韩一区二区三区视频在线观看| 欧美一级视频免费观看| 亚洲国产激情av| 欧美成人精品一区二区综合免费| 一区二区三区高清视频在线观看| 亚洲7777| 国产精品一区二区中文字幕| 国产精品一区二区久久精品| av在线不卡免费| 主播福利视频一区| 免费观看国产精品| 欧美欧美欧美欧美首页| 黄色激情视频在线观看| 欧美国产丝袜视频| 国产xxxx视频| 久久国产剧场电影| 香港三级韩国三级日本三级| 99热国内精品永久免费观看| 精品国产免费一区二区三区| 日韩国产一二三区| 热re99久久精品国产66热| 宅男网站在线免费观看| 在线日韩av观看| 无码h黄肉3d动漫在线观看| 欧美高清视频一二三区 | 欧美日韩激情一区二区三区| 日本少妇xxxx动漫| 亚洲天堂福利av| 免费一级黄色录像| 2023国产精品视频| 麻豆免费在线观看视频| 九一九一国产精品| 国产综合免费视频| 亚洲欧洲日本一区二区三区| 精品日韩在线播放| 91综合视频| 日韩亚洲视频在线| 猛男gaygay欧美视频| 国产精品国产三级国产专区53| www.久久草.com| 国产精品入口日韩视频大尺度| 在线观看特色大片免费视频| 国内精品视频一区| 国模雨婷捆绑高清在线| 久久综合色影院| 日本视频在线观看| 深夜福利国产精品| www在线播放| 亚洲日本成人网| 你懂的视频在线| 国产视频精品xxxx| 无码精品人妻一区二区三区影院| 欧美大片一区二区| 亚洲黄色片视频| 日韩一区二区免费在线观看| 国产偷拍一区二区| 欧美一卡二卡三卡四卡| 99久久国产免费| 日韩一区二区在线看| 精品人妻无码一区二区| 91精品国产一区二区三区| 国产尤物视频在线观看| 911精品国产一区二区在线| 97精品人妻一区二区三区香蕉| 欧美日韩国产成人在线免费| 一级黄色片在线| 91精品免费观看| 精品人妻无码一区二区三区蜜桃一| 日韩精品在线一区二区| 可以免费看毛片的网站| 亚洲第一区在线观看| 亚洲色图欧美视频| 亚洲欧美中文日韩在线v日本| 欧美视频综合| 中文字幕av一区中文字幕天堂| 在线毛片网站| 欧美老少配视频| 99久久精品免费看国产小宝寻花| 91国内产香蕉| 色偷偷色偷偷色偷偷在线视频| 欧美性一区二区三区| 中文字幕乱码中文乱码51精品| 日本免费在线精品| 国产麻豆一区| 国产欧美精品一区二区三区-老狼| 视频欧美精品| 国产伦一区二区三区色一情| 亚洲色图美女| 亚洲在线视频一区二区| 激情久久一区| 亚欧在线免费观看| 国产精品一区二区三区99| 国产性生活毛片| 国产视频在线观看一区二区三区| 国产午夜精品理论片在线| 亚洲一区二区视频| 老熟妇一区二区三区| 日韩一区二区在线免费观看| 日本一区高清| 久久国产精品久久久久久| 国产乱码精品一区二三赶尸艳谈| 国产成人精品一区二区三区| 国产一区二区三区免费在线| 精品国产综合久久| 四虎成人av| 免费成人午夜视频| 韩日精品视频一区| 亚洲最大免费视频| 国产精品成人免费在线| 免费日韩一级片| 精品视频一区二区不卡| 五月婷婷激情在线| 久久精品2019中文字幕| 在线免费日韩片| 99视频在线| 91亚洲国产| 内射国产内射夫妻免费频道| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲精品videossex少妇| 在线观看完整版免费| 欧美一级黑人aaaaaaa做受| 韩国一区二区三区视频| 天堂资源在线亚洲视频| 一级成人国产| 性活交片大全免费看| 亚洲欧洲精品天堂一级| japanese国产在线观看| 日韩成人性视频| 亚洲小说区图片区都市| 国产一区红桃视频| 欧美伦理影院| 免费高清在线观看免费| 高清shemale亚洲人妖| 2014亚洲天堂| 欧美午夜电影网| 青青草免费观看免费视频在线| 欧美高清性猛交| 精品一区二区三区四区五区| 亚洲精品日韩成人| 久久精品亚洲| 精品少妇一区二区三区免费观| 亚洲成人av一区二区| 亚洲精品一级片| 久久国产色av| 国产精品久一| 国产精品12p| 韩国一区二区视频| 亚洲少妇xxx| 欧美日韩国产色站一区二区三区| 成人精品一区二区| 国产精品入口尤物| 日韩在线视频精品| 天堂视频免费看| 成人欧美一区二区三区| 这里只有精品9| 久久激情视频久久| 国产精品久久久久久久久久辛辛| 91免费视频黄| 国产美女一区二区三区| 亚洲国产精品免费在线观看| 欧美一区日本一区韩国一区| 成人福利网站| 99久久无色码| 亚洲激情专区| 播金莲一级淫片aaaaaaa| 欧美日韩在线影院| 欧美女优在线观看| 国产精品久久久久aaaa九色| 成人毛片免费看| 伊人网在线综合| 亚洲激情五月婷婷| 空姐吹箫视频大全| 日本乱人伦a精品| 日韩三级在线| 手机av在线网站| 亚洲一级不卡视频| 色鬼7777久久| 国产精品久久久久久久久免费| 日韩国产一区二区| 乳色吐息在线观看| 婷婷成人激情在线网| 免费a级毛片在线观看| 国产在线精品播放| 亚洲视频福利| 中文字幕日韩三级片| 欧美午夜精品久久久久久孕妇 | 亚洲精品911| 欧美一区二区视频97| 日韩大片在线观看| 国产精品99久久久精品无码| 天天av天天翘天天综合网色鬼国产 | 中文字幕av日韩精品| 成人动漫av在线| 国产天堂第一区| 久久69精品久久久久久久电影好| 美女福利一区| 一个色综合久久| 香蕉影视欧美成人| 在线免费观看黄色网址| 国产精品久久久久久久久婷婷| 日韩国产在线观看一区| 永久看片925tv| 亚洲精品日韩久久久| 国产精品久久久久久av公交车| 国模无码视频一区二区三区| 国产精品盗摄一区二区三区| 日本xxxx人| 国产日本欧美在线观看 | 青青草国产精品一区二区| 99久久.com| 亚洲午夜福利在线观看| 欧美一二三四区在线|