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)以及在这些结点间进行数据复制同步。下面主要讲一下GemFireP2P拓扑中的两个主要角色:mirrored镜像结点和partitioned分区结点(具体见3.2mirror-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多播的socketsocketTCP连接。

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

(待补充)

转载于:https://www.cnblogs.com/xiaomaohai/p/6157681.html

分布式缓存GemFire架构介绍相关推荐

  1. mysql 与gemfire的同步_(转)分布式缓存GemFire架构介绍

    1什么是GemFire GemFire是一个位于应用集群和后端数据源之间的高性能.分布式的操作数据(operational data)管理基础架构.它提供了低延迟.高吞吐量的数据共享和事件分发.Gem ...

  2. 适用场景全新升级!扩展 Dragonfly2 作为分布式缓存系统架构

    Dragonfly2 简介 Dragonfly 作为龙蜥社区的镜像加速标准解决方案,是一款基于 P2P 的智能镜像和文件分发工具.它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽.在应用分 ...

  3. 分布式大气监测系统架构介绍及案例解析

    1 项目背景简介 小能手曾经分享过一篇文章自制一个 LoRa PM2.5 监测器,用于监测自家小区的空气质量.个体的力量是微小的,如果集合更多人的力量,用丰富的大气监测节点来观测区域性的大气质量,相信 ...

  4. 技术领导力: 深度访谈《深入分布式缓存》

    于君泽,蚂蚁金服支付核算技术部负责人.互联网金融业务近8年,电信业务8年经验.兴趣在高可用分布式架构应用,研发管理,内建质量等.维护公众号:技术琐话.<深入分布式缓存>一书联合作者,总策划 ...

  5. 用REDIS实现分布式缓存

    2019独角兽企业重金招聘Python工程师标准>>> 第一:Redis 是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库 高性能存储系统,并提供多种语言的 ...

  6. redis分布式缓存php,基于redis分布式缓存实现

    第一:Redis 是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景数据结构(Data Structure)需求越来越 ...

  7. Hadoop - YARN NodeManager 剖析、NodeManger内部架构、分布式缓存、目录结构、状态机管理、Container 生命周期剖、资源隔离

    一 概述 NodeManager是运行在单个节点上的代理 ,它管理Hadoop集群中单个计算节点,功能包括与ResourceManager保持通信,管理Container的生命周期.监控每个Conta ...

  8. [读书笔记]大型分布式网站架构设计与实践.分布式缓存

    前言:本书是对分布式系统架构涉及到的相关技术的一本科普书籍.由于很难作为开发参考,只能但求了解.所以通篇浅读,对分布式系统进行大致的了解.因为写的非常好,感觉非常有意思,自己也做不出总结.所谓的读书笔 ...

  9. 剑指offer之java缓存总结,从单机缓存到分布式缓存架构

    1.缓存定义 高速数据存储层,提高程序性能 2.为什么要用缓存(读多写少,高并发) 1.提高读取吞吐量 2.提升应用程序性能 3.降低数据库成本 4.减少后端负载 5.消除数据库热点 6.可预测的性能 ...

最新文章

  1. Flask发送邮件,最基础
  2. java画板抽象类_java 中的 抽象方法 抽象类 和 接口有啥瓜葛
  3. python 连接数据库-设置oracle ,mysql 中文字符问题
  4. 工作内外网同时连接方案
  5. 一步步编写操作系统 57 门、调用门与RPL序 2
  6. Windows学习总结(16)——Windows注册表入门详解
  7. 阿里正在研发无人卡车;《王者荣耀》皮肤个性动作涉嫌抄袭致歉;​苹果泄露女生私密照赔偿数百万美元|极客头条...
  8. 解决sql2005远程连接报错,提示请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接
  9. 里诺仓库管理软件(单机版)3.70 注册机 Code.By.HackWm.
  10. 勒让德多项式学习笔记
  11. eclipse添加约束文件
  12. 【2021-07-23】JS逆向之雷速体育canvas渲染数据解密
  13. h5支付——前端需要处理什么?
  14. 取消参考文献自动编号_word文档参考文献如何自动编号
  15. 河大计算机学院足球队,我校第二十九届“河大杯”足球赛落幕
  16. 截止2016年5月之前双色球数据统计
  17. Springboot 启动命令中–spring.config.location不生效问题
  18. 电脑是自动获取ip,VMware安装linux时候,设置固定ip并且能访问外网
  19. Lpad函数和Rpad函数
  20. 新版标准日本语高级_第17课

热门文章

  1. Observer Node [SBN-READ] 原理及实现分析
  2. 微信公众号发消息给关注用户
  3. 赚钱发财必备七大能力
  4. US-100超声波 使用
  5. 高级语言虚拟机(HLL VM)的设计与实现
  6. 使用 pjax 实现网站无刷新加载
  7. 飚王硬盘盒怎么样_飚王硬盘盒怎么样
  8. IOS 字符串转日期
  9. 问题解决:百度网盘优化下载速率
  10. 爬取虎牙直播中王者荣耀板块主播实时人气数据