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


  • Replicated 复制区域如果某个区域数据量不大,为了提高读性能,复制区域可以将区域中所有数据完整地复制给其它副本,这样所有server中保存着完全相同的数据 。
  • 2.1.4 数据量的控制和热点数据Geode有两种模式控制内存中的数据规模,持久化和失效 。但无论如何,热点数据都通过最近最少使用(LRU)算法来判断 。
    • 2.1.4.1 持久化
      持久化(Persisted) 和 溢出(Overflowed) 是配合使用的两个概念,配置共同使用持久化和溢出之后,所有数据都会被复制到磁盘,在内存中只保留热点数据的值,但所有数据的键都会被保留,以便于确认数据在磁盘上是否存在 。内存中数据量达到阈值后(指定条数或内存负载),排在LRU队尾的数据会被溢出到磁盘中(也即删除),当这个键对应的数据又一次被访问到,这个键会被恢复到内存中 。磁盘中的值和内存中的值在应用程序看来没有任何区别 。
    • 2.1.4.2 失效
      驱逐(Eviction) 和 到期(Expiration) 是可配置的两种数据失效的方式,总的来说,失效就是值当数据满足某些条件时,就从内存中删除掉 。
      • 驱逐驱逐是指当内存中的数据量到达一定阈值时,将LRU队尾的数据销毁 。这个阈值可以是条数或占用的内存大小 。驱逐和溢出并不是互斥的,溢出实际上是一种不会丢失数据的驱逐 。
      • 到期到期是指按时间销毁掉冷数据,到期有两种计算方式,一种是从数据创建或更新开始计算,被称为TTL(Time to live),另一种是上次被访问开始计算,被称为Idle timeout 。第二种更适用于热点数据的存储,第一种更适合于业务要求的定时失效的数据 。
    三、Apache Geode是否能满足我们的需要 3.1 性能 3.2.1 吞吐量和延迟读写吞吐量由并发主存储器数据结构和高度优化的分发基础结构提供 。应用程序可以通过同步或异步复制在内存中动态复制数据,以实现高读取吞吐量,或者跨多个系统成员对数据进行分区,以实现高读写吞吐量 。如果数据访问在整个数据集中相当平衡,则数据分区会使聚合吞吐量翻倍 。吞吐量的线性增加仅受骨干网容量的限制 。
    优化的缓存层最大限度地减少了线程和进程之间的上下文切换 。它管理高度并发结构中的数据,以最大限度地减少争用点 。如果接收器可以跟上,则与对等成员的通信是同步的,这使得数据分发的延迟保持最小 。服务器以序列化形式管理对象图,以减少垃圾收集器的压力 。
    客户端可以将单个数据请求直接发送到持有数据key的服务器,从而避免多跳以定位已分区的数据 。客户端中的元数据标识正确的服务器 。
    3.2.3 索引Geode的查询支持索引以提高查询效率 。实际上,Geode维护了一个键和索引值之间关系的数据结构(一般是一颗B树),并支持范围查询 。但和所有的关系型数据库一样,索引能带来收益的前提是良好的索引设计,而且必然会带来写效率的降低 。
    3.2 CAP我们知道分布式系统存在CAP不可能三角,即一个分布式系统最多只能同时满足 一致性(Consistency) 、 可用性(Availability) 和 分区容错性(Partition tolerance) 这三项中的两项 。下面从一致性、可用性和分区容错性上分析Apache Geode的性能优劣 。
    一致性Apache Geode的定位是一款强一致性的内存数据库 。一致性的破坏有两种渠道: 副本更新的延迟或失败 和 并发更新。