溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何分析GemFire架構(gòu)

發(fā)布時間:2022-01-14 15:36:00 來源:億速云 閱讀:126 作者:柒染 欄目:云計算

今天給大家介紹一下如何分析GemFire架構(gòu)。文章的內(nèi)容小編覺得不錯,現(xiàn)在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。

1 什么是 GemFire

GemFire 是一個位于應(yīng)用集群和后端數(shù)據(jù)源之間的高性能、分布式的操作數(shù)據(jù)(operational data) 管理基礎(chǔ)架構(gòu)。它提供了低延遲、高吞吐量的數(shù)據(jù)共享和事件分發(fā)。 GemFire 充分利用網(wǎng)絡(luò)中的內(nèi)存和磁盤資源,形成一個實時的數(shù)據(jù)網(wǎng)格 (data fabric or grid) 。

如何分析GemFire架構(gòu)

GemFire 的主要特性有:

?    多種網(wǎng)絡(luò)拓撲

?    高并發(fā)的內(nèi)存數(shù)據(jù)結(jié)構(gòu),避免鎖爭奪

?    可選的 ACID

?    序列化 (native serialization) 和智能緩沖 (smart buffering) 保證消息快速分發(fā)

?    同步或異步寫磁盤

?    冗余內(nèi)存拷貝

2 網(wǎng)絡(luò)拓撲和緩存架構(gòu)

考慮到問題多樣性和架構(gòu)靈活性, GemFire 提供了多種選項來配置在哪 (where) 以及怎樣 (how) 管理緩存數(shù)據(jù),這就使架構(gòu)師能夠從 P2P(peer-to-peer) 、 CS(client-server) 、 WAN 三種組件構(gòu)建出合適的緩存架構(gòu)。

2.1 P2P 拓撲

在 P2P 分布式系統(tǒng)中,應(yīng)用程序使用 GemFire 的鏡像 (mirroring) 功能來將大量數(shù)據(jù)跨結(jié)點分區(qū) (sharding) 以及在這些結(jié)點間進行數(shù)據(jù)復(fù)制同步。下面主要講一下GemFire 的 P2P 拓撲中的兩個主要角色: mirrored 鏡像結(jié)點和 partitioned 分區(qū)結(jié)點 (具體見 3.2 中 mirror-type 的配置方式 ) 。

因為在 P2P 拓撲中緩存數(shù)據(jù)與應(yīng)用在一起,所以首先說一下嵌入式緩存。所謂嵌入式緩存 (embedded cache) 其實就是說緩存和應(yīng)用程序在一起,直接利用應(yīng)用服務(wù)器的內(nèi)存空間。也就是我們常說的類似 Ehcache 的那種本地緩存 (local cache) 。

如何分析GemFire架構(gòu)

mirrored 結(jié)點 就像一塊磁鐵一樣,將其他數(shù)據(jù)區(qū)域的數(shù)據(jù)都吸附過來,形成一塊完整的數(shù)據(jù)集合。當(dāng)一塊數(shù)據(jù)區(qū)域被配置為 mirrored 的結(jié)點第一次新建或重建時,GemFire 將自動執(zhí)行 初始鏡像抓取 (initial image fetch) 操作,從其他結(jié)點的數(shù)據(jù)子集中還原出完整的狀態(tài)。如果此時網(wǎng)絡(luò)中存在另一個 mirrored 結(jié)點,那么將會執(zhí)行 最優(yōu)直接抓取 (optimal directed fetch) 。

如何分析GemFire架構(gòu)

所以我們很容易看出, mirrored 結(jié)點主要出于兩種目的:

?    對于大量讀的應(yīng)用,應(yīng)用程序通過保存全量數(shù)據(jù),使客戶端請求可以即時訪問到想要數(shù)據(jù),而無需經(jīng)過網(wǎng)絡(luò)傳輸

?    當(dāng)發(fā)生故障時, mirrored 結(jié)點可以用來恢復(fù)其他結(jié)點

不同于 mirrored 結(jié)點,每個 partitioned 結(jié)點 都持有唯一的一塊數(shù)據(jù)。應(yīng)用程序就像操作本地數(shù)據(jù)一樣, GemFire 在幕后管理各個分區(qū)的數(shù)據(jù),并且保證在至多一跳內(nèi)(at most one network hop) 完成數(shù)據(jù)訪問。根據(jù) GemFire 的哈希算法,分區(qū)數(shù)據(jù)會被自動放入到各個結(jié)點的 bucket 中。同時 GemFire 也會自動分配出冗余數(shù)據(jù)的位置并進行復(fù)制。當(dāng)某個結(jié)點出錯時,客戶端請求會自動被重定向到備份結(jié)點。并且GemFire 會重新復(fù)制出一份數(shù)據(jù),從而保證數(shù)據(jù)的冗余拷貝數(shù)。最后,我們可以隨時向網(wǎng)絡(luò)中加入新的結(jié)點來對 GemFire 集群進行動態(tài)擴容。

如何分析GemFire架構(gòu)

P2P 系統(tǒng)提供了低延遲、單跳 (one-hop) 數(shù)據(jù)訪問、動態(tài)發(fā)現(xiàn)以及透明化的數(shù)據(jù)存儲位置。但是,網(wǎng)絡(luò)中的每個結(jié)點都要維持一個 socket 連接到其他每個結(jié)點。當(dāng)結(jié)點增多時,連接數(shù)將成指數(shù)級增長。為了提高擴展性, GemFire 提供了一種可靠的 UDP多播的通信方式。在下一節(jié)中我們將看到, P2P 數(shù)據(jù)同步在服務(wù)器間復(fù)制數(shù)據(jù)時的作用。

2.2 Client-Server 拓撲

Client-Server 緩存允許大量結(jié)點相連形成客戶端 - 服務(wù)器結(jié)構(gòu)。服務(wù)器即為客戶端提供緩存,也可以為其他服務(wù)器提供數(shù)據(jù)復(fù)制或緩存。

如何分析GemFire架構(gòu)

2.3 WAN 拓撲

P2P 集群由于點和點之間的緊耦合而產(chǎn)生了擴展性問題,這種問題在數(shù)據(jù)中心有多個集群或數(shù)據(jù)中心跨城市時被放大。 GemFire 提供另一種模型來解決。

如何分析GemFire架構(gòu)

3 GemFire 工作原理

3.1 發(fā)現(xiàn)機制

默認 GemFire 使用 IP 多播來發(fā)現(xiàn)新成員,然而所有成員間的通信都采用 TCP 。對于部署環(huán)境禁止使用 IP 多播或者網(wǎng)絡(luò)跨越多個子網(wǎng)時, GemFire 提供備用方法:使用輕量級的定位服務(wù)器 (locator server) 來追蹤所有成員的連接。新成員加入集群時,將詢問定位服務(wù)并建立類似于 IP 多播的 socket 到 socket 的 TCP 連接。

3.2 數(shù)據(jù)分發(fā)

每個成員都會創(chuàng)建一個或多個緩存數(shù)據(jù)區(qū)域 (data region) ,通過區(qū)域的劃分,我們能給每個區(qū)域配置不同的分發(fā)屬性、內(nèi)存管理以及數(shù)據(jù)一致性模型。默認 GemFire 使用 P2P 分發(fā)模型,每個成員都能和其他任何成員通信。同時根據(jù)不同的內(nèi)網(wǎng)特點,傳輸層可選 TCP/IP 或可靠多播 (UDP) 。在這些配置中,有兩個屬性很重要, 范圍(scope) 和鏡像類型 (mirror-type) 。

首先,范圍 (scope) 有四種選項:

?    Local :不分發(fā)。那為什么不直接保存到 HashMap 中。因為 GemFire 額外提供了數(shù)據(jù)自動持久化到磁盤、 OQL(Object Query Language) 查詢數(shù)據(jù)、數(shù)據(jù)操作的事務(wù)等特性。

?    Distribute-no-ack :發(fā)送數(shù)據(jù)給成員 1 ,在發(fā)送數(shù)據(jù)給成員 2 時不等待成員 1的響應(yīng)。適用于對數(shù)據(jù)一致性要求不高,并要求低網(wǎng)絡(luò)延遲的情況。這是 GemFire 的默認配置,能夠提供低延遲、高吞吐,并通過盡快分發(fā)來降低數(shù)據(jù)沖突的概率。

?    Distribute-ack :在發(fā)送給成員 2 前,發(fā)送數(shù)據(jù)并等待成員 1 的響應(yīng)。這樣每條數(shù)據(jù)都是同步分發(fā)的。

?    Global :分發(fā)前在其他成員上獲得鎖,再分發(fā)數(shù)據(jù)。適用于悲觀的應(yīng)用場景,通過全局鎖服務(wù)來管理鎖的獲得、釋放和超時。

如何分析GemFire架構(gòu)

現(xiàn)在來看一下第二個重要的配置屬性鏡像類型 (mirror-type) :

?    none :僅當(dāng)緩存中有此數(shù)據(jù)時才更新,任何其他成員發(fā)來的新數(shù)據(jù)都會被忽略掉。適用于某一數(shù)據(jù)區(qū)域僅用來保存另一區(qū)域數(shù)據(jù)的子集。

?    keys :數(shù)據(jù)區(qū)域僅保存 key 來節(jié)約內(nèi)存,當(dāng)真正有請求時再從其他區(qū)域抓取數(shù)據(jù)并保存到本地,之后接受對此數(shù)據(jù)項的更新。適用于無法預(yù)測哪些數(shù)據(jù)會被某一結(jié)點訪問的情況。

?    keys-values :真正的鏡像,將保存全量數(shù)據(jù)。適用于需要立即訪問所有數(shù)據(jù)的結(jié)點,以及數(shù)據(jù)冗余備份。

這兩個屬性的配置對數(shù)據(jù)區(qū)域中保存的是什么數(shù)據(jù)有很大影響:

如何分析GemFire架構(gòu)

4 持久化和溢出

持久化 (persistence) 將整個數(shù)據(jù)集拷貝到磁盤,當(dāng)成員出錯時可以用來還原數(shù)據(jù)。而溢出 (overflow) 保存 key 在內(nèi)存中而 value 保存到磁盤,達到節(jié)省內(nèi)存的目的。兩者既可以單獨使用,也可以混合使用。

4.1 持久化

GemFire 支持兩種寫磁盤選項:操作內(nèi)存數(shù)據(jù)時同步寫,或者固定間隔異步寫。后一種只當(dāng)應(yīng)用在出錯時能夠容忍不完整的數(shù)據(jù)還原時使用。

如何分析GemFire架構(gòu)

4.2 溢出

當(dāng)內(nèi)存不足時, GemFire 使用 LRU 策略來決定是否對某個數(shù)據(jù)項溢出。

如何分析GemFire架構(gòu)

4.3 混合使用

持久化與溢出可以混合使用。所有 key-value 都備份到磁盤,并且當(dāng)內(nèi)存不足時,只保留最近使用過的數(shù)據(jù)。由于 LRU 而被移除到磁盤的 value 不會對磁盤有影響,因為所有數(shù)據(jù)已被持久化到磁盤上了。

如何分析GemFire架構(gòu)

5 事務(wù)

GemFire 支持緩存事務(wù)與 JTA 事務(wù)兩種。

5.1 緩存事務(wù)

每個事務(wù)都有其私有的工作區(qū)域。事務(wù)開始時,數(shù)據(jù)將被拷貝到私有區(qū)域,直到事務(wù)提交。若提交時沒有沖突,則數(shù)據(jù)從私有區(qū)域拷貝回原區(qū)域。這樣事務(wù)就可以并發(fā)地修改緩存了。

如何分析GemFire架構(gòu)

對于范圍 (scope) 配置為 local 的緩存數(shù)據(jù)區(qū)域,事務(wù)提交后就算是完成了。但對于分布式 (scope=distributed-no-ack or distributed-ack) ,則在事務(wù)提交時要進行緩存同步。

以上就是如何分析GemFire架構(gòu)的全部內(nèi)容了,更多與如何分析GemFire架構(gòu)相關(guān)的內(nèi)容可以搜索億速云之前的文章或者瀏覽下面的文章進行學(xué)習(xí)哈!相信小編會給大家增添更多知識,希望大家能夠支持一下億速云!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI