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

老司機經驗分享:生產級中間件系統架構設計實踐

開發 架構
總結一下這個架構設計,其實就是Master基于內存維護元數據,這樣一臺物理機可以支撐每秒10萬+的高并發請求。

?這篇文章,給大家來聊一個生產級的中間件系統的架構設計實踐,希望給對中間件系統感興趣的同學一點啟發。

1、Master-Slave架構

這個中間件系統的本質是希望能夠用分布式的方式來處理一些數據,但是具體的作用涉及到核心技術,所以這里不能直接說明。

但是他的核心思想,就是把數據分發到很多臺機器上來處理,然后需要有一臺機器來控制N多臺機器的分布式處理,大概如下圖所示。

那么既然是分布式的處理,就肯定涉及到在Master中要維護這個集群的一些核心元數據。

比如說數據的分發處理是如何調度的,處理的具體過程現在什么進度了,還有就是對集群里存放數據進行描述的一些核心元數據。

這些核心元數據肯定會不斷的頻繁的修改,大家此時可以想,無論你是基于外部的文件還是數據庫,或者是zookeeper來存放這些元數據的話,其實都會導致他的元數據更新性能降低,因為要訪問外部依賴。

何況這種復雜的元數據其實還不一定能通過zk或者數據庫來存放,因為他可能是非格式化的。

所以這里一個核心的設計,就是將核心元數據直接存放在Master的內存里,這樣可以保證高并發更新元數據的時候,他的性能是極高的,而且直接基于內存來提供對外的更新服務。

如果Master部署在高配置物理機上,比如32核128GB的那種,每秒支持10萬+的請求都沒問題。

2、異步日志持久化機制

但是這里有一個問題,假如說Master進程重啟,或者是突然宕機了,那么內存里的數據不就丟失了么?

對,所以針對這個問題,既然已經否決掉了基于外部存儲來寫入元數據,那么這里就可以采取異步持久化日志的機制,來通過異步化的方式把元數據的更新日志寫入磁盤文件。

每次Master收到一個請求,在內存里更新元數據之后,就需要生成一條元數據的更新日志,把這個更新日志需要寫入到一個內存緩沖里去。

然后等內存緩沖滿了之后,由一個后臺線程把這里的數據刷新到磁盤上去,如下圖。

肯定會有人說,那如果一條更新日志剛寫入緩沖區,結果Master宕機了,此時不是還是會丟失少量數據嗎?因為還沒來得及刷入磁盤。

沒錯啊,這個為了保證高并發請求都是由內存來處理的,你必須得用異步持久化磁盤的模式,所以必然要容忍極端宕機情況下,可能丟失比如幾秒鐘的數據。

那么如果是正常的Master重啟呢?

那簡單,必須先把日志緩沖區清空刷入磁盤,然后才能正常重啟Master,保證數據都在磁盤上不會丟失。

接著重啟的時候,從磁盤上讀取更新日志,每一條都依次回訪到內存里,恢復出來核心元數據即可。


3、檢查點機制:定時持久化全量數據

但是這里又有一個問題了,那個磁盤上的日志文件越來越大,因為元數據不斷的在更新,不斷在產生最新的變更日志寫入磁盤文件。

那么系統運行一段時間以后,每次重啟都需要從磁盤讀取歷史全部日志,一條一條回放到內存來恢復核心元數據嗎?

不可能,所以這里一定要配合引入檢查點機制。

也就是說,每隔一段時間,就需要開啟一個后臺線程,把內存里的全部核心元數據序列化后寫入磁盤上的元數據文件,作為這個時間的一個快照文件,同時清空掉日志文件,這個叫做檢查點操作。

下次重啟,只要把元數據文件讀取出來直接反序列化后方入內存,然后把上次檢查點之后的變更日志從日志文件里讀出來回放到內存里,就可以恢復出來完整的元數據了。

這種方式,可以讓Master重啟很快,因為大部分數據都是在檢查點寫入的那個元數據文件里。

整個過程,如下圖所示:

4、引入檢查點節點

但是這個時候又有一個問題了。

大家可以想一下,Master內存里的元數據需要高并發的被人訪問和修改,同時每隔一段時間還要檢查點寫入磁盤。

那么在檢查點過程中,是不是需要把內存數據全部加鎖,不允許別人修改?

在加鎖的時候,把不會變動的數據寫入磁盤文件中,但是這個過程是很慢的,意味著此時別人高并發的寫入操作都需要等待核心元數據的鎖。

因為此時別人鎖住了,你無法加鎖去寫數據進去,這會導致系統在幾秒內出現卡頓無法響應請求的問題。

所以此時需要在架構設計里引入一個檢查點節點,專門負責同步Master的變更日志。

然后在自己內存里維護一份一模一樣的核心元數據,每隔一段時間由檢查點節點來負責將內存數據寫入磁盤,接著上傳發送給Master。

這樣做,就不需要Master自己執行檢查點的時候對自己內存數據進行加鎖了,如下圖。

在這樣的一個架構下,對Master來說,他只需要一個后臺線程負責接收Checkpoint進程定時傳送過來的元數據文件快照然后寫入本地磁盤就可以了,完全規避掉了對自己內存元數據的鎖沖突的問題。

5、總結 & 思考

總結一下這個架構設計,其實就是Master基于內存維護元數據,這樣一臺物理機可以支撐每秒10萬+的高并發請求。

每次元數據出現更新,寫一條日志到內存緩沖區,然后后臺線程去刷新日志到日志文件里去,同時需要發送一條日志到Checkpoint節點去。

Checkpoint節點會在自己內存里維護一份一模一樣的元數據,然后每隔一段時間執行checkpoint檢查點寫一份元數據文件快照。

接著上傳給Master節點后清空掉他的日志文件。然后Master節點每次重啟的時候直接讀取本地元數據文件快照,加上回放上次checkpoint之后的日志即可。

這里可能大家會提幾個問題,比如說Master節點突然宕機會如何?

那很簡單,直接影響就是他內存緩沖里的那些日志丟了,導致少量數據丟失,這個在我們的場景下可以容忍。

如果Checkpoint節點宕機怎么辦?

那不要緊,因為他之前上傳過元數據文件的快照,所以對Master而言最多就是無法同步數據過去。

但是Master重啟,還是可以讀取最近一次的元數據快照,然后回放日志即可。

等Checkpoint節點恢復了,可以繼續接著上一次同步日志,然后繼續執行checkpoint操作。?

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-04-26 07:57:29

軟件架構設計

2023-04-28 08:23:51

軟件架構設計

2009-01-15 09:43:51

Web架構設計緩存

2009-06-16 10:53:01

JBoss中間件JBoss架構

2023-06-12 08:13:29

中間件國產操作系統

2011-05-24 15:10:48

2021-02-11 08:21:02

中間件開發CRUD

2015-10-16 14:35:05

SaaSCRM架構設計

2022-09-03 18:00:05

消息中間件MQ

2021-05-08 18:50:57

分庫分表中間件

2024-08-09 08:11:02

2013-10-23 10:45:55

移動中間件最佳實踐

2018-02-01 10:19:22

中間件服務器系統

2018-07-29 12:27:30

云中間件云計算API

2016-11-11 21:00:46

中間件

2018-08-02 16:46:58

2023-01-11 21:11:37

RabbitMQRocketMQ消息中間件

2012-11-30 10:21:46

移動中間件

2009-06-16 15:55:06

JBoss企業中間件

2023-10-24 07:50:18

消息中間件MQ
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美二区三区 | 国产97视频在线观看 | 久久久久久成人 | 香蕉久久久久久 | 美国十次成人欧美色导视频 | 日韩欧美字幕 | 中文字幕综合 | 成年人视频免费在线观看 | 视频一区二区中文字幕日韩 | 最新中文字幕在线 | 色播视频在线观看 | 日韩欧美视频在线 | 观看毛片 | 99精品视频一区二区三区 | 日韩精品欧美精品 | 日本三级播放 | 99热在线免费 | 欧美精品一区二区三区在线播放 | 欧美黄色片 | 亚洲欧洲中文 | 一区二区中文 | 国精产品一区一区三区免费完 | 一呦二呦三呦国产精品 | 亚洲欧美日韩在线 | 免费看国产片在线观看 | 中文字幕精品一区 | 亚洲国产一区二区视频 | 国产aaaaav久久久一区二区 | 国产一级视频在线播放 | 国产一区二区三区亚洲 | 午夜视频在线免费观看 | 麻豆国产一区二区三区四区 | 亚洲精品日韩在线观看 | 99热热 | 久久久国产一区二区三区 | 欧美在线a | 日韩视频中文字幕 | 国产精品精品久久久 | 黄色大片免费看 | 亚洲一区二区在线视频 | 成人毛片在线观看 |