Tair是阿里巴巴的一个开源KV中间件。提供快速访问的内存(MDB引擎)/持久化(LDB引擎)存储服务,基于高性能、高可用的分布式集群架构,满足读写性能要求高及容量可弹性伸缩的业务需求。https://github.com/alibaba/tair/wiki
作为一个分布式系统,Tair由一个中心控制节点(config server)和一系列的服务节点(data server)组成。
tair集群的基本概念:
tair 分为持久化和非持久化两种使用方式:
Tair的存储引擎有一个抽象层,只要满足存储引擎需要的接口,便可以很方便的替换Tair底层的存储引擎。比如可以很方便的将bdb、tc、redis、leveldb甚至MySQL作为Tair的存储引擎,而同时使用Tair的分布方式、同步等特性。
Tair主要有下面三种存储引擎:
大数据量导入:数据预排序,按桶分memtable。
tair 的分布采用的是一致性哈希算法,对于所有的key,分到N个桶中,桶是负载均衡和数据迁移的基本单位。config server 根据一定的策略把每个桶指派到不同的data server上,因为数据按照key做hash算法,所以可以认为每个桶中的数据基本是平衡的,保证了桶分布的均衡性, 就保证了数据分布的均衡性。
具体说,首先计算Hash(key),得到key所对应的bucket,然后再去config server查找该bucket对应的data server,再与相应的data server进行通信。也就是说,config server维护了一张由bucket映射到data server的对照表,比如:
bucket | data server |
---|---|
0 | 192.168.10.1 |
1 | 192.168.10.2 |
2 | 192.168.10.1 |
3 | 192.168.10.2 |
4 | 192.168.10.1 |
5 | 192.168.10.2 |
这里共6个bucket,由两台机器负责,每台机器负责3个bucket。客户端将key hash后,对6取模,找到负责的数据节点,然后和其直接通信。