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