gemfire mysql_分布式缓存GemFire架构介绍

1什么是GemFire GemFire是一个位于应用集群和后端数据源之间的高性能、分布式的操作数据(operational data)管理基础架构。它提供了低延迟、高吞吐量的数据共享和事件分发。GemFire充分利用网络中的内存和磁盘资源,形成一个实时的数据网格(data fabric or gr

1什么是GemFire

GemFire是一个位于应用集群和后端数据源之间的高性能、分布式的操作数据(operational data)管理基础架构。它提供了低延迟、高吞吐量的数据共享和事件分发。GemFire充分利用网络中的内存和磁盘资源,形成一个实时的数据网格(data fabric or grid)。

dddbe7c6bc2ad0a0a5073d2f8d21373f.png

喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD48cD5HZW1GaXJltcTW99KqzNjQ1NPQo7o8L3A+PHA+PyAgtuDW1s34wufN2MbLPC9wPjxwPj8gILjfsqK3orXExNq05sr9vt294bm5o6yx3MPiy/jV+bbhPC9wPjxwPj8gIL/J0aG1xEFDSUQ8L3A+PHA+PyAg0PLB0LuvKG5hdGl2ZSBzZXJpYWxpemF0aW9uKbrN1sfE3Lu6s+Uoc21hcnQgYnVmZmVyaW5nKbGj1qTP+8+iv+zL2bfWt6I8L3A+PHA+PyAgzayyvbvy0uyyvdC0tMXFzDwvcD48cD4/ICDI39PgxNq05r+9sbQ8L3A+PGgyPjLN+MLnzdjGy7rNu7q05rzcubk8L2gyPjxwPr+8wse1vc7KzOK24NH50NS6zbzcubnB6bvu0NSjrEdlbUZpcmXM4bmpwcu24NbW0aHP7sC0xeTWw9TaxMQod2hlcmUp0tS8sNT10fkoaG93KbncwO27urTmyv2+3aOs1eK+zcq5vNy5ucqmxNy5u7TTUDJQKHBlZXItdG8tcGVlcimhokNTKGNsaWVudC1zZXJ2ZXIpoaJXQU7I/dbW1+m8/rm5vaiz9rrPysq1xLu6tOa83Lm5oaM8L3A+PGgzPjIuMSBQMlDN2MbLPC9oMz48cD7U2lAyULfWsrzKvc+1zbPW0KOs06bTw7PM0PLKudPDR2VtRmlyZbXEvrXP8ShtaXJyb3JpbmcpuabE3MC0vau088G/yv2+3b/nveG147fWx/goc2hhcmRpbmcp0tS8sNTa1eLQqb3hteO85L340NDK/b7duLTWxs2ssr2ho8/Cw+bW99KqvbLSu8/CR2VtRmlyZbXEUDJQzdjGy9bQtcTBvbj21vfSqr3HyaujujxzdHJvbmc+bWlycm9yZWS+tc/xveG147rNcGFydGl0aW9uZWS31sf4veG14zwvc3Ryb25nPii+38zlvPszLjLW0G1pcnJvci10eXBltcTF5NbDt73KvSmhozwvcD48cD7S8s6q1NpQMlDN2MbL1tC7urTmyv2+3dPr06bTw9Ta0rvG8KOsy/nS1MrXz8jLtdK7z8LHtsjryr27urTmoaPL+c69x7bI68q9u7q05ihlbWJlZGRlZCBjYWNoZSnG5Mq1vs3Kx8u1u7q05rrN06bTw7PM0PLU2tK7xvCjrNaxvdPA+9PD06bTw7f+zvHG97XExNq05r/VvOSho9Kyvs3Kx87Sw8ezo8u1tcTA4MvGRWhjYWNoZbXExMfW1rG+tdi7urTmKGxvY2FsIGNhY2hlKaGjPC9wPjxwIGFsaWduPQ=="center">

3f66811b292e4c2215fc1c8640ea2a5d.png

mirrored结点就像一块磁铁一样,将其他数据区域的数据都吸附过来,形成一块完整的数据集合。当一块数据区域被配置为mirrored的结点第一次新建或重建时,GemFire将自动执行初始镜像抓取(initial image fetch)操作,从其他结点的数据子集中还原出完整的状态。如果此时网络中存在另一个mirrored结点,那么将会执行最优直接抓取(optimal directed fetch)。

23f55a4d33128b211d00db8563155fe0.png

所以我们很容易看出,mirrored结点主要出于两种目的:

? 对于大量读的应用,应用程序通过保存全量数据,使客户端请求可以即时访问到想要数据,而无需经过网络传输

? 当发生故障时,mirrored结点可以用来恢复其他结点

不同于mirrored结点,每个partitioned结点都持有唯一的一块数据。应用程序就像操作本地数据一样,GemFire在幕后管理各个分区的数据,并且保证在至多一跳内(at most one network hop)完成数据访问。根据GemFire的哈希算法,分区数据会被自动放入到各个结点的bucket中。同时GemFire也会自动分配出冗余数据的位置并进行复制。当某个结点出错时,客户端请求会自动被重定向到备份结点。并且GemFire会重新复制出一份数据,从而保证数据的冗余拷贝数。最后,我们可以随时向网络中加入新的结点来对GemFire集群进行动态扩容。

9052865f669a6ce195e84a753d8dbaa9.png

P2P系统提供了低延迟、单跳(one-hop)数据访问、动态发现以及透明化的数据存储位置。但是,网络中的每个结点都要维持一个socket连接到其他每个结点。当结点增多时,连接数将成指数级增长。为了提高扩展性,GemFire提供了一种可靠的UDP多播的通信方式。在下一节中我们将看到,P2P数据同步在服务器间复制数据时的作用。

2.2 Client-Server拓扑

Client-Server缓存允许大量结点相连形成客户端-服务器结构。服务器即为客户端提供缓存,也可以为其他服务器提供数据复制或缓存。

6e0bcaf2c12636b4320c6c3e5b18447a.png

2.3 WAN拓扑

P2P集群由于点和点之间的紧耦合而产生了扩展性问题,这种问题在数据中心有多个集群或数据中心跨城市时被放大。GemFire提供另一种模型来解决。

edd53a5733049d4e91702623e4e30d2e.png

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:分发前在其他成员上获得锁,再分发数据。适用于悲观的应用场景,通过全局锁服务来管理锁的获得、释放和超时。

5a0a7635374bd559109307246f05eb83.png

现在来看一下第二个重要的配置属性镜像类型(mirror-type):

? none:仅当缓存中有此数据时才更新,任何其他成员发来的新数据都会被忽略掉。适用于某一数据区域仅用来保存另一区域数据的子集。

? keys:数据区域仅保存key来节约内存,当真正有请求时再从其他区域抓取数据并保存到本地,之后接受对此数据项的更新。适用于无法预测哪些数据会被某一结点访问的情况。

? keys-values:真正的镜像,将保存全量数据。适用于需要立即访问所有数据的结点,以及数据冗余备份。

这两个属性的配置对数据区域中保存的是什么数据有很大影响:

09b3cc63945dcd8f9e2ce8b30df4877a.png

4持久化和溢出

持久化(persistence)将整个数据集拷贝到磁盘,当成员出错时可以用来还原数据。而溢出(overflow)保存key在内存中而value保存到磁盘,达到节省内存的目的。两者既可以单独使用,也可以混合使用。

4.1持久化

GemFire支持两种写磁盘选项:操作内存数据时同步写,或者固定间隔异步写。后一种只当应用在出错时能够容忍不完整的数据还原时使用。

29b601805ad3506dd428e98c94957688.png

4.2溢出

当内存不足时,GemFire使用LRU策略来决定是否对某个数据项溢出。

86e4717cbbb65da5ad967f5b73586e25.png

4.3混合使用

持久化与溢出可以混合使用。所有key-value都备份到磁盘,并且当内存不足时,只保留最近使用过的数据。由于LRU而被移除到磁盘的value不会对磁盘有影响,因为所有数据已被持久化到磁盘上了。

44cdf63bca3f6582b0d196d35254891a.png

5事务

GemFire支持缓存事务与JTA事务两种。

5.1缓存事务

每个事务都有其私有的工作区域。事务开始时,数据将被拷贝到私有区域,直到事务提交。若提交时没有冲突,则数据从私有区域拷贝回原区域。这样事务就可以并发地修改缓存了。

ec14be098ae7bf165bd35d59c4e7202c.png

对于范围(scope)配置为local的缓存数据区域,事务提交后就算是完成了。但对于分布式(scope=distributed-no-ack or distributed-ack),则在事务提交时要进行缓存同步。

6查询

(待补充:OOL)

7数据可用性和Failover

(待补充)

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值