一文读懂Apache Geode缓存中间件( 三 )


  • 到期到期是指按时间销毁掉冷数据,到期有两种计算方式 , 一种是从数据创建或更新开始计算 , 被称为TTL(Time to live),另一种是上次被访问开始计算,被称为Idle timeout 。第二种更适用于热点数据的存储 , 第一种更适合于业务要求的定时失效的数据 。
  • 三、Apache Geode是否能满足我们的需要 3.1 性能 3.2.1 吞吐量和延迟读写吞吐量由并发主存储器数据结构和高度优化的分发基础结构提供 。应用程序可以通过同步或异步复制在内存中动态复制数据,以实现高读取吞吐量,或者跨多个系统成员对数据进行分区 , 以实现高读写吞吐量 。如果数据访问在整个数据集中相当平衡,则数据分区会使聚合吞吐量翻倍 。吞吐量的线性增加仅受骨干网容量的限制 。
    优化的缓存层最大限度地减少了线程和进程之间的上下文切换 。它管理高度并发结构中的数据,以最大限度地减少争用点 。如果接收器可以跟上,则与对等成员的通信是同步的,这使得数据分发的延迟保持最小 。服务器以序列化形式管理对象图,以减少垃圾收集器的压力 。
    客户端可以将单个数据请求直接发送到持有数据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是否能恢复 。
    上面提到的持久化能力也提高了区域的灾备能力,Geode允许以分区为维度进行落盘持久化,并在一个新的server启动后,将磁盘中的内容恢复到内存中 。
    分区容错性Apache Geode作为分布式内存数据库,天然地满足了分区容错性 。
    3.3 复杂业务场景的需要 3.2.1 事务支持Geode提供了ACID事务的能力,但基于乐观锁 , 重新定义了ACID 。