优化的缓存层最大限度地减少了线程和进程之间的上下文切换 。它管理高度并发结构中的数据,以最大限度地减少争用点 。如果接收器可以跟上,则与对等成员的通信是同步的,这使得数据分发的延迟保持最小 。服务器以序列化形式管理对象图,以减少垃圾收集器的压力 。
客户端可以将单个数据请求直接发送到持有数据key的服务器 , 从而避免多跳以定位已分区的数据 。客户端中的元数据标识正确的服务器 。
3.2.3 索引Geode的查询支持索引以提高查询效率 。实际上,Geode维护了一个键和索引值之间关系的数据结构(一般是一颗B树),并支持范围查询 。但和所有的关系型数据库一样,索引能带来收益的前提是良好的索引设计,而且必然会带来写效率的降低 。
3.2 CAP【一文读懂Apache Geode缓存中间件】我们知道分布式系统存在CAP不可能三角,即一个分布式系统最多只能同时满足 一致性(Consistency) 、 可用性(Availability) 和 分区容错性(Partition tolerance) 这三项中的两项 。下面从一致性、可用性和分区容错性上分析Apache Geode的性能优劣 。
一致性Apache Geode的定位是一款强一致性的内存数据库 。一致性的破坏有两种渠道: 副本更新的延迟或失败 和 并发更新。
- 对于分区区域,即使该分区配置了冗余的副本,也只允许在主副本上按顺序写入,写入过程中会进行锁定 , 防止并发更新 。对主副本的写入 , 必须在同步地执行对冗余副本的写入后才算成功 。
- 对于复制区域的写操作 , Geode会保证所有的副本都成功执行写入后,才返回成功 。Geode并发地执行对多个server的数据分发,但仍会降低写入的效率 。对于复制区域的并发更新可能击中任何一个副本,这样就出现了并发问题 。Geode在更新前提供了一致性检查,检测并一致地解决并发和无序更新 。这个一致性检查实际上是使用版本号和时间戳来保证,多个更新到来时,只保留最高版本的更新请求 。如果有多个相同版本的更新请求,每个成员都有一个资格ID,最高资格ID的成员的更新生效 。
- 对于复制区域,每个server上都保存着相同的数据 , 因此一个server宕机完全不影响数据的正常读写 。
- 对于分区区域,为了保证高可用性,可以对分区设置冗余副本,在某个server宕机后,Geode会自动地将副本标记为master,当可用的副本数量到达一个阈值后,Geode会启动一个线程 , 启用一个新的server作为新的副本的据点,将所有数据复制到这个新的server上并标记为可用副本 。这个过程是否立即执行是可配置的,也可以等一会看宕机的server是否能恢复 。
分区容错性Apache Geode作为分布式内存数据库,天然地满足了分区容错性 。
3.3 复杂业务场景的需要 3.2.1 事务支持Geode提供了ACID事务的能力,但基于乐观锁 , 重新定义了ACID 。
- 原子性乐观事务通过使用预约系统提供原子性并实现速度 , 而不是使用传统的两阶段锁行关系数据库技术 。这种保留阻止了其他交叉事务的完成,允许提交检查冲突,并在对数据进行更改之前以全有或全无的方式保留资源 。在本地和远程完成所有更改之后,将释放预订 。在预订系统中,交叉事务将被简单地丢弃 。避免了获取锁的序列化 。
- 基于 Apache Hudi 极致查询优化的探索实践
- 一文搞定 Spring事务
- 汽车灯语是什么意思 怎么读懂汽车灯语
- 如何轻松读懂三国演义 如何读《三国演义》
- 水浒传怎么读懂 水浒传怎么读
- 八字详解,一步步读懂你的命运
- 一文掌握手动对焦操作技巧 华为手机手动对焦怎么操作
- 一文弄懂快充是否损害手机电池 120w充电器可以充普通手机吗
- 一文看懂声卡接口类型 speaker是什么接口
- 3分钟读懂空调上的能效等级 空调能效标识怎么解读