分布式缓存tair学习

tair 是淘宝自己开发的一个分布式 key/value 存储引擎。 tair 分为持久化和非持久化两种使用方式。 非持久化的 tair可以看成是一个分布式缓存.。持久化的 tair 将数据存放于磁盘中。 为了解决磁盘损坏导致数据丢失。tair 可以配置数据的备份数目。tair 自动将一份数据的不同备份放到不同的主机上, 当有主机发生异常, 无法正常提供服务的时候, 其于的备份会继续提供服务。

总体架构:

tair 作为一个分布式系统, 是由一个中心控制节点和一系列的服务节点组成。 我们称中心控制节点为config server。服务节点是data server. config server 负责管理所有的data server, 维护data server的状态信息。data server 对外提供各种数据服务, 并以心跳的形式将自身状况汇报给config server。config server是控制点,而且是单点。 所有的 data server 地位都是等价的。
tair 的分布采用的是一致性哈希算法, 对于所有的key, 分到N个桶中, 桶是负载均衡和数据迁移的基本单位.。config server根据一定的策略把每个桶指派到不同的data server上。 因为数据按照key做hash算法, 所以可以认为每个桶中的数据基本是平衡的。保证了桶分布的均衡性, 就保证了数据分布的均衡性。
Tair经过这两年的发展演进,除了应用于cache缓存外,在存储(持久化)上支持的应用需求也越来越广泛。现在主要有mdb,rdb,ldb三种存储引擎。
mdb
定位于cache缓存。
支持k/v存取和prefix操作
特点:适用容量小,读写QPS高(万级别)的应用场景。由于是内存型产品,因此无法保证数据的安全性,对数据安全有要求的应用需在后端加持久化数据源(例如MySQL)。
rdb
定位于cache缓存,采用了redis的内存存储结构。
支持k/v,list,hash,set,sortedset等数据结构。
rdb的应用场景
适用于需要高速访问某些数据结构的应用,例如存储一个商品的多个属性(hashmap);队列(list)等。
ldb
定位于高性能存储,并可选择内嵌mdb cache加速,这种情况下cache与持久化存储的数据一致性由tair进行维护。
支持k/v,prefix等数据结构。今后将支持list,hash,set,sortedset等redis支持的数据结构。

ldb应用场景
数据存储
● 推荐或广告类业务通常需要离线计算大量数据。LDB 支持持久化存储,且性能优异,支持数据的在线化服务,因此,用户可将离线数据定期导入 LDB 提供在线服务。
● 榜单类业务也可通过计算后,将最终的榜单信息存储在 LDB,并直接展示给前端应用。既可满足存储需求,也可以满足快速访问的需求。
黑白名单
安全类应用有较多黑白名单场景,该类黑白名单场景具有命中率低,访问量大,数据丢失业务有损等特性。LDB 支持数据持久化功能,同时也支持高访问量,因此被广泛应用于此类场景。
分布式锁
为防止因多线程并发造成的数据不一致或逻辑混乱,分布式锁是比较常见的处理方式。利用 Tair 的 version 特性或者计数功能可以实现分布式锁。由于 LDB 具有持久化功能,当服务有出现宕机的情况,也不会因此出现锁丢失或者锁不可释放的情况。

扩展数据结构列表

扩展数据结构 说明
CAS和CAD命令 为增强Redis String的功能而开发的命令,可以实现简洁高效的分布式锁

exString TairString是一种带版本号的String类型数据结构,TairString除包含Key和Value外,还携带了版本(version)信息,可用于乐观锁
等场景。除此之外,TairString在Redis String加减功能的基础上支持了边界设置,可以将INCRBY、INCRBYFLOAT的结果限制在一定的范围内,超出范围则提示错误,适用于限流器等场景。
exHash TairHash是一种Hash类型的数据,不但和原有的Redis Hash一样支持丰富的数据接口和高处理性能,还支持为field设置过期时间和版本,简化业务开发流程。通过高效的Active Expire算法,可以在不对响应时间造成明显影响的前提下,更高效的完成对field的超时判断和删除。
exZset TairZset可实现任意维度的double类型的分值排序,提升数据处理效率,且客户端适配简易,无需任何编解码封装,解决原生Sorted Set(也称Zset)只支持1个double类型的分值排序的局限性。
GIS TairGIS是一种使用R-Tree做索引,支持地理信息系统GIS(Geographic Information System)相关接口的数据结构。Redis的原生GEO命令使用1D索引,主要用于点的查询,TairGIS使用2D索引,支持点、线、面的查询,适合判断相交或包含关系,功能更加强大。
Bloom TairBloom是一种可动态扩容的布隆过滤器,完全兼容RedisBloom模块的命令,具有动态扩容的能力,相对传统实现方式消耗内存更低,可在扩容的同时维持误判率的稳定,适合需要高效判断大量数据是否存在且允许一定误判率的业务场景。
Doc TairDoc是一种文档类型的数据结构,支持JSON标准,类似RedisJSON模块。同时,TairDoc数据以二进制树的方式存储,支持对JSON中子元素进行快速访问。
TS TairTS是基于Redis Module开发的时序数据结构,提供低时延、高并发的内存读写访问,及快速的过滤、聚合查询功能,集存储与计算为一体,在简化了处理时序数据流程的同时,大幅度提高了性能。
Cpc TairCpc是基于CPC(Compressed Probability Counting)压缩算法开发的数据结构,支持仅占用很小的内存空间对采样数据进行高性能计算。
Roaring TairRoaring是基于Tair引擎的Roaring Bitmap实现,通过2层索引和引入多种动态容器(Container),同时使用了包括SIMD instructions、Vectorization、PopCnt算法在内的等多种工程优化,提供更低的内存占用及更高的集合计算效率。
Search TairSearch是基于Redis module全自研(不基于Lucene等开源搜索库)的全文搜索模块,采用和Elasticsearch相似(ES-LIKE)的查询语法。
Vector TairVector是Tair自研的扩展数据结构,提供高性能、实时,集存储、检索于一体的向量数据库服务。

tairString
tairString是一种带版本号的string,与redis的kv不同,它携带了k-(v+Version),可用于乐观锁等场景,而且在原生的加减功能上支持了边界设置,可以支持incrby/incrbyfloat的结果在一定范围。

你可能感兴趣的:(缓存,分布式,学习)