欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Memcached 分布式緩存實現(xiàn)原理簡介

 更新時間:2016年06月23日 10:47:18   作者:Float_Luuu  
這篇文章主要介紹了Memcached 分布式緩存實現(xiàn)原理簡介,具有參考價值,需要的朋友可以參考下。

摘要

在高并發(fā)環(huán)境下,大量的讀、寫請求涌向數(shù)據(jù)庫,此時磁盤IO將成為瓶頸,從而導(dǎo)致過高的響應(yīng)延遲,因此緩存應(yīng)運(yùn)而生。無論是單機(jī)緩存還是分布式緩存都有其適應(yīng)場景和優(yōu)缺點,當(dāng)今存在的緩存產(chǎn)品也是數(shù)不勝數(shù),最常見的有redis和memcached等,既然是分布式,那么他們是怎么實現(xiàn)分布式的呢?本文主要介紹分布式緩存服務(wù)mencached的分布式實現(xiàn)原理。
緩存本質(zhì)

計算機(jī)體系緩存

什么是緩存,我們先看看計算機(jī)體系結(jié)構(gòu)中的存儲體系,根據(jù)馮·諾依曼計算機(jī)體系結(jié)構(gòu)模型,計算機(jī)分為五大部分:運(yùn)算器、控制器、存儲器、輸入設(shè)備、輸出設(shè)備。結(jié)合現(xiàn)代計算機(jī),CPU包含運(yùn)算器和控制器兩個部分,CPU負(fù)責(zé)計算,其需要的數(shù)據(jù)由存儲提供,存儲分為幾個級別,就拿我當(dāng)前的PC舉個例子,我的機(jī)器存儲清單如下:

    1.356G的磁盤
    2.4G的內(nèi)存
    3.3MB三級緩存
    4.256KB二級緩存(pre core)

除了上述部分,還有CPU內(nèi)的寄存器,當(dāng)然有的計算機(jī)還有一級緩存等。CPU運(yùn)算器工作的時候需要數(shù)據(jù),數(shù)據(jù)哪里來?首先從距離CPU最近的二級緩存去拿,這塊緩存速度最快,通常也是體積最小,因為價格最貴:

http://img.jbzj.com/file_images/article/201606/2016623103604431.jpg

存儲金字塔

如上圖所示,存儲體系就像個金子塔,最上層最快,價格最貴,最下層最慢,價格也最便宜,CPU的數(shù)據(jù)源優(yōu)先級一層層從上到下去尋找數(shù)據(jù)。

很顯然,除了最慢的那塊存儲,在計算機(jī)體系中,相對較快的那些存儲都可以被稱為緩存,他們解決的問題是讓存儲訪問更快。

緩存應(yīng)用系統(tǒng)

計算機(jī)體系存儲系統(tǒng)模型擴(kuò)展到應(yīng)用也是一樣,應(yīng)用需要數(shù)據(jù),數(shù)據(jù)哪里來?緩存(更快的存儲)->DB(較慢的存儲),他們的工作流程大致如下圖所示:

http://img.jbzj.com/file_images/article/201606/2016623103628125.jpg

帶緩存的存儲訪問一般模型

如上圖所示,緩存應(yīng)用系統(tǒng)一般存儲訪問流程:首先訪問緩存較快的存儲介質(zhì),如果命中且未失效則返回內(nèi)容,如果未命中或失效則訪問較慢的存儲介質(zhì)將內(nèi)容返回同時更新緩存。

memcached簡介

什么是memcached

memcached是LiveJournal旗下的Danga Interactive公司的Brad Fitzpatric為首開發(fā)的一款軟件?,F(xiàn)在已經(jīng)成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務(wù)中提高Web應(yīng)用擴(kuò)展性的重要因素。傳統(tǒng)的Web應(yīng)用都將數(shù)據(jù)保存到RDBMS中,應(yīng)用服務(wù)器從RDBMS中讀取數(shù)據(jù)、處理數(shù)據(jù)并在瀏覽器中顯示。但是隨著數(shù)據(jù)量增大、訪問的集中、就會出現(xiàn)RDBMS的負(fù)擔(dān)加重、數(shù)據(jù)庫響應(yīng)變慢、導(dǎo)致整個系統(tǒng)響應(yīng)延遲增加。

而memcached就是為了解決這個問題而出現(xiàn)的,memcached是一款高性能的分布式內(nèi)存緩存服務(wù)器,一般目的是為了通過緩存數(shù)據(jù)庫的查詢命中減少數(shù)據(jù)庫壓力、提高應(yīng)用響應(yīng)速度、提高可擴(kuò)展性。

http://img.jbzj.com/file_images/article/201606/2016623103637275.jpg

memcached緩存應(yīng)用

memcached緩存特點

    1.協(xié)議簡單
    2.基于libevent的事件處理
    3.內(nèi)置內(nèi)存存儲方式
    4.memcached不相互通信的分布式

memcached分布式原理

今天的內(nèi)容主要涉及memcached特點的第四條,memcached不相互通信,那么memcached是如何實現(xiàn)分布式的呢?memcached的分布式實現(xiàn)主要依賴客戶端的實現(xiàn):

http://img.jbzj.com/file_images/article/201606/2016623103643317.jpg

memcached分布式

如上圖所示,我們看下緩存的存儲的一般流程:

當(dāng)數(shù)據(jù)到達(dá)客戶端,客戶端實現(xiàn)的算法就會根據(jù)“鍵”來決定保存的memcached服務(wù)器,服務(wù)器選定后,命令他保存數(shù)據(jù)。取的時候也一樣,客戶端根據(jù)“鍵”選擇服務(wù)器,使用保存時候的相同算法就能保證選中和存的時候相同的服務(wù)器。

余數(shù)計算分散法

余數(shù)計算分散法是memcached標(biāo)準(zhǔn)的memcached分布式方法,算法如下:

復(fù)制代碼 代碼如下:
CRC($key)%N

該算法下,客戶端首先根據(jù)key來計算CRC,然后結(jié)果對服務(wù)器數(shù)進(jìn)行取模得到memcached服務(wù)器節(jié)點,對于這種方式有兩個問題值得說明一下:

    1.當(dāng)選擇到的服務(wù)器無法連接的時候,一種解決辦法是將嘗試的連接次數(shù)加到key后面,然后重新進(jìn)行hash,這種做法也叫rehash。
    2.第二個問題也是這種方法的致命的缺點,盡管余數(shù)計算分散發(fā)相當(dāng)簡單,數(shù)據(jù)分散也很優(yōu)秀,當(dāng)添加或者移除服務(wù)器的時候,緩存重組的代價相當(dāng)大。

Consistent Hashing算法

Consistent Hashing算法描述如下:首先求出memcached服務(wù)器節(jié)點的哈希值,并將其分配到0~2^32的圓上,這個圓我們可以把它叫做值域,然后用同樣的方法求出存儲數(shù)據(jù)鍵的哈希值,并映射到圓上。然后從數(shù)據(jù)映射到的位置開始順時針查找,將數(shù)據(jù)保存到找到的第一個服務(wù)器上,如果超過0~2^32仍找不到,就會保存在第一臺memcached服務(wù)器上:

http://img.jbzj.com/file_images/article/201606/2016623103650330.jpg

memcachd基本原理

再拋出上面的問題,如果新添加或移除一臺機(jī)器,在consistent Hashing算法下會有什么影響。上圖中假設(shè)有四個節(jié)點,我們再添加一個節(jié)點叫node5:

http://img.jbzj.com/file_images/article/201606/2016623103702426.jpg

添加了node節(jié)點之后

node5被放在了node4與node2之間,本來映射到node2和node4之間的區(qū)域都會找到node4,當(dāng)有node5的時候,node5和node4之間的還是找到node4,而node5和node2之間的此時會找到node5,因此當(dāng)添加一臺服務(wù)器的時候受影響的僅僅是node5和node2區(qū)間。

優(yōu)化的Consistent Hashing算法

上面可以看出使用consistent Hashing最大限度的抑制了鍵的重新分配,且有的consistent Hashing的實現(xiàn)方式還采用了虛擬節(jié)點的思想。問題起源于使用一般hash函數(shù)的話,服務(wù)器的映射地點的分布非常不均勻,從而導(dǎo)致數(shù)據(jù)庫訪問傾斜,大量的key被映射到同一臺服務(wù)器上。為了避免這個問題,引入了虛擬節(jié)點的機(jī)制,為每臺服務(wù)器計算出多個hash值,每個值對應(yīng)環(huán)上的一個節(jié)點位置,這種節(jié)點叫虛擬節(jié)點。而key的映射方式不變,就是多了層從虛擬節(jié)點再映射到物理機(jī)的過程。這種優(yōu)化下盡管物理機(jī)很少的情況下,只要虛擬節(jié)點足夠多,也能夠使用得key分布的相對均勻。

總結(jié)

本文介在理解緩存基本概念的情況下介紹了memcached的分布式算法實現(xiàn)原理,memcached的分布式是由客戶端函數(shù)庫實現(xiàn)的。

以上就是本文的全部內(nèi)容,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux下Redis允許遠(yuǎn)程連接的實現(xiàn)方法

    Linux下Redis允許遠(yuǎn)程連接的實現(xiàn)方法

    今天小編就為大家分享一篇Linux下Redis允許遠(yuǎn)程連接的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Linux基礎(chǔ)學(xué)習(xí)之利用tcpdump抓包實例代碼

    Linux基礎(chǔ)學(xué)習(xí)之利用tcpdump抓包實例代碼

    tcpdump是Linux下面的一個開源的抓包工具,和Windows下面的wireshark抓包工具一樣, 支持抓取指定網(wǎng)口、指定目的地址、指定源地址、指定端口、指定協(xié)議的數(shù)據(jù)。下面這篇文章主要給大家介紹了關(guān)于Linux基礎(chǔ)學(xué)習(xí)之利用tcpdump抓包的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • 詳解Centos8 配置靜態(tài)IP的實現(xiàn)

    詳解Centos8 配置靜態(tài)IP的實現(xiàn)

    這篇文章主要介紹了詳解Centos8 配置靜態(tài)IP的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 樹莓派搭建nas服務(wù)器的詳細(xì)過程

    樹莓派搭建nas服務(wù)器的詳細(xì)過程

    這篇文章主要介紹了樹莓派搭建nas服務(wù)器的教程,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • Centos8環(huán)境下修改ssh端口號方法

    Centos8環(huán)境下修改ssh端口號方法

    大家好,本篇文章主要講的是Centos8環(huán)境下修改ssh端口號方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下哦,方便下次瀏覽
    2021-12-12
  • Linux啟動/停止/重啟Mysql數(shù)據(jù)庫的簡單方法(推薦)

    Linux啟動/停止/重啟Mysql數(shù)據(jù)庫的簡單方法(推薦)

    下面小編就為大家?guī)硪黄狶inux啟動/停止/重啟Mysql數(shù)據(jù)庫的簡單方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 淺析Centos7搭建samba服務(wù)器方法

    淺析Centos7搭建samba服務(wù)器方法

    本篇文章是作者實際Centos7搭建samba服務(wù)器的心得總結(jié),如果你正需要這方面的內(nèi)容,參考下吧。
    2018-02-02
  • CentOS使用expect批量遠(yuǎn)程執(zhí)行腳本和命令

    CentOS使用expect批量遠(yuǎn)程執(zhí)行腳本和命令

    這篇文章主要介紹了CentOS使用expect批量遠(yuǎn)程執(zhí)行腳本和命令,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Linux下Nodejs安裝步驟(完整詳細(xì))

    Linux下Nodejs安裝步驟(完整詳細(xì))

    這篇文章主要介紹了Linux下Nodejs安裝步驟(完整詳細(xì)),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • linux云主機(jī)安裝pdo詳細(xì)教程

    linux云主機(jī)安裝pdo詳細(xì)教程

    這篇文章主要介紹了linux云主機(jī)安裝pdo詳細(xì)教程,網(wǎng)上搜到一個幾個還算清晰的教程,但是沒加說明,很多站長按照做了,中途出現(xiàn)錯誤,便不知如何解決了,這里特整理一下方便需要的朋友
    2017-08-08

最新評論