3.分布式緩存架構(gòu)
深圳網(wǎng)站建設(shè)分布式緩存指緩存部署在多個(gè)服務(wù)器組成的集群中,以集群方式提供緩存服務(wù),其架構(gòu)方式有兩種,一種是以JBoss Cache為代表的需要更新同步的分布式緩存,一種是以Memcached為代表的不i相通信的分布式緩存。
JBoss Cache的分布式緩存在集群中所有服務(wù)器中保存相同的緩存數(shù)據(jù),當(dāng)某臺(tái)服務(wù)器有緩存數(shù)據(jù)更新的時(shí)候,會(huì)通知集群中其他機(jī)器更新緩存數(shù)據(jù)或清除緩存數(shù)據(jù),如圖4.9所示。JBoss Cache通常將應(yīng)用程序和緩存部署在同一臺(tái)服務(wù)器上,應(yīng)用程序可從本地快速獲取緩存數(shù)據(jù),但是這種方式帶來(lái)的問(wèn)題是緩存數(shù)據(jù)的數(shù)量受限于單一服務(wù)器的內(nèi)存空間,而且當(dāng)集群規(guī)模較大的時(shí)候,緩存更新信息需要同步到集群所有機(jī)器,其代價(jià)驚人。因而這種方案更多見(jiàn)于企業(yè)應(yīng)用系統(tǒng)中,而很少在大型網(wǎng)站使用。
大型網(wǎng)站需要緩存的數(shù)據(jù)量一般都很龐大,可能會(huì)需要數(shù)TB的內(nèi)存做緩存,這時(shí)候就需要另一種分布式緩存,如圖4.10所示。Memcached采用一種集中式的緩存集群管理,也被稱作互不通信的分布式架構(gòu)方式。緩存與應(yīng)用分離部署,緩存系統(tǒng)部署在一組專門的服務(wù)器上,應(yīng)用程序通過(guò)一致性Hash等路由算法選擇緩存服務(wù)器遠(yuǎn)程訪問(wèn)緩存數(shù)據(jù),緩存服務(wù)器之間不通信,緩存集群的規(guī)??梢院苋菀椎貙?shí)現(xiàn)擴(kuò)容,具有良好的可伸縮性。
Memcached的伸縮性設(shè)計(jì)參考本書(shū)第6章內(nèi)容。
4. Memcached
Memcached曾一度是網(wǎng)站分布式緩存的代名詞,被大量網(wǎng)站使用。其簡(jiǎn)單的設(shè)計(jì)、優(yōu)異的性能、互不通信的服務(wù)器集群、海量數(shù)據(jù)可伸縮的架構(gòu)令網(wǎng)站架構(gòu)師們趨之若鶩。
簡(jiǎn)單的通信協(xié)議
遠(yuǎn)程通信設(shè)計(jì)需要考慮兩方面的要素,一是通信協(xié)議,即選擇TCP協(xié)議還是UDP協(xié)議,抑或HTTP協(xié)議;一是通信序列化協(xié)議,數(shù)據(jù)傳輸?shù)膬啥?,必須使用彼此可識(shí)別的數(shù)據(jù)序列化方式才能使通信得以完成,如XML、JSON等文本序列化協(xié)議,或者GoogleProtobuffer等二進(jìn)制序列化協(xié)議。Memcached使用TCP協(xié)議(UDP也支持)通信,其序列化協(xié)議則是一套基于文本的自定義協(xié)議,非常簡(jiǎn)單,以一個(gè)命令關(guān)鍵字開(kāi)頭,后面是
一組命令操作數(shù)。例如讀取一個(gè)數(shù)據(jù)的命令協(xié)議是get 。Memcached以后,許多NoSQL產(chǎn)品都借鑒了或直接支持這套協(xié)議。
豐富的客戶端程序
Memcached通信協(xié)議非常簡(jiǎn)單,只要支持該協(xié)議的客戶端都可以和Memcached服務(wù)器通信,因此Memcached發(fā)展出非常豐富的客戶端程序,幾乎支持所有主流的網(wǎng)站編程語(yǔ)言,Java、C/C++/C#、Perl、Python、PHP、Ruby等,因此在混合使用多種編程語(yǔ)言的網(wǎng)站,Memcached更是如魚(yú)得水。
高性能的網(wǎng)絡(luò)通信
Memcached服務(wù)端通信模塊基于Libevem,一個(gè)支持事件觸發(fā)的網(wǎng)絡(luò)通信程序庫(kù)。
互不通信的服務(wù)器集群架構(gòu)
如上所述,正是這個(gè)特性使得Memcached從JBoss Cache、OSCache等眾多分布式緩存產(chǎn)品中脫穎而出,滿足網(wǎng)站對(duì)海量緩存數(shù)據(jù)的需求。而其客戶端路由算法一致性Hash更成為數(shù)據(jù)存儲(chǔ)伸縮性架構(gòu)設(shè)計(jì)的經(jīng)典范式(參考本書(shū)第6章)。事實(shí)上,正是集群內(nèi)服務(wù)器互不通信使得集群可以做到幾乎無(wú)限制的線性伸縮,這也正是目前流行的許多大數(shù)據(jù)技術(shù)的基本架構(gòu)特點(diǎn)。
雖然近些年許多NoSQL產(chǎn)品層出不窮,在數(shù)據(jù)持久化、支持復(fù)雜數(shù)據(jù)結(jié)構(gòu)、甚至性能方面有許多產(chǎn)品優(yōu)于Memcached,但Memcached由于其簡(jiǎn)單、穩(wěn)定、專注的特點(diǎn),仍然在分布式緩存領(lǐng)域占據(jù)著重要地位。