成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

“ID串行化”是如何保證消息順序性的?

開發(fā) 開發(fā)工具 前端
在《消息順序性為何這么難?》中,介紹了一種為了保證“所有群友展示的群消息時序都是一致的”所使用的“ID串行化”的方法:讓同一個群gid的所有消息落在同一臺服務(wù)器上處理。

在《消息順序性為何這么難?》中,介紹了一種為了保證“所有群友展示的群消息時序都是一致的”所使用的“ID串行化”的方法:讓同一個群gid的所有消息落在同一臺服務(wù)器上處理。

[[260316]]

ID串行化是如何實(shí)現(xiàn)的呢?

1. 互聯(lián)網(wǎng)高可用常見分層架構(gòu)

客戶端,反向代理層,接入層,服務(wù)層,存儲層,這是互聯(lián)網(wǎng)常見的高可用分層架構(gòu)。

畫外音:這個圖用過好多次。

這里的“服務(wù)層”至關(guān)重要,ID串行化保證的是,同一個群gid的消息落在同一個服務(wù)上。

畫外音:服務(wù)集群有很多節(jié)點(diǎn),如果能落在同一個服務(wù)節(jié)點(diǎn)上,就可以利用這個服務(wù)節(jié)點(diǎn)做消息串行化。

2. 服務(wù)層上下游細(xì)節(jié)

服務(wù)一般由RPC框架實(shí)現(xiàn),上游調(diào)用方是多線程程序,通過RPC-client訪問服務(wù),而RPC-client內(nèi)部又通過連接池connection-pool來訪問的。

畫外音:為了保證高可用,連接池會對集群中的每個服務(wù)都建立連接。

如上圖:

(1)上游是業(yè)務(wù)應(yīng)用;

(2)下游是服務(wù)集群;

(3)業(yè)務(wù)應(yīng)用,它又分為了這么幾個部分:

  • 上層是任務(wù)隊列(粉色);
  • 中間是工作線程(藍(lán)色),每個工作線程完成實(shí)際的業(yè)務(wù)任務(wù),典型的工作任務(wù)是通過服務(wù)連接池進(jìn)行RPC調(diào)用;
  • 下層是服務(wù)連接池(綠色),所有的RPC調(diào)用都是通過服務(wù)連接池往下游服務(wù)發(fā)請求執(zhí)行;

畫外音:橙色是連接池中的一條連接。

工作線程的典型工作流是這樣的:

  1. void work_thread_routine(){ 
  2. // 獲取任務(wù) 
  3. Task t = TaskQueue.pop();  
  4. // 任務(wù)邏輯處理,組成一個網(wǎng)絡(luò)包packet 
  5. Packet p = MakePacket(t); 
  6.  
  7. // 從Service連接池獲取一個Service連接 
  8. ServiceConnection c = CPool.GetConnection(); 
  9. // 通過Service連接發(fā)送報文執(zhí)行RPC請求 
  10. c.Send(p);  
  11. // 將Service連接放回Service連接池 
  12. CPool.PutConnection(c);  

如何保證同一個群gid的消息落在同一個服務(wù)上呢?

對連接池進(jìn)行少量改動,獲取連接時:

  1. CPool.GetConnection() 

畫外音:返回任何一個可用服務(wù)連接。

升級為

  1. CPool.GetConnection(long id) 

畫外音:返回id取模相關(guān)聯(lián)的服務(wù)連接。

只要傳入群gid,就能夠保證同一個群的請求獲取到同一個連接,從而使請求落到同一個服務(wù)上。

需要注意的是,連接池不關(guān)心傳入的long id是什么業(yè)務(wù)含義:

  • 傳入群gid,同gid的請求落在同一個服務(wù)上;
  • 傳入用戶uid,同uid的請求落在同一個服務(wù)上;
  • 傳入任何業(yè)務(wù)xid,同業(yè)務(wù)xid的請求落在同一個服務(wù)上;

ID串行化訪問服務(wù),同一個id訪問同一個服務(wù),當(dāng)服務(wù)掛掉時,會不會受影響服務(wù)可用性?

不會,當(dāng)有下游服務(wù)掛掉的時候,連接池能夠檢測到連接的可用性,取模時要把不可用的服務(wù)連接排除掉。

取模訪問服務(wù),是否會影響各連接上請求的負(fù)載均衡?

不會,只要數(shù)據(jù)訪問id是均衡的,從全局來看,由id取模獲取各連接的概率也是均等的,即負(fù)載是均衡的。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

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

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2016-11-17 22:18:31

id串行化服務(wù)器

2023-12-04 09:23:49

分布式消息

2024-06-27 08:00:17

2023-11-27 17:29:43

Kafka全局順序性

2009-07-10 09:38:06

Java swing組

2009-11-18 11:05:27

PHP串行化

2009-06-09 16:14:47

Java swing組件串行化

2021-02-02 11:01:31

RocketMQ消息分布式

2009-09-11 12:17:59

C#控件屬性

2009-11-02 16:41:55

VB.NET串行化對象

2024-05-09 08:04:23

RabbitMQ消息可靠性

2021-04-27 07:52:18

RocketMQ消息投遞

2023-09-21 09:02:03

RocketMQ全局有序局部有序

2010-01-12 10:29:51

VB.NET對象串行化

2021-04-14 15:01:44

串行化方式緩存

2010-01-06 10:49:54

PHP串行化JSON

2023-12-15 13:08:00

RocketMQ中間件消費(fèi)順序

2009-11-17 16:24:27

PHP變量串行化

2010-01-14 18:00:07

VB.NET串行化對象

2025-06-19 08:03:03

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: av中文字幕在线观看 | www视频在线观看 | 国产精品夜间视频香蕉 | 久久国产精品免费视频 | 日本精品一区二区三区视频 | 亚洲精品一区二区 | 成人精品一区二区 | 日韩欧美在线不卡 | 影音先锋欧美资源 | 国产精品揄拍一区二区久久国内亚洲精 | 麻豆久久久久久久 | 国产高清视频一区二区 | av影片在线 | 日屁网站 | 日韩欧美在线视频 | 欧美激情在线播放 | 国产精品观看 | 亚洲免费视频网址 | 久久精品国产亚洲 | 国产精品麻 | 日韩三片 | 国产情品 | 在线播放精品视频 | 日本亚洲一区 | 99re免费| 91精品久久久久久久久中文字幕 | 国产精品视频在线播放 | 日韩在线观看一区二区三区 | 91av在线视频观看 | 欧美日韩国产高清 | 操人视频在线观看 | 欧美一区二区三区国产精品 | 欧美亚洲国产日韩 | 五月婷六月丁香 | 青青艹在线视频 | 国产人成在线观看 | 欧美日韩在线精品 | 精品欧美视频 | 欧美激情一区二区三区 | 99在线免费视频 | 国产91久久久久久 |