Tair(1):Tair介绍

1 介绍

​ 在Tair出现之前的很长一段时间里,像redis、memcache这些知名NoSql数据库是不支持分布式的,在这样的背景下,由淘宝网自主开发并在2010.6开源的一个高性能、高扩展、高可靠分布式缓存,类似map的key/value结构,在淘宝、天猫等各个应用中广泛应用。

​ Tair官网:https://www.oschina.net/p/tair

​ gitee地址:https://gitee.com/mirrors/Tair

​ github wiki地址:https://github.com/alibaba/tair/wiki

2 概念

  • configID:一个Tair集群的唯一标识
  • namespace:应用的一个内存或者持久化存储区域,0到65535之间的一个数字
  • quta:配额,对应了每个 namespace 储存区的大小限制,超过配额后将使用LRU(最少使用)策略淘汰
  • expireTime:数据的过期时间。当超过过期时间之后,数据将对应用不可见,不同的存储引擎有不同的策略清理掉过期的数据
  • prefix:前缀处理,保证了拥有相同前缀的key根据哈希算法后,分散在同一个dataserver上,提高了处理速度。

3 特性

​ Tair实现了集群部署,特性都是一些集群的特性,容错、解决单点故障、跨机房管理、多集群管理、支持副本等。Tair的特性有:

  • ​Namespace
  • ​Expire
  • ​Prefix
  • ​List,zset,hash,set
  • ​LocalCache
  • ​FlowControl

抽象存储层,内部采用MDB、RDB、LDB三中存储引擎满足了各种存储需求。

​ MDB是内存型,K/V结构,底层是memcache ,由于是内存型性能最高但是不支持持久化。

​ RDB底层是redis引擎,支持List、Set、Zset、Map、String等多种数据结构,性能略低于MDB。

​ LDB是持久化型引擎,底层是google的levelDB,K/V结构,性能最低,但是可靠性最高。

4 应用场景

​ 由于Tair底层的MDB、RDB、LDB三种引擎支持,既能作为缓存使用又可以作为持久化存储数据库,命令除了put、get、delete以及批量接口外,还有一些附加的实用功能比如version支持、原子计数器、item支持,可以用于实现分布式锁,队列等。

5 Tair与其他缓存对比

Tair Redis Memcache Ehcache
是否开源 开源 开源 开源 开源
使用语言 服务器端C++;客户端支持C、JAVA、PHP等 ANSI C语言编写 ,提供多种语言(C/C++/JAVA/PHP等)的API 服务端C,客户端支持c、php、java、python等 java
集群 支持 3.0以后支持 服务端不支持,客户端使用一致性hash算法将数据分布式存储 支持,默认是异步同步
容灾 支持 3.0以后支持 可通过客户端实现 支持
高可用 支持 3.0以后支持 不支持,可通过第三方应用比如magent实现 支持
动态扩展 支持 3.0以后支持 可通过客户端实现 支持,本地存储在.data和.index文件
效率 LDB < RDB < MDB 高于redis 高于memcache
持久化 LDB、RDB引擎支持 支持(AOF、默认RDB) 不支持,可通过第三方应用实现 支持
缓存过期失效策略 支持 支持 支持,lru算法 支持,LRU(默认),FIFO,LFU
数据结构 K/V、list、hash、set、sortedsort等 K/V、list、hash、set、sortedsort五种数据结构 支持简单的K/V结构 支持简单的K/V结构
分布式 支持 3.0以后支持 客户端使用一致性hash做分布式 支持
跨机房管理 支持 不支持 不支持 不支持
多集群管理 支持 不支持 不支持 不支持
使用状况 只有阿里内部大规模使用 普遍使用 使用情况较多 多用于hibernate的缓存实现
缺点 文档不全,社区不活跃,单节点上性能没有redis高,不能对key实现模糊查询,单条数据不能太大key建议1k以下,value不能超过1M,建议10k以下 3.0以前不支持集群,单线程无法充分利用多核服务器CPU,事务支持较弱,rdb每次都是写全量数据,成本高,aof追加导致log特别大 结构单一,数据在内存重启会丢失,数据大小受内存限制 结构单一、只适用于java体系,只能用java编写客户端,且使用磁盘做cache时占空间
优点 采用分布式集群架构,具备自动容灾及故障迁移能力,对存储层做了抽象,底层方便切换不同的存储引擎,采用一致性哈希算法将key分散在Q个桶中,并将桶放到不同的dataserver上,保证数据平衡,tair高可用比较强,容灾性比redis强,支持多种集群结构,支持跨机房数据分布 非常丰富的数据结构而且都是原子性操作、高速读写、支持事务,支持aof、rdb两种持久化机制,拥有丰富特性,订阅发布 Pub / Sub 功能、Key 过期策略、事务、支持多个 DB、计数、支持集群和数据备份 简洁,灵活,多线程非阻塞io效率高,所有支持多种语言api,且在并发下用cas保证一致性 效率高,功能强大,版本迭代特别快、缓存策略支持多种,可以通过rmi可插入api实现分布式缓存、具备缓存监听、支持多缓存实例、提供hibernate的缓存实现、支持非持久化和持久化缓存数据

猜你喜欢

转载自blog.csdn.net/u013938578/article/details/134874897