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

“id串行化”到底是怎么實現的?

開發 開發工具
有朋友就要問了,如何保證一個群gid的消息落到同一個服務器處理呢,“id串行化”具體是怎么實現的呢,這個問題在年初的一篇文章中描述過,這里再給有疑問的同學解答一下。

[[176512]]

一、需求緣起

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

有朋友就要問了,如何保證一個群gid的消息落到同一個服務器處理呢,“id串行化”具體是怎么實現的呢,這個問題在年初的一篇文章中描述過,這里再給有疑問的同學解答一下。

二、互聯網高可用常見分層架構

客戶端,反向代理層,接入層(此圖是http短鏈接接入,群聊消息的話是tcp長連接接入),服務層(處理群消息業務邏輯),存儲層(緩存cache存儲,固化db存儲),這是互聯網常見的高可用分層架構。

服務層的引入至關重要,群消息的投遞不能保證落在同一個接入層,但可以保證落在同一個服務層。

三、服務層上下游細節

服務化的service一般由RPC-server框架實現,上游應用是多線程程序(站點層http接入應用,或者長連接tcp接入應用)一般通過RPC-client訪問service,而RPC-client內部又通過連接池connection-pool訪問下游的service(為了保證高可用,是一個service集群)。

 

如上圖:

(1)上游是業務應用(站點層http接入應用,或者長連接tcp接入應用)

(2)下游是service集群

(3)業務應用,它又分為了這么幾個部分

(3.1)最上層是任務隊列【或許web-server例如tomcat幫你干了這個事情了】

(3.2)中間是工作線程【或許web-server的工作線程或者cgi工作線程幫你干了線程分派這個事情了】,每個工作線程完成實際的業務任務,典型的工作任務是通過服務連接池進行RPC調用

(3.3)最下層是服務連接池,所有的RPC調用都是通過服務連接池往下游服務去發包執行的

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

  1. void work_thread_routine(){ 
  2. Task t = TaskQueue.pop(); // 獲取任務 
  3. // 任務邏輯處理,組成一個網絡包packet,調用下游RPC接口 
  4. ServiceConnection c = CPool.GetServiceConnection();  
  5. // 從Service連接池獲取一個Service連接 
  6. c.Send(packet); // 通過Service連接發送報文執行RPC請求 
  7. CPool.PutServiceConnection(c); // 將Service連接放回Service連接池 

如何保證同一個群gid的消息落在同一個service上呢?

只要對服務連接池進行少量改動:

獲取Service連接的CPool.GetServiceConnection()【返回任何一個可用Service連接】改為

CPool.GetServiceConnection(long id)【返回id取模相關聯的Service連接】

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

需要注意的是,連接池不關心傳入的long id是什么業務含義:

(1)傳入群gid,同gid的請求落在同一個service上

(2)傳入用戶uid,同uid的請求落在同一個service上

(3)傳入任何業務xid,同業務xid的請求落在同一個service上

四、其他問題

提問:id串行化訪問service,同一個id訪問同一個service,當service掛掉時,是否會影響service的可用性?

答:不會,當有下游service掛掉的時候,service連接池能夠檢測到連接的可用性,取模時要把不可用的服務連接排除掉。

提問:取模訪問service,是否會影響各連接上請求的負載均衡?

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

五、總結

升級RPC-client內部的連接池,在service連接選取上做微小改動,就能夠實現“id串行化”,實現不同類型的業務gid/uid等的串行化、序列號需求(這下查找日志就方便了,一個群gid/用戶uid的日志只需去一臺機器grep啦)。

文章來源微信號:gh_10a6b96351a9

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

2019-03-25 07:39:35

ID串行化消息順序性高可用

2009-09-11 12:17:59

C#控件屬性

2009-07-10 09:38:06

Java swing組

2022-01-07 07:59:14

Go語言Go Error

2022-01-14 17:01:44

GoError結構

2009-11-18 11:05:27

PHP串行化

2010-01-12 10:29:51

VB.NET對象串行化

2009-06-09 16:14:47

Java swing組件串行化

2018-05-03 15:03:09

內存虛擬化空間

2024-03-15 08:06:58

MySQLJOIN命令

2019-05-28 13:50:27

MySQL幻讀數據庫

2024-05-11 09:41:45

線程安全代碼

2020-12-28 08:18:55

安全代碼線程

2009-11-02 16:41:55

VB.NET串行化對象

2023-10-10 16:03:48

數字化信息化

2023-07-14 12:21:29

流程@Autowired方法

2019-12-18 18:31:10

黑客醫療保險軟件

2024-02-22 08:00:00

SoraOpenAI

2022-08-08 08:00:00

人工智能機器學習計算機應用

2018-02-24 23:19:31

iOSbug蘋果
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人国产精品久久 | 黄a在线观看 | 国产精品视频久久久久 | 日本不卡高字幕在线2019 | 国产丝袜一区二区三区免费视频 | 久在线视频播放免费视频 | 亚洲午夜精品在线观看 | 国产91久久精品一区二区 | 日韩乱码一二三 | 日韩久久网 | 91一区二区三区 | 综合久久综合久久 | 九九热精品免费 | 九九色综合 | 有码在线 | 久久伊人久久 | 黄色欧美 | 久久国产精品视频免费看 | 国产亚洲精品久久19p | 国产福利在线视频 | 国产精品久久久久久久久久久久久 | 九色av| 电影午夜精品一区二区三区 | 欧美激情综合 | 久久久久久久久久爱 | 精品国产一级 | 久久免费国产 | 欧美性乱| 亚洲vs天堂| 日韩视频二区 | 欧美久久一区二区三区 | 国产一区二区三区四 | 涩涩视频在线观看 | 黄色成人av | 久久五月婷 | 东方伊人免费在线观看 | 午夜大片 | 国产精品电影网 | 久热精品在线播放 | 狠狠操狠狠操 | 久久久久久久久淑女av国产精品 |