140 likes | 492 Views
Tair 、 memcached 分布式介绍. Tair. tair 是由淘宝网自主开发的 key-value 数据库, Tair 于 2010 年 6 月 30 号在淘宝开源平台上正式对外开源。分为持久化和非持久化两种。. Key-value 结构. Value 结构,是一个集合,可视为一个数组,集合中允许数据重复。 支持的操作: 集合末尾 append items 获取指定区间的 items ( offset count ) 获取并删除指定区间的 items 删除指定区间的 items 获取 items 个数. 整体架构图.
E N D
Tair • tair是由淘宝网自主开发的key-value数据库,Tair于2010年6月30号在淘宝开源平台上正式对外开源。分为持久化和非持久化两种。
Key-value结构 • Value结构,是一个集合,可视为一个数组,集合中允许数据重复。 • 支持的操作: • 集合末尾append items • 获取指定区间的items(offset count) • 获取并删除指定区间的items • 删除指定区间的items • 获取items个数
轻量级的Config server • configserver维护data server的状态信息,管理所有的data server • client与configserver交互,获取数据分布的对照表,client会cache这张表, • configserver维护的对照表有一个版本号, • 每次新生成表时,版本号会增加。通过数据节点的心跳,将新表同步给数据节点。当客户端请求数据节点,数据节点会将自己的对照表的版本号放入response中返回给client,client接受到response,跟自己的版本号比较,不相同,主动跟configserver通讯。
对照表 • 对照表的行数是一个固定值W,这个固定值应该远大于一个集群的物理集群数,这个数又不能太大,因为这个对照表需要和每个使用tair的客户端同步,生产环境为1023. • 对照表结构:第一列为hash值,第二列为该hash值对应的数据dataserver节点信息。当有备份功能时:第二列为主节点信息,第三列为辅节点信息。(客户端请求都跟主节点交互,单纯的备份节点。) • 具体操作:client请求,key的hash值跟W取模,根据取模结果查找对照表。 • 当新增节点:重新构建对照表。依据两个原则:数据在新表中均衡地分布到所有节点上和尽可能地保持现有的对照关系
Data server • 负责数据的物理存储,根据configserver的对照表完成数据的复制和迁移。 • 其中存储引擎有一个抽象层,可以方便替换底层存储引擎,如bdb、tc、mysql。默认为mbd和fdb • 自动的复制和迁移 • 当数据写入主节点后,这节点会根据对照表自动将数据写入到其他备份节点,对用户是透明的。(这个更新的频率,也就是一致性问题) • 当configserver新的对照表,数据节点同步到新的对照表,自动将新表中不由自己负责的数据迁移到新的目标节点。迁移完成后,客户端可以从configserver同步到新的对照表,完成扩容或者容灾过程,对用户是透明的,服务不中断 • 还有插件容器,支持热插拔插件,由configserver配置,会讲配置同步到各个数据节点,数据节点复杂加载/卸载相应插件。分为request和response两类。
容错 • 当节点不可用时,config server重新计算一个新的对照表, • 如果是辅节点,重新指定一个辅节点,如果是持久化存储,需要复制数据到新的辅节点上。 • 如果是主节点,将辅节点升为主节点,并指定一个新的辅节点。 • 这里客户端访问data server发生不可达情况,客户端主动去config server取新的路由表,客户端会收到一张中间临时状态的分配表,把不可用的data server临时指派给有备份的data server处理,可能会出现负载不均衡。
数据迁移 • 发生数据迁移,迁移完成后调整路由,config server会将新的对照表推送给data server。重点的迁移过程中有client对数据进行访问: • A还没有传给目的节点B时,操作没有影响 • 对已经传给目的节点B的数据,A会将请求转发给B,并将B的返回结果返回给client • 对正在迁移中的数据,如果有修改操作,会记录修改log,当迁移完成后,会将log发送给B,B上应用log,这样AB上数据一致
Memcached的分布式 • 分布式是由客户端程序库实现的。 • 介绍两种: • 根据余数计算分散 • 一致性哈希consistent hashing
根据余数计算分散 • 先求键的整数哈希值,再除以服务器台数,根据其余数来选择服务器。 • 优点: • 计算简单,数据的分散性很好 • 缺点: • 当添加或者移除服务器时,缓存重组的代价很大,添加服务器,余数会产生巨变,这样无法取得与保存时相同的服务器,从而影响缓存的命中率。