淘宝中间件——tair
Posted 落叶飞翔的蜗牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了淘宝中间件——tair相关的知识,希望对你有一定的参考价值。
Tair是阿里巴巴的一个开源KV中间件。提供快速访问的内存(MDB引擎)/持久化(LDB引擎)存储服务,基于高性能、高可用的分布式集群架构,满足读写性能要求高及容量可弹性伸缩的业务需求。https://github.com/alibaba/tair/wiki
作为一个分布式系统,Tair由一个中心控制节点(config server)和一系列的服务节点(data server)组成。
config server 负责管理所有的data server,并维护data server的状态信息;为了保证高可用(High Available),config server可通过hearbeat 以一主一备形式提供服务;
data server 对外提供各种数据服务,并以心跳的形式将自身状况汇报给config server;所有的 data server 地位都是等价的。
tair集群的基本概念:
namespace,又称area, 是tair中分配给应用的一个内存或者持久化存储区域, 可以认为应用的数据存在自己的namespace中。 同一集群(同一个configID)中namespace是唯一的。通过引入namespace,我们可以支持不同的应用在同集群中使用相同的key来存放数据,也就是key相同,但内容不会冲突,因为可以根据namespace区分不同的key。一个namespace下是如果存放相同的key,那么内容会受到影响,在简单K/V形式下会被覆盖,rdb等带有数据结构的存储引擎内容会根据不同的接口发生不同的变化。
quota配额,对应了每个namespace储存区的大小限制,超过配额后数据将面临最近最少使用(LRU)的淘汰。持久化引擎(ldb)本身没有配额,ldb由于自带了mdb cache,所以也可以设置cache的配额。超过配额后,在内置的mdb内部进行淘汰。
expireTime,数据的过期时间。当超过过期时间之后,数据将对应用不可见,不同的存储引擎有不同的策略清理掉过期的数据。
存储引擎
tair 分为持久化和非持久化两种使用方式:
非持久化的 tair 可以看成是一个分布式缓存;
持久化的 tair 将数据存放于磁盘中,为了解决磁盘损坏导致数据丢失,tair 可以配置数据的备份数目。tair 自动将一份数据的不同备份放到不同的主机上,当有主机发生异常,无法正常提供服务的时候,其余的备份会继续提供服务。
Tair的存储引擎有一个抽象层,只要满足存储引擎需要的接口,便可以很方便的替换Tair底层的存储引擎。比如可以很方便的将bdb、tc、redis、leveldb甚至mysql作为Tair的存储引擎,而同时使用Tair的分布方式、同步等特性。
Tair主要有下面三种存储引擎:
mdb,定位于cache缓存,类似于memcache。支持k/v存取和prefix操作;
rdb,定位于cache缓存,采用了redis的内存存储结构。支持k/v,list,hash,set,sortedset等数据结构;
ldb,定位于高性能存储,采用了levelDB作为引擎,并可选择内嵌mdb cache加速,这种情况下cache与持久化存储的数据一致性由tair进行维护。支持k/v,prefix,list,hash,set,sortedset等redis支持的数据结构。
MDB流程
RDB流程
LDB流程
fastdump
大数据量导入:数据预排序,按桶分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取模,找到负责的数据节点,然后和其直接通信。
以上是关于淘宝中间件——tair的主要内容,如果未能解决你的问题,请参考以下文章