分布式系統快取知識點總結

2021-09-11 12:51:21 字數 2886 閱讀 6907

什麼是分布式系統?

答:分布式和集群是不得不聯絡在一起的兩個概念,如果多台伺服器共同處理一件事情,叫集群;如果多台伺服器各自處理不同的事情,彼此之間協調合作,共同完成整個系統的工作,就叫做分布式系統。

redis-cloud是集群,還是分布式快取系統?

答:既是集群,也是分布式系統。這要看從哪個角度來看。

假如從儲存資料是否相同來看,redis-cloud中每個結點儲存的資料是不一樣的,它共有16384個槽(0~16383),假如redis-cloud中有3個結點,那麼這16384個槽是根據各個節點的效能分布在不同結點上的。第乙個結點負責0~5000個槽,第二個結點負責5001~10000個槽,第三個結點負責10001~16383個槽,三個結點分別負責不同範圍的資料儲存,最終完整對整個資料範圍的儲存,很顯然,這是乙個分布式系統。

但如果從redis-cloud中所提供的快取功能來看,每個結點都是用來做快取的,各個節點提供的功能都是一樣的,當記憶體不夠用時,還可以不斷橫向新增結點來擴大記憶體容量,很顯然,這是乙個集群。

所以,我們會說,redis集群是乙個分布式集群系統。

(面試題)你知道哪些分布式快取,如果要你設計乙個分布式快取,你會怎麼去設計?

答:主要有memcached和redis。我使用redis來做分布式快取。

剛開始對redis的操作都是單機版,雖然redis的速度很快,但是在特別高的併發下,redis也有效能瓶頸。redis中的資料都放在記憶體裡面,記憶體能有多大呢?64個g,已經很大了,64g都放滿了呢?還能放嗎?可以,內存放滿了會放在硬碟中的虛擬記憶體中,一旦用到虛擬記憶體了,效能就很低了,所以我們盡可能的不要超出記憶體的容量。如果存不下了,但是資料還是很多,還需要往快取中放,那怎麼辦呢?通過搭redis集群來擴充套件記憶體空間。官方給出的redis集群名稱為redis-cluster。

redis-cluster架構圖如下:

集群一般都會有乙個入口,有乙個集群管理工具,但redis集群沒有入口,即沒有**層,集群中的節點都是相互連線的,通過ping-pong機制來實現各個節點之間的通訊,以及判斷各個節點的狀態,客戶端想要連線集群,只需要連線到集群中的任意乙個節點即可。

集群中有那麼多個結點,結點中儲存的資料一樣嗎?不一樣。如果是一樣的,那叫主備。既然是集群,就應該是可以擴容的,如果儲存空間不足了,可以加結點,加乙個伺服器進行,儲存空間就會變大。所有結點的記憶體容量加起來才是整個集群記憶體的總容量,如果每個結點儲存的資料都一樣,那總容量就只是乙個redis的記憶體容量了。

redis集群中,每個結點儲存的資料是不一樣的。如果不一樣,那麼當乙個結點掛了,那整個集群就不完整了,不完整了就不能用了,所以,要想保證redis集群的高可用(長時間可使用,而不會宕機),每乙個節點都需要加乙個備份機,如果這個結點掛了,必須要有備份結點頂上來,來保證集群可以繼續提供服務。

redis集群中有乙個投票:容錯機制,我們前面說集群中一般都會有乙個集群管理工具,但在redis集群中並沒有,那麼,我們怎麼才能知道集群中哪乙個結點掛了呢?redis集群中有乙個投票機制。大家都知道,在選舉的時候,是少數服從多數的原則,要判斷redis集群中的某個結點是否掛掉了,需要我們集群中超過半數的節點進行投票,半數以上的節點認為它掛了,它就掛了。假如集群中有5個結點,有三個認為某個結點已經掛了,那麼集群就認為這個結點真掛了。這個時候就要看有沒有備份結點,如果沒有備份結點頂上來,那麼集群就會宕機。如果有備份結點,備份結點頂上來,繼續維持整個集群的工作,然後管理人員就需要趕快把那個掛掉的節點修理好。那麼,集群中最少有幾個結點呢?3個!3個結點就可以搭建起乙個redis集群,在實際開發中,因為還要保證每個結點都有乙個備份機,所以,最小的集群會搭建6個結點。

只需要連線上redis集群中的任意乙個結點,就能連線上整個集群。

redis集群中,每個結點儲存的資料是不一樣的,那就會有乙個問題,如何把資料分散到不同的節點進行儲存呢?為解決這個問題,redis集群中引入了乙個概念,叫slot(槽,雜湊槽)。redis集群中一共有16384個槽(0~16383),這是固定的。這些槽有什麼作用呢?

當要在redis集群中放置乙個key-value對時,先要對key使用crc16演算法得出乙個數,然後再用這個數對16384求餘數,肯定會得到乙個0~16383之間的數,這樣每乙個key值都會對應乙個0~16383之間的雜湊槽,然後將key-value鍵值對放在這個槽對應的redis結點上就可以了。

槽如何進行分配呢?

要看redis集群中有幾個結點,還要看每個結點的效能怎麼樣。假如有3個結點,每個結點的效能都是完全一樣的,那麼我們就可以把這16384個槽平均分到3個結點上。

0~5000個槽分到第乙個結點上

5001~10000個槽分到第二個結點上

10001~16383個槽分到第三個結點上(為了好計算,這樣劃分)

有個問題,redis集群中最少有幾個結點?redis集群中最多有多少個結點?

答:最少有3個,最多有16384個結點。這裡不考慮備份機的問題。

架構細節:

(1)所有的redis節點彼此互聯(ping-pong機制),內部使用二進位制協議優化傳輸速度和頻寬.

(2)節點的fail是通過集群中超過半數的節點檢測失效時才生效.

(3)客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連線集群所有節點,連線集群中任何乙個可用節點即可

(4)redis-cluster把所有的物理節點對映到[0-16383]slot上,cluster 負責維護node<->slot<->value

redis 集群中內建了 16384 個雜湊槽,當需要在 redis 集群中放置乙個 key-value 時,redis 先對 key 使用 crc16 演算法算出乙個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應乙個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點

分布式系統快取知識點總結

答 分布式和集群是不得不聯絡在一起的兩個概念,如果多台伺服器共同處理一件事情,叫集群 如果多台伺服器各自處理不同的事情,彼此之間協調合作,共同完成整個系統的工作,就叫做分布式系統。答 既是集群,也是分布式系統。這要看從哪個角度來看。假如從儲存資料是否相同來看,redis cloud中每個結點儲存的資...

分布式知識點

分布式理論 cap c一致性 各個節點中對於同一資料的拷貝有著相同的值 a可用性,p分割槽容錯性,分割槽容錯指通訊失敗導致資料不一致 方法 兩階段提交 一致性 第一階段 事務管理器要求每個涉及到事務的資料庫預提交 第二階段 事務協調器要求每個資料庫提交資料,或者回滾資料。訊息佇列 最終一致 一致性演...

Dubbo分布式系統框架知識點流程化總結

1 為什麼要進行系統拆分?如何進行系統拆分?拆分後不用dubbo可以嗎?2 說一下的 dubbo 的工作原理?註冊中心掛了可以繼續通訊嗎?說說一次 rpc 請求的流程?2 工作流程 3 dubbo 支援哪些通訊協議?支援哪些序列化協議?說一下 hessian 的資料結構?pb 知道嗎?為什麼 pb ...