1. 程式人生 > >分散式快取伺服器設計原理

分散式快取伺服器設計原理

假設有n臺伺服器, 計算這n臺伺服器的IP地址的雜湊值, 把這些雜湊值從小到大按順時針排列組成一個“伺服器節點環”, 客戶端需要儲存一系列的“鍵值對”到這些伺服器上去, 計算這些“鍵”的雜湊值, 看看這些“鍵”的雜湊值落在“伺服器環”的哪些區間, 如下圖所示: 根據上圖示意,資料將被儲存在“順時針方向上的下一個伺服器節點” 讀取資料時,也是先根據“鍵”的雜湊值,找到這個伺服器節點, 再向這個節點索取資料。 2.資料如何均勻的分佈?(虛擬伺服器) 假設伺服器數量較少, 很可能造成有些伺服器儲存的資料較多、承擔的壓力較大, 有些伺服器就比較空閒。 這時就要把一臺伺服器虛擬化成多臺伺服器, 具體的操作辦法: 在計算伺服器對應的雜湊值時 可以在IP地址字串加多個“尾綴” 比如: 10.0.0.1#1 10.0.0.1#2 10.0.0.1#3 .... 這樣,一臺物理伺服器就被虛擬化成多臺伺服器, 對應“伺服器環”上的多個節點。 3.如何實現資料的熱備份? 以順時針方向看“伺服器環” 當有客戶端把資料儲存在第1臺伺服器上後, 第1臺伺服器負責把該資料拷貝一份給第2臺伺服器 以此類推, 也就是說“伺服器環”上的每一個節點,都是上一個節點的熱備份節點 同時,一個伺服器上存了兩類資料,一類是自身的業務資料,一類是上一節點的熱備資料。 注意:這裡所說的伺服器,都是物理伺服器,不是虛擬伺服器。 如下圖所示
4.如何讓客戶端發現所有服務端? 每個伺服器節點都要維護一個對照表 這個對照表中包含所有伺服器,(IP地址和IP地址的雜湊值對照表) 配置客戶端時,只要讓客戶端知道任意一個伺服器的IP地址即可 客戶端可以通過獲取這個伺服器的對照表從而知道所有的伺服器 客戶端初始化的時候,這個對照表也儲存在客戶端一份 客戶端根據這個對照表來存取資料 注意:這個對照表是有一個版本號的,具體的用途見下面的描述 5.如何應對伺服器異常? 假設資料在節點1上讀寫不成功, 我們就認為這個節點存在異常,要把它從伺服器群集中拿掉。 客戶端先在節點2(節點1的熱備節點)上完成相應的讀寫工作,這時客戶端就可以去做其他工作了。 然後節點2向節點0索取資料(這些資料是本應該備份在節點1上的資料) 然後節點2向節點3推送資料(這些資料是節點1上的資料,現在要備份在節點3上) 然後節點2更新其對照表,把節點1從其對照表中移除,並更新對照表的版本號 當有任何客戶端與節點2互動的時候, 就會發現節點2上的對照表的版本號比自己持有的對照表要高 此時,客戶端就更新自己的對照表 這些客戶端再與其他伺服器互動的時候 其他伺服器發現客戶端攜帶的對照表版本號比自己持有的要高 此時,其他伺服器更新自己的對照表 注意:這是一個“發散式的連鎖反應”,不會影響生產。 還可以讓節點2告知節點3需要更新對照表 當節點3更新完之後,再讓節點3告知節點4.... 以此引發“環式的連鎖反應” 注意: 當“伺服器環”上連續兩臺伺服器同時故障的時候,那麼這個系統就崩潰了 可以對資料做兩次熱備份,以提高安全性,但效能和硬體利用率會有所損耗。 6.如何增加伺服器?
首先需要通過配置讓這臺伺服器知道節點環上的任意一臺伺服器的IP地址(假設是10.0.0.1) 此服務端執行之後,他就會從10.0.0.1上獲取對照表, 以此知道自己在節點環中的具體位置, 它首先需要從它的下一個節點中遷移一部分資料(也就是它上一個節點熱備份的一部分資料) 然後從上一個節點中索取一部分資料(也就是該自己儲存的一部分資料) 然後它把自己加入對照表中, 然後告知10.0.0.1需要更新對照表,以此引發連鎖反應

相關推薦

分散式快取伺服器設計原理

假設有n臺伺服器, 計算這n臺伺服器的IP地址的雜湊值, 把這些雜湊值從小到大按順時針排列組成一個“伺服器節點環”, 客戶端需要儲存一系列的“鍵值對”到這些伺服器上去, 計算這些“鍵”的雜湊值, 看看這些“鍵”的雜湊值落在“伺服器環”的哪些區間, 如下圖所示: 根據上圖示意,資料將被儲存在“順時針方向上的

分散式快取架構設計

零、 題記在高併發場景下,需要通過快取來減少資料庫的壓力,使得大量的訪問進來能夠命中快取,只有少量的需要到資料庫層。由於快取基於記憶體,可支援的併發量遠遠大於基於硬碟的資料庫。所以對於高併發設計,快取的設計是必不可少的一環。一、為什麼要使用快取為什麼要使用快取呢?源於人類的一個夢想,就是多快好省的建設社會

《深入理解mybatis原理》 MyBatis的二級快取設計原理

       MyBatis的二級快取是Application級別的快取,它可以提高對資料庫查詢的效率,以提高應用的效能。本文將全面分析MyBatis的二級快取的設計原理。 1.MyBatis的快取機制整體設計以及二級快取的工作模式  

《深入分散式快取:從原理到實踐》

入行20多年來,有了一次不同尋常的嘗試,雖然只是合力出了一本書。時間回溯到2016年, 最初出於挖人的險惡用心,進入了一個名叫“中生代技術”的技術群。本以為和自己加入的諸多技術群類似,沒想到在這裡發現了一群有趣的人,一群熱愛技術的人,一群為了一些技術細節爭論得面紅耳赤的人。因為公眾號wireless_com的

《深入分散式快取:從原理到實踐》學習筆記(最終篇)

第十四章 典型電商應用與快取 及時響應性的使用者需求 資料準確行需求 平臺海量請求的訴求 高可用訴求 14.1 電商類一個你用的挑戰及特點 穩定性決定服務能力 高併發場景(Scale Out 加機器、Scale Up 提

快取伺服器設計與實現(六)

本文講快取中的內容管理–檔案的刪除。 基本原理 快取系統中的檔案,從無到有是被動產生的。初始狀態,快取系統中是空的,請求過來之後,快取會回源取,然後存在本地。而不像web伺服器,檔案是通過其他的手段(傳統的是通過ftp上傳)來建立的,這個建立檔案

《深入分散式快取:從原理到實踐》學習筆記(1)

第一章:快取為王 快取為王,不同的語境中所代表的快取意義不同。 快取的一個主要目的在於提高使用者體驗,是一種非功能性約束。 大型網站架構 頁面快取,不用多次渲染 頁面自身對元素進行快取; 服務端黃金靜態頁面或動態頁

分散式系統開發常見問題-1. session的複製與共享 2. 分散式快取設計

1. session的複製與共享 在web應用中,為了應對大規模訪問,必須實現應用的叢集部署.要實現叢集部署主要需要實現session共享機制,使得多臺應用伺服器之間會話統一, tomcat等多數主流web伺服器都採用了session複製以及實現session的共享. 但問

高效能的分散式記憶體快取伺服器系統——memcached核心原理詳細剖析

memcached是什麼? 許多Web應用都將資料儲存到RDBMS中,應用伺服器從中讀取資料並在瀏覽器中顯示。 但隨著資料量的增大、訪問的集中,就會出現RDBMS的負擔加重、資料庫響應惡化、 網站顯示延遲等重大影響。 這時就該memcached

分散式服務架構:原理 設計與實踐(讀書總結)

文章目錄 1. 分散式微服務架構設計原理 1.1 從傳統的單體架構到到服務化架構 1.2 從服務化到微服務 1.3 微服務架構的核心要點和實現原理 1.4 Java平臺微服務架構的專案組織形式 1.5

搭建linux伺服器叢集,簡單實現,負載均衡,動靜分離,資料主從複製,分散式快取,共享session回話。

負載均衡方案: nignx  應用層負載均衡      優點:配置簡單 缺點:均衡效能一般 有流量消耗  基於反向代理 LVS    網路層負載均衡 優點:配置複雜 缺點:作

分散式服務架構:原理設計與實戰

網站 更多書籍點選進入>> CiCi島 下載 電子版僅供預覽及學習交流使用,下載後請24小時內刪除,支援正版,喜歡的請購買正版書籍 電子書下載(皮皮雲盤-點選“普通下載”) 購買正版 封頁 編輯推薦 本書以分散式服務架構為主線

分散式快取技術原理 淺析 - 20181120

一.引言 快取是 分散式系統 中重要元件,主要解決資料高併發,大資料場景下,熱點資料訪問的效能安全問題,提供高效能的資料快速訪問。 快取的原理:將資料放到更快的儲存中、將資料快取到離應用最近的位置、將資料快取到離使用者最近的位置。 二.快取的流程(淺談) 1.

分散式快取技術redis學習系列(四)——redis高階應用(叢集搭建、叢集分割槽原理、叢集操作)

Redis叢集簡介 Redis 叢集是3.0之後才引入的,在3.0之前,使用哨兵(sentinel)機制(本文將不做介紹,大家可另行查閱)來監控各個節點之間的狀態。Redis 叢集可謂是讓很多人久等了。 Redis 叢集是一組能進行資料共享的Redis 例項(

:Hadoop、NoSQL、分散式、lucene、solr、nutch kafka入門:簡介、使用場景、設計原理、主要配置及叢集搭

    需要考慮的影響效能點很多,除磁碟IO之外,我們還需要考慮網路IO,這直接關係到kafka的吞吐量問題.kafka並沒有提供太多高超的技巧;對於producer端,可以將訊息buffer起來,當訊息的條數達到一定閥值時,批量傳送給broker;對於consumer端也是一樣,批量fetch多條訊息.不

分散式快取--系列1 -- Hash環/一致性Hash原理

當前,Memcached、Redis這類分散式kv快取已經非常普遍。從本篇開始,本系列將分析分散式快取相關的原理、使用策略和最佳實踐。 我們知道Memcached的分散式其實是一種“偽分散式”,也就是它的伺服器結點之間其實是相互無關聯的,之間沒有網路拓撲關係,

分散式快取技術redis系列(四)——redis高階應用(叢集搭建、叢集分割槽原理、叢集操作)

[[email protected] redis-cluster]# mkdir /usr/local/redis-cluster/7037 && cp /usr/local/redis-cluster/7031/redis.conf /usr/local/redis-cluster

京東八年架構師: Redis 如何分散式,金融的設計原理

前言 R2M 是京東金融線上大規模應用的分散式快取系統,目前管理的機器總記憶體容量超過 60TB,近 600 個 Redis Cluster 叢集,9200 多個 Redis 例項。 其主要功能包括:全 web 視覺化運維、快取叢集一鍵部署、資源池統籌管理、線上擴容及快

C#客戶端Redis伺服器分散式快取

轉自:http://www.codeceo.com/article/distributed-caching-redis-server.html 介紹 在這篇文章中,我想介紹我知道的一種最緊湊的安裝和配置Redis伺服器的方式。另外,我想簡短地概述一下在.NET /

分散式高可用性ID伺服器設計實現

服務端/後臺開發中如何生成id是每個開發者都會遇到的問題,在電商、遊戲領域尤其突出。如何保證生成id的唯一性、可靠性、高可用性,如何組織id的格式,在不同的應用場景和限制下實現方式也不盡相同。 我們的應用場景類似電商,在一個訂單的生命週期內,有多個邏輯需要生成各自的id,還要考慮到可讀性和靈活性