Tair是为了解决什么问题而生?redis
Redis很好用,相比memcached多了不少数据结构,支持持久化。可是在很长一段时间里,原生是不支持分布式的。后来就出现了不少redis集群类产品,Tair是其中胜出的优秀做品之一。算法
因此Tair的特性都是一些集群的特性,好比:容错、解决单点故障、跨机房管理、多集群管理、支持副本等。总而言之,是redis的高可用版本。sql
Tair的架构数据库
Tair的总体风格是简约实用,包括三个必选模块:client、configserver和dataserver。一个可选模块:invalidserver。还有一个必要软设施:一致性哈希算法提供分布式的负载均衡计算。缓存
client的做用数据结构
1. 在应用端提供访问Tair集群的接口架构
2.更新并缓存数据分布表和invalidserver 地址等
3. 本地缓存,避免过热数据访问影响Tair集群服务负载均衡
4. 流控nosql
configserver的做用分布式
1. 经过维护和dataserver心跳来获取集群存活节点的信息
2.经过存活节点的信息来构建数据在集群中的分布表
3. 提供数据分布表的查询服务
4. 调度dataserver之间的数据迁移、复制
dataserver的做用
1. 提供存储引擎
2. 接受client和put、get、remove等操做
3. 执行数据迁移、复制等
4. 插件:在接受请求的时候处理一些自定义功能
5. 访问统计
invallidserver的做用
1. 接收来自client和invalid、hide等请求后,对属于同一组的集群(双机房独立集群部署方法)作delete、hide操做,保证同一组集群的一致
2.集群断网以后的脏数据清理
3. 访问统计
一致性哈希的做用
1. 增长和减小dataserver的时候,进行rehash重哈希。并在迁移过程当中保持原数据对外提供服务
2. 负载均衡,并行多个key进行计算合并结果(mget)
Tair的使用场景
缓存
分布式锁
做为nosql数据库,提供简单类型存储(K/V存储,无复杂查询)
Tair使用QA
1.
Q:tair能够支持支持什么类型?
A:内部是序列化成二进制的,就是说理论上支持任何类型。
2.
Q:tair有mget的功能能够一次性返回多个结果,这个个数有上限吗?
A:理论上没有。实际使用中建议1次在100个如下。由于多个请求要等全部的结果回来再进行聚合。聚合等待太多,错误就会发生。比如一个机器故障率是万分之一。那么10000条记录一块儿请求结果,那么故障率就很是高了,可能多数状况下都是失败的。
3.
Q:tair的分布式锁使用有什么最佳实践?
A:分布式锁使用建议使用带有过时时间的分布式锁,过时时间可传一个绝对的时间戳。解锁时可传入一个很是大的整数,以解掉全部的锁。