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

欧美国产日韩xxxxx| 日韩欧美高清在线| av动漫免费观看| 精品国自产在线观看| 国产精品第一国产精品| 国产精品久久久久精k8| 91精品婷婷国产综合久久蝌蚪| 国产精品a成v人在线播放| 亚洲免费成人av在线| 亚洲精品日韩一| 久久久精彩视频| 一级黄色a视频| 亚洲精品日本| 精品国产美女在线| 欧美精品黑人猛交高潮| 国产95亚洲| 一本在线高清不卡dvd| 91看片淫黄大片91| av老司机久久| 久久久久久一区二区| 久久99久国产精品黄毛片入口| 一级黄色片大全| 亚洲欧洲国产精品一区| 一区二区视频免费在线观看| 欧洲在线视频一区| 久久精品无码av| 免费久久精品| 亚洲成人动漫在线播放| 天堂av.com| 欧美日韩国产网站| 欧美日韩亚洲高清| 成人在线播放网址| 黄色网页在线观看| 国产亚洲成aⅴ人片在线观看| 午夜精品www| www.5588.com毛片| 清纯唯美激情亚洲| 欧美日韩精品电影| 超碰在线人人爱| 免费日韩电影| 黑人巨大精品欧美一区免费视频| 粉嫩av一区二区三区天美传媒| 99中文字幕一区| 国产日韩欧美一区二区三区乱码 | 国产一区视频免费观看| 玖玖在线播放| 欧美日韩国产一区二区三区| 日本手机在线视频| 精灵使的剑舞无删减版在线观看| 亚洲免费观看高清| 日本一道在线观看| 日本一本在线免费福利| 亚洲精品久久嫩草网站秘色| 免费成人深夜夜行网站视频| 成年视频在线观看| 伊人性伊人情综合网| 欧美美女黄色网| 中文字幕中文字幕在线中高清免费版| 国产精品麻豆一区二区| 亚洲午夜久久久影院伊人| caoporn国产精品免费视频| 久久久精品综合| 色播亚洲视频在线观看| 在线观看完整版免费| 中文字幕一区二区三区不卡在线| 一区二区三区四区欧美日韩| 黄在线免费看| 亚洲精选视频在线| 欧美一级视频在线播放| 123区在线| 欧美性色视频在线| 欧美成人黄色网址| 成人日韩视频| 精品成人一区二区| 特级西西人体wwwww| 国产一区二区三区四区二区| 丝袜美腿亚洲一区二区| 一区二区视频免费看| 在线观看视频日韩| 在线视频日本亚洲性| 91大神免费观看| 成人av综合网| 亚洲另类xxxx| 免费成人深夜夜行网站| 黄色成人91| 国产成人自拍视频在线观看| 国产精品高潮呻吟久久久| 国产精品69毛片高清亚洲| 91九色蝌蚪成人| 飘雪影院手机免费高清版在线观看 | 日本高清久久天堂| 欧美日韩午夜视频| 亚洲性人人天天夜夜摸| 国产高清在线不卡| 国产情侣av在线| 91美女福利视频| 亚洲欧美精品| 国产一二在线播放| 欧美三级韩国三级日本一级| 女人扒开腿免费视频app| 成人软件在线观看| 欧美一三区三区四区免费在线看| 丝袜熟女一区二区三区| 日韩一区二区在线| 91极品视频在线| 91福利免费视频| 91麻豆免费看| 欧美 亚洲 视频| 成人mm视频在线观看| 亚洲第一av网站| 九九精品视频免费| 久久精品123| 国产精品区一区| 免费在线观看av| 色综合久久中文字幕综合网| japan高清日本乱xxxxx| 精品大片一区二区| 91精品国产色综合| 亚洲国产精品成人久久蜜臀| 国产精品美女视频| 激情综合在线观看| 污网站在线免费| 日韩高清第一页| 久久久久久久久久久久久久久久久久久久| 在线看日韩av| 国产成人精品网| 成人美女在线视频| 青青草综合视频| 午夜不卡一区| 伊人青青综合网站| 狠狠人妻久久久久久综合| 大胆亚洲人体视频| www国产免费| **日韩最新| 色婷婷久久av| 中文字幕永久免费视频| 国产日韩影视精品| 久久国产色av免费观看| 亚洲资源网你懂的| 日本精品久久久久久久| av女名字大全列表| 91亚洲永久精品| 区一区二区三区中文字幕| 黄色18在线观看| 日韩av中文在线| 香蕉免费毛片视频| av成人免费在线观看| 男人天堂a在线| 久久成人福利| 97在线视频免费看| 日韩av免费观影| 欧美性猛交xxxx免费看| 谁有免费的黄色网址| 日韩电影在线一区二区| 日韩一区国产在线观看| 玖玖精品在线| 久久综合电影一区| www.黄色小说.com| 亚洲成av人片一区二区梦乃| 日本五十肥熟交尾| 免费看的黄色欧美网站| 日本在线成人一区二区| 久久亚洲资源中文字| 麻豆乱码国产一区二区三区| 亚洲福利在线观看视频| 五月婷婷色综合| xxxx黄色片| 天堂成人免费av电影一区| 欧美精品一区在线| 在线观看男女av免费网址| 日韩欧美的一区| 国产真实夫妇交换视频| 久久综合色鬼综合色| 欧美性猛交xxx乱久交| 国产高清一区| 国产精品高清一区二区三区| 亚洲优女在线| 精品国产凹凸成av人网站| 日本少妇激情视频| 久久精品亚洲精品国产欧美| 成人性生交视频免费观看| 精品99视频| 日韩妆和欧美的一区二区| av成人在线网站| 午夜精品理论片| 97超碰国产一区二区三区| 欧美一级电影网站| 一级片中文字幕| 国产精品国产三级国产普通话三级| 久久aaaa片一区二区| 国产亚洲成人一区| 欧美爱爱视频网站| 色天下一区二区三区| 国产在线久久久| 中文字幕在线高清| 久久久极品av| 噜噜噜在线观看播放视频| 91精品国产免费| 国产一级淫片a视频免费观看| 最新久久zyz资源站| 国产伦精品一区二区三区妓女| 黄一区二区三区| 久久国产乱子伦免费精品| 91精品啪在线观看国产18| 鲁丝一区二区三区免费| 涩爱av色老久久精品偷偷鲁| 国产精品吹潮在线观看| 第四色日韩影片| 波霸ol色综合久久| 国产日本在线观看| 亚洲精品久久久久久久久| 国产sm主人调教女m视频| 日本久久电影网| 日本少妇在线观看| 一区二区三区在线播| 成人一级片免费看| 久久亚洲欧美国产精品乐播| 国产精品亚洲一区二区无码| 激情综合色综合久久综合| 国产xxxxx视频| 一区二区三区成人精品| 国产高清www| 欧美日韩 国产精品| 中文有码久久| 久久国产中文字幕| 亚洲mv在线看| 精品美女久久| 欧美精品国产精品久久久 | 91系列在线观看| 日韩一区二区三区免费视频| 欧美一级淫片播放口| 四虎影视精品成人| 日韩欧美国产激情| 亚洲精品午夜久久久久久久| 最新国产成人在线观看| 很污很黄的网站| 国产精品日韩精品欧美在线| 中文字幕第4页| 久久精品亚洲麻豆av一区二区| 性欧美丰满熟妇xxxx性仙踪林| 99在线精品观看| 中文字幕免费高清视频| 99精品视频一区二区| 性囗交免费视频观看| 99热99精品| 自拍偷拍中文字幕| 91浏览器在线视频| 亚洲AV无码国产成人久久| 国产视频在线观看一区二区三区 | 精品国产一区二区三区四区 | 成人综合国产精品| 婷婷久久免费视频| 亚洲一区精品电影| 日韩精品中文字幕一区二区 | 国产99久久精品一区二区 夜夜躁日日躁 | 精品人妻一区二区三区蜜桃| 欧美一区二区日韩| 成人av免费播放| 亚洲成人在线网| 深夜影院在线观看| 国产亚洲人成网站在线观看| 中文字幕在线观看第二页| 欧美三级资源在线| 国产精品女同一区二区| 日韩一区二区精品| 欧美一级性视频| 欧美乱妇15p| 国产美女精品视频国产| 日韩精品一区二区三区视频| 好吊视频一二三区| 欧美高清视频不卡网| 国产成人精品白浆久久69| 亚洲成人xxx| 国产在线超碰| 久久资源免费视频| 韩国精品一区| 国产欧美中文字幕| aaa国产精品视频| 欧美一级爽aaaaa大片| 国产高清一区| 自拍日韩亚洲一区在线| 日本美女一区二区三区视频| 国产又黄又嫩又滑又白| 92国产精品观看| 欧美aaa级片| 亚洲国产日日夜夜| 国产主播第一页| 日韩一级免费观看| 美女欧美视频在线观看免费| 久久国产精品免费视频| 日韩伦理在线一区| 成人欧美一区二区三区黑人| 久久男人av| 一本一道久久久a久久久精品91| 韩国亚洲精品| 中文字幕在线综合| 99精品欧美一区二区三区综合在线| 人成免费在线视频| 天天爽夜夜爽夜夜爽精品视频| 欧美性猛交xxxx乱大交hd| 欧美变态tickling挠脚心| 狠狠色伊人亚洲综合网站l| 欧美日韩ab片| 九七电影院97理论片久久tvb| 国产亚洲自拍偷拍| 亚洲国产一成人久久精品| 人妻精品无码一区二区三区| 国产乱码一区二区三区| 日本美女bbw| 欧美性猛交视频| 国产香蕉在线观看| 日韩视频免费大全中文字幕| 欧美日韩电影免费看| 狠狠久久综合婷婷不卡| 中文字幕一区二区三区在线视频| 国产精品少妇在线视频| fc2成人免费人成在线观看播放 | 久久美女精品| 97公开免费视频| www欧美成人18+| 日本中文字幕免费观看| 欧美一级日韩免费不卡| 日韩黄色影院| 国产精品久久久久久久久久久久| 欧美激情影院| 国产精品www在线观看| 国产在线播放一区| 制服丨自拍丨欧美丨动漫丨| 日本道精品一区二区三区| 婷婷国产在线| 国外成人在线直播| 国产三级精品三级在线观看国产| 一二三四中文字幕| 国产一区二区三区蝌蚪| 成人精品一二三区| 欧美天天综合网| 福利小视频在线观看| 国产精品99久久久久久www| 伊人久久大香线蕉综合网蜜芽| 精品久久一二三| 99国产一区二区三精品乱码| 伊人久久综合视频| 亚洲第一免费播放区| 91超碰国产在线| 精品免费视频123区| 中国女人久久久| 51调教丨国产调教视频| 色噜噜狠狠成人中文综合| 日本一二三区在线视频| 欧美最猛黑人xxxx黑人猛叫黄| 亚州av一区| 成年人视频在线免费| 国产偷v国产偷v亚洲高清| 国产无遮挡又黄又爽又色视频| 一夜七次郎国产精品亚洲| 国产一区高清| 三年中文高清在线观看第6集| 国产在线精品视频| 男女免费视频网站| 一本久久精品一区二区| 色视频在线观看免费| 国产成人一区二区三区小说| 清纯唯美亚洲综合一区| 爽爽爽在线观看| 91美女蜜桃在线| 久草热在线观看| 久久亚洲精品一区| 都市激情亚洲| 日韩av资源在线| 国产精品国产三级国产aⅴ入口| 99久久婷婷国产一区二区三区| 欧美激情精品久久久久久变态| 欧美有码在线| 天堂网在线免费观看| 一区二区三区四区av| 日韩大胆视频| 国产在线播放91| 亚洲福利一区| 日本精品在线观看视频| 555www色欧美视频| 毛片在线网站| 一区二区视频国产| 99久久久国产精品免费蜜臀| 国产情侣呻吟对白高潮| 欧美人在线观看| 青青草国产免费一区二区下载| 国产精品偷伦视频免费观看了| 18成人在线观看| 欧美视频xxx| 国产精品一区二区三区久久| 激情欧美日韩一区| 婷婷综合在线视频| 亚洲精品黄网在线观看| 亚洲欧美在线综合| 国产超级av在线| 亚洲乱码国产乱码精品精98午夜 | 欧美亚洲国产精品| 天天做天天爱天天综合网2021| 三级男人添奶爽爽爽视频| 欧美精品三级在线观看|