国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

消息順序性,究竟為什么這么難?

開發 架構
消息順序性是分布式系統架構設計中非常難的問題,有什么常見優化實踐呢?

?很多業務都需要考慮消息投遞的順序性:

  • 單聊消息投遞,保證發送方發送順序與接收方展現順序一致;
  • 群聊消息投遞,保證所有接收方展現順序一致;
  • 充值支付消息,保證同一個用戶發起的請求在服務端執行序列一致;

消息順序性是分布式系統架構設計中非常難的問題,有什么常見優化實踐呢?

折衷一:以客戶端或者服務端的時序為準

不管什么情況,都需要一個標尺來衡量時序的先后順序,可以根據業務場景,以客戶端或者服務端的時間為準,例如:

(1) 郵件展示順序,其實是以客戶端發送時間為準的;

畫外音:發送方只要將郵件協議里的時間調整為1970年或者2970年,就可以在接收方收到郵件后一直“置頂”或者“置底”。

(2) 秒殺活動時間判斷,肯定得以服務器的時間為準,不可能讓客戶端修改本地時間,就能夠提前秒殺;

折衷二:服務端生成單調遞增id作為時序依據

對于嚴格時序的業務場景,可以利用單點寫db的seq/auto_inc_id生成單調遞增的id,來保證順序性。

畫外音:這個生成id的單點容易成為瓶頸。

折衷三:假如業務能接受誤差不大的趨勢遞增id

消息發送、帖子發布時間、甚至秒殺時間都沒有這么精準時序的要求:

  • 同1s內發布的聊天消息時序亂了,沒事;
  • 同1s內發布的帖子排序不對,沒事;
  • 用1s內發起的秒殺,由于服務器多臺之間時間有誤差,落到A服務器的秒殺;成功了,落到B服務器的秒殺還沒開始,業務上也是可以接受的(用戶感知不到)

所以,大部分業務,長時間趨勢遞增的時序就能夠滿足業務需求,非常短時間的時序誤差一定程度上能夠接受。

于是,可以使用分布式id生成算法來生成id,作為時序依據。

折衷四:利用單點序列化,可以保證多機相同時序

數據為了保證高可用,需要做到進行數據冗余,同一份數據存儲在多個地方,怎么保證這些數據的修改消息是一致的呢?

“單點序列化”是可行的:

  • 先在一臺機器上序列化操作;
  • 再將操作序列分發到所有的機器,以保證多機的操作序列是一致的,最終數據是一致的;

典型場景一:數據庫主從同步

圖片

數據庫的主從架構,上游分別發起了op1,op2,op3三個操作,主庫master來序列化所有的SQL寫操作op3,op1,op2,然后把相同的序列發送給從庫slave執行,以保證所有數據庫數據的一致性,就是利用“單點序列化”這個思路。

典型場景二:GFS中文件的一致性

圖片

GFS(Google File System)為了保證文件的可用性,一份文件要存儲多份,在多個上游對同一個文件進行寫操作時,也是由一個主chunk-server先序列化寫操作,再將序列化后的操作發送給其他chunk-server,來保證冗余文件的數據一致性的。

單對單聊天,怎么保證發送順序與接收順序一致呢?

單人聊天的需求,發送方A依次發出了msg1,msg2,msg3三個消息給接收方B,這三條消息能否保證顯示時序的一致性(發送與顯示的順序一致)?

方案設計思路如下:

  • 如果利用服務器單點序列化時序,可能出現服務端收到消息的時序為msg3,msg1,msg2,就會與發出序列不一致。
  • 業務上不需要全局消息一致,只需要對于同一個發送方A,ta發給B的消息時序一致,常見優化方案,在A往B發出的消息中,加上發送方A本地的一個絕對時序,來表示接收方B的展現時序。
msg1{sender:A, seq:10, receiver:B, msg:content1}
msg2{sender:A, seq:20, receiver:B, msg:content2}
msg3{sender:A, seq:30, receiver:B, msg:content3}

圖片

可能存在問題是:如果接收方B先收到msg3,msg3會先展現,后收到msg1和msg2后,會展現在msg3的前面。

群聊消息,怎么保證各接收方收到順序一致?

群聊消息的需求,N個群友在一個群里聊,怎么保證所有群友收到的消息顯示時序一致?

方案設計思路如下:

  • 假設和單聊消息一樣,利用發送方的seq來保證時序,因為發送方不單點,seq無法統一生成,可能存在不一致。
  • 于是,可以利用服務器的單點做序列化。

圖片

如上圖,此時群聊的發送流程為:

  • sender1發出msg1,sender2發出msg2;
  • msg1和msg2經過接入集群,服務集群;
  • service層到底層拿一個唯一seq,來確定接收方展示時序;
  • service拿到msg2的seq是20,msg1的seq是30;
  • 通過投遞服務將消息給多個群友,群友即使接收到msg1和msg2的時間不同,但可以統一按照seq來展現;

這個方法能實現,所有群友的消息展示時序相同。

缺點是,生成全局遞增序列號的服務很容易成為系統瓶頸。

還有沒有進一步的優化方法呢?

群消息其實也不用保證全局消息序列有序,而只要保證一個群內的消息有序即可,這樣的話,“id串行化”就成了一個很好的思路。

圖片

這個方案中,service層不再需要去一個統一的后端拿全局seq,而是在service連接池層面做細小的改造,保證一個群的消息落在同一個service上,這個service就可以用本地seq來序列化同一個群的所有消息,保證所有群友看到消息的時序是相同的。

此時利用本地時鐘來生成seq就湊效了,是不是很巧妙?

總結

  • 要“有序”,先得有衡量“有序”的標尺,可以是客戶端標尺,可以是服務端標尺;
  • 大部分業務能夠接受大范圍趨勢有序,小范圍誤差;絕對有序的業務,可以借助服務器絕對時序的能力;
  • 單點序列化,是一種常見的保證多機時序統一的方法,典型場景有db主從一致,gfs多文件一致;
  • 單對單聊天,只需保證發出的時序與接收的時序一致,可以利用客戶端seq;
  • 群聊,只需保證所有接收方消息時序一致,需要利用服務端seq,方法有兩種,一種單點絕對時序,另一種id串行化;

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

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

2019-01-10 09:11:51

消息順序性分布式服務端

2025-07-02 09:15:06

2019-08-30 14:58:47

JavaScript程序員編程語言

2017-01-23 13:08:46

大數據客戶畫像技術

2020-11-10 22:53:54

oracle數據庫

2020-12-10 13:37:08

人工智能人機融合

2020-02-28 16:10:13

攜號轉網運營商中國電信

2020-12-08 05:41:46

人工智能人機融合機器學習

2017-11-03 11:02:08

數據庫中間件

2019-12-26 07:39:36

互聯網架構ip

2017-12-28 11:25:51

2018-06-22 07:51:13

2011-05-12 14:57:58

2022-06-12 23:36:26

微服務架構單體應用

2020-11-19 15:34:47

前端招聘開發

2016-11-16 19:15:34

消息時序分布式系統

2012-11-27 10:36:19

公有云Azure數據中心

2021-11-09 06:00:01

快速排序時間復雜度排序

2023-12-04 09:23:49

分布式消息

2022-09-19 16:38:59

數據產品SaaSSnowflake
點贊
收藏

51CTO技術棧公眾號

色呦呦久久久| 国产精品三级电影| 亚洲一区3d动漫同人无遮挡| 成人午夜激情视频| 中文字幕校园春色| 欧美一二区视频| 久久亚洲精精品中文字幕| 国产精选久久久久久| 日韩电影在线一区| 亚洲第一狼人区| 色婷婷av一区二区三区gif| 色综合桃花网| 国产精品精品久久久| 免费不卡在线视频| 日本成在线观看| 国产视频自拍一区| 国产亚洲精品美女久久久久久久久久| 欧美日韩免费高清| 亚洲欧美在线aaa| 182在线视频观看| 国产精品免费在线免费| 久久国内精品视频| av成人动漫| 国产一区二区欧美日韩| 综合天堂av久久久久久久| 欧美日韩不卡在线视频| 欧美在线你懂的| 国产精品调教视频| 在线国产精品网| 欧美日韩视频免费播放| 高清不卡一区| 欧美日韩精品不卡| 亚洲成年人网站在线观看| 欧美日韩视频免费看| 久久青青草综合| 亚洲国产毛片aaaaa无费看| 久久亚洲资源中文字| 免费一区二区三区| 亚洲va韩国va欧美va精品| 色综合视频一区二区三区44| 女女同性女同一区二区三区91| 亚洲免费在线播放| 96sao精品免费视频观看| 欧美日韩精品久久久免费观看| 亚洲国产一区二区在线播放| 9999精品| 可以看毛片的网址| 欧美变态tickle挠乳网站| 国产高清一区| 成人免费在线观看网站| 中文字幕欧美日韩在线| 青娱乐精品视频| 日韩黄色影院| 成人国产精品久久久| 972aa.com艺术欧美| caoprom在线| 国产另类第一区| 午夜精品在线视频一区| 国产精品流白浆在线观看| av动漫在线免费观看| 欧美一区二区精品久久911| 婷婷综合伊人| 日本在线三级| 国产成人福利网站| 国产精品久久久久aaaa| 欧美第一在线视频| 131美女爱做视频| 国产一区二区日韩| 麻豆国产精品777777在线| 欧美极品另类| 精品国产乱码久久久久久88av| 亚洲成a人片在线观看中文| 最近国产精品视频| 九色中文视频| 国产99视频精品免视看7| 国产精品网曝门| 欧美9999| av片中文字幕| 欧美精品一本久久男人的天堂| 成人av电影免费观看| 88xx成人网| www.av毛片| 色婷婷综合成人| 久久欧美一区二区| 91精品国产自产在线丝袜啪| 欧美 日韩精品| 久久97精品久久久久久久不卡| 久久综合色一综合色88| 日韩一级淫片| 男女免费网站| 国产精品亚洲自拍| 日韩欧美在线视频| 欧美日韩久久| 成人片在线看| 400部精品国偷自产在线观看| 亚洲欧洲日产国产网站| 成人丝袜高跟foot| 精品一区二区三区中文字幕视频| 成熟老妇女视频| 欧美一区三区三区高中清蜜桃| 亚洲综合在线五月| 中文字幕免费精品| 丝袜美腿美女被狂躁在线观看| 日本一区二区精品视频| 亚洲激情视频在线| 2021中文字幕一区亚洲| 亚洲桃色综合影院| 九色视频在线播放| 少妇特黄a一区二区三区| 国产午夜精品美女视频明星a级| 国产亚洲欧美一级| 精品国产一区二区三区小蝌蚪| 蜜桃免费在线| 亚洲一区二区三区午夜| 色偷偷噜噜噜亚洲男人| 日韩一区在线播放| 国产精品jizz在线观看美国| xxx.xxx欧美| 大肉大捧一进一出好爽动态图| 国产精品ⅴa在线观看h| 欧美亚洲一区二区在线| 国产激情精品久久久第一区二区 | 黄色免费视频大全| 性欧美视频videos6一9| 欧美日韩综合视频| 久久99热99| 欧美91在线| 成人在线视频成人| 免费不卡av在线| 国产精品高潮在线| 欧美va天堂va视频va在线| 99久久精品国产观看| 91一区二区| 另类专区亚洲| 免费在线黄色av| 亚洲日本一区二区三区在线不卡| 欧美日韩高清区| 欧美精品在线观看一区二区| 不卡视频一二三| 欧美午夜一区二区福利视频| 国产亚洲欧美日韩精品一区二区三区| 国产污污在线观看| 国产精品亚洲天堂| 国产成一区二区| 日韩的一区二区| 亚洲主播在线观看| 国产美女一区二区三区| 欧美在线电影| 青青在线精品| 成人福利在线| 亚洲一区日韩精品| 亚洲国产一区在线| 国产精选久久久久久| 日韩中文字幕在线视频| 欧美亚日韩国产aⅴ精品中极品| 91原创在线视频| 国产欧美在线| 久久91成人| 日韩有码欧美| free性欧美hd另类精品| 亚色视频在线播放| 国产美女在线一区| 久久精品一区二区三区不卡免费视频| 欧美人在线观看| 精品乱码亚洲一区二区不卡| 午夜久久久久久电影| 久久久美女毛片 | 青青草视频国产| 国产99在线免费| 97在线视频免费观看| 亚洲国产美女久久久久| 色综合一区二区| 国产精品丝袜在线| 久久国产精品第一页| 亚洲国产精品日韩专区av有中文| 久久综合给合| 国产色播av在线| 色老头视频在线观看| 国产乱妇乱子| 国产一级爱c视频| 区一区二区三区中文字幕| 国产精品一久久香蕉国产线看观看 | 久久精品男人天堂av| 69免费视频| 国产高清久久久久| 亚洲a∨日韩av高清在线观看| 一区二区三区天堂av| 成人黄色777网| 久久婷婷影院| 好看的日韩av电影| 欧美一区电影| 欧美人妖视频| 亚洲电影一区| 欧美视频第一| 日韩伦理三区| 日韩一区二区三区免费观看| 成人午夜私人影院| 狠狠色丁香久久婷婷综合_中| 国产精品久久久亚洲一区| 欧美福利视频|