分散式快取GemFire架構介紹
1什麼是GemFire
GemFire是一個位於應用叢集和後端資料來源之間的高效能、分散式的運算元據(operational data)管理基礎架構。它提供了低延遲、高吞吐量的資料共享和事件分發。GemFire充分利用網路中的記憶體和磁碟資源,形成一個實時的資料網格(data fabric or grid)。
GemFire的主要特性有:
Ø 多種網路拓撲
Ø 高併發的記憶體資料結構,避免鎖爭奪
Ø 可選的ACID
Ø 序列化(native serialization)和智慧緩衝(smart buffering)保證訊息快速分發
Ø 同步或非同步寫磁碟
Ø 冗餘記憶體拷貝
2網路拓撲和快取架構
考慮到問題多樣性和架構靈活性,GemFire提供了多種選項來配置在哪(where)以及怎樣(how)管理快取資料,這就使架構師能夠從P2P(peer-to-peer)、CS(client-server)、WAN三種元件構建出合適的快取架構。
2.1 P2P拓撲
在P2P分散式系統中,應用程式使用GemFire的映象(mirroring)功能來將大量資料跨結點分割槽(sharding)以及在這些結點間進行資料複製同步。下面主要講一下GemFire的P2P拓撲中的兩個主要角色:mirrored映象結點和partitioned分割槽結點(具體見3.2中mirror-type的配置方式)。
因為在P2P拓撲中快取資料與應用在一起,所以首先說一下嵌入式快取。所謂嵌入式快取(embedded cache)其實就是說快取和應用程式在一起,直接利用應用伺服器的記憶體空間。也就是我們常說的類似Ehcache的那種本地快取(local cache)。
mirrored結點就像一塊磁鐵一樣,將其他資料區域的資料都吸附過來,形成一塊完整的資料集合。當一塊資料區域被配置為mirrored的結點第一次新建或重建時,GemFire將自動執行初始映象抓取(initial image fetch)操作,從其他結點的資料子集中還原出完整的狀態。如果此時網路中存在另一個mirrored結點,那麼將會執行最優直接抓取(optimal directed fetch)。
所以我們很容易看出,mirrored結點主要出於兩種目的:
Ø 對於大量讀的應用,應用程式通過儲存全量資料,使客戶端請求可以即時訪問到想要資料,而無需經過網路傳輸
Ø 當發生故障時,mirrored結點可以用來恢復其他結點
不同於mirrored結點,每個partitioned結點都持有唯一的一塊資料。應用程式就像操作本地資料一樣,GemFire在幕後管理各個分割槽的資料,並且保證在至多一跳內(at most one network hop)完成資料訪問。根據GemFire的雜湊演算法,分割槽資料會被自動放入到各個結點的bucket中。同時GemFire也會自動分配出冗餘資料的位置並進行復制。當某個結點出錯時,客戶端請求會自動被重定向到備份結點。並且GemFire會重新複製出一份資料,從而保證資料的冗餘拷貝數。最後,我們可以隨時向網路中加入新的結點來對GemFire叢集進行動態擴容。
P2P系統提供了低延遲、單跳(one-hop)資料訪問、動態發現以及透明化的資料儲存位置。但是,網路中的每個結點都要維持一個socket連線到其他每個結點。當結點增多時,連線數將成指數級增長。為了提高擴充套件性,GemFire提供了一種可靠的UDP多播的通訊方式。在下一節中我們將看到,P2P資料同步在伺服器間複製資料時的作用。
2.2 Client-Server拓撲
Client-Server快取允許大量結點相連形成客戶端-伺服器結構。伺服器即為客戶端提供快取,也可以為其他伺服器提供資料複製或快取。
2.3 WAN拓撲
P2P叢集由於點和點之間的緊耦合而產生了擴充套件性問題,這種問題在資料中心有多個叢集或資料中心跨城市時被放大。GemFire提供另一種模型來解決。
3 GemFire工作原理
3.1發現機制
預設GemFire使用IP多播來發現新成員,然而所有成員間的通訊都採用TCP。對於部署環境禁止使用IP多播或者網路跨越多個子網時,GemFire提供備用方法:使用輕量級的定位伺服器(locator server)來追蹤所有成員的連線。新成員加入叢集時,將詢問定位服務並建立類似於IP多播的socket到socket的TCP連線。
3.2資料分發
每個成員都會建立一個或多個快取資料區域(data region),通過區域的劃分,我們能給每個區域配置不同的分發屬性、記憶體管理以及資料一致性模型。預設GemFire使用P2P分發模型,每個成員都能和其他任何成員通訊。同時根據不同的內網特點,傳輸層可選TCP/IP或可靠多播(UDP)。在這些配置中,有兩個屬性很重要,範圍(scope)和映象型別(mirror-type)。
首先,範圍(scope)有四種選項:
Ø Local:不分發。那為什麼不直接儲存到HashMap中。因為GemFire額外提供了資料自動持久化到磁碟、OQL(Object Query Language)查詢資料、資料操作的事務等特性。
Ø Distribute-no-ack:傳送資料給成員1,在傳送資料給成員2時不等待成員1的響應。適用於對資料一致性要求不高,並要求低網路延遲的情況。這是GemFire的預設配置,能夠提供低延遲、高吞吐,並通過儘快分發來降低資料衝突的概率。
Ø Distribute-ack:在傳送給成員2前,傳送資料並等待成員1的響應。這樣每條資料都是同步分發的。
Ø Global:分發前在其他成員上獲得鎖,再分發資料。適用於悲觀的應用場景,通過全域性鎖服務來管理鎖的獲得、釋放和超時。
現在來看一下第二個重要的配置屬性映象型別(mirror-type):
Ø none:僅當快取中有此資料時才更新,任何其他成員發來的新資料都會被忽略掉。適用於某一資料區域僅用來儲存另一區域資料的子集。
Ø keys:資料區域僅儲存key來節約記憶體,當真正有請求時再從其他區域抓取資料並儲存到本地,之後接受對此資料項的更新。適用於無法預測哪些資料會被某一結點訪問的情況。
Ø keys-values:真正的映象,將儲存全量資料。適用於需要立即訪問所有資料的結點,以及資料冗餘備份。
這兩個屬性的配置對資料區域中儲存的是什麼資料有很大影響:
4持久化和溢位
持久化(persistence)將整個資料集拷貝到磁碟,當成員出錯時可以用來還原資料。而溢位(overflow)儲存key在記憶體中而value儲存到磁碟,達到節省記憶體的目的。兩者既可以單獨使用,也可以混合使用。
4.1持久化
GemFire支援兩種寫磁碟選項:操作記憶體資料時同步寫,或者固定間隔非同步寫。後一種只當應用在出錯時能夠容忍不完整的資料還原時使用。
4.2溢位
當記憶體不足時,GemFire使用LRU策略來決定是否對某個資料項溢位。
4.3混合使用
持久化與溢位可以混合使用。所有key-value都備份到磁碟,並且當記憶體不足時,只保留最近使用過的資料。由於LRU而被移除到磁碟的value不會對磁碟有影響,因為所有資料已被持久化到磁碟上了。
5事務
GemFire支援快取事務與JTA事務兩種。
5.1快取事務
每個事務都有其私有的工作區域。事務開始時,資料將被拷貝到私有區域,直到事務提交。若提交時沒有衝突,則資料從私有區域拷貝回原區域。這樣事務就可以併發地修改快取了。
對於範圍(scope)配置為local的快取資料區域,事務提交後就算是完成了。但對於分散式(scope=distributed-no-ack or distributed-ack),則在事務提交時要進行快取同步。
6查詢
(待補充:OOL)
7資料可用性和Failover
相關文章
- KAFKA介紹(分散式架構)Kafka分散式架構
- 分散式快取架構綜述分散式快取架構
- 小工匠聊架構 - 分散式快取技術_快取設計架構分散式快取
- 崑崙分散式資料庫架構介紹分散式資料庫架構
- DCS分散式快取服務例項型別介紹分散式快取型別
- 分散式快取 - 快取簡介,常用快取演算法分散式快取演算法
- 理解分散式系統中的快取架構(下)分散式快取架構
- 理解分散式系統中的快取架構(上)分散式快取架構
- 大型分散式網站架構:快取在分散式系統中的應用分散式網站架構快取
- [分散式][高併發]熱點快取的架構優化分散式快取架構優化
- 深入理解分散式系統中的快取架構(下)分散式快取架構
- 分散式快取分散式快取
- JAVA 分散式 - 分散式介紹Java分散式
- redis快取介紹Redis快取
- redis→分散式快取Redis分散式快取
- 分散式快取方案分散式快取
- 聊聊分散式快取分散式快取
- (一) MdbCluster分散式記憶體資料庫——基礎架構介紹分散式記憶體資料庫架構
- 聊聊本地快取和分散式快取快取分散式
- springcloud微服務分散式雲架構簡介SpringGCCloud微服務分散式架構
- 【深入淺出 Yarn 架構與實現】6-3 NodeManager 分散式快取Yarn架構分散式快取
- Orchard架構介紹架構
- OpenTelemetry架構介紹架構
- SmartSql Redis 分散式快取SQLRedis分散式快取
- 分散式快取擊穿分散式快取
- 分散式快取NCache使用分散式快取
- 分散式事務介紹分散式
- Redis——快取穿透、快取擊穿、快取雪崩、分散式鎖Redis快取穿透分散式
- springcloud微服務分散式雲架構-SpringCloud簡介SpringGCCloud微服務分散式架構
- 快取融合(Cache Fusion)介紹快取
- 介紹SpringBoot 整合 Redis 快取Spring BootRedis快取
- 分散式WebSocket架構分散式Web架構
- 分散式之快取擊穿分散式快取
- k04_分散式快取分散式快取
- 分散式快取 - 概念解釋分散式快取
- 分散式快取基礎教程分散式快取
- 雲上的分散式快取分散式快取
- Java架構-(一)spring cloud微服務分散式雲架構 - Spring Cloud簡介Java架構SpringCloud微服務分散式
- 分散式系統快取系列一 認識快取分散式快取