0. 简介
tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化两种使用方式. 非持久化的 tair
可以看成是一个分布式缓存. 持久化的 tair 将数据存放于磁盘中. 为了解决磁盘损坏导致数据丢失, tair 可以配置数据的备份数目,
tair 自动将一份数据的不同备份放到不同的主机上, 当有主机发生异常, 无法正常提供服务的时候, 其于的备份会继续提供服务.
1. tair 的总体结构
**tair 作为一个分布式系统, 是由一个中心控制节点和一系列的服务节点组成.我们称中心控制节点为config server.
服务节点是data server. config server 负责管理所有的data server,** 维护data server的状态信息.
data server 对外提供各种数据服务, 并 以心跳的形式 将自身状况汇报给config server. config server是控制点,
而且是单点, 目前采用 一主一备 的形式来保证其可靠性. 所有的 data server 地位都是等价的.
一个Tair集群主要包括3个必选模块:configserver、dataserver和client,一个可选模块:invalidserver。 通
常情况下,一个集群中包含2台configserver及多台dataServer。两台configserver互为主备并通过维护和dataserver之间的心跳获知集群中存活可用的dataserver,构建数据在集群中的分布信息(对照表)。dataserver负责数据的存储,并按照configserver的指示完成数据的复制和迁移工作。client在启动的时候,从configserver获取数据分布信息,根据数据分布信息和相应的dataserver交互完成用户的请求。 invalidserver主要负责对等集群的删除和隐藏操作,保证对等集群的数据一致。
从架构上看,configserver的角色类似于传统应用系统的中心节点,整个集群服务依赖于configserver的正常工作。但实际上相对来说,tair的configserver是非常轻量级的,当正在工作的服务器宕机的时候另外一台会在秒级别时间内自动接管。而且,如果出现两台服务器同时宕机的最恶劣情况,只要应用服务器没有新的变化,tair依然服务正常。而有了configserver这个中心节点,带来的好处就是应用在使用的时候只需要配置configserver的地址(现在可以直接配置Diamond key),而不需要知道内部节点的情况。
ConfigServer的功能
- 通过维护和dataserver心跳来获知集群中存活节点的信息
- 根据存活节点的信息来构建数据在集群中的分布表。
- 提供数据分布表的查询服务。
- 调度dataserver之间的数据迁移、复制。
DataServer的功能
- 提供存储引擎
- 接受client的put/get/remove等操作
- 执行数据迁移,复制等
- 插件:在接受请求的时候处理一些自定义功能
- 访问统计
client的功能
- 在应用端提供访问Tair集群的接口。
- 更新并缓存数据分布表和invalidserver地址等。
- LocalCache,避免过热数据访问影响tair集群服务。
- 流控
InvalidServer的功能
- 接收来自client的invalid/hide等请求后,对属于同一组的集群(双机房独立集群部署方式)做delete/hide操作,保证同一组集群的一致。
- 集群断网之后的