`

tair

    博客分类:
  • db
 
阅读更多

简介

tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化两种使用方式. 非持久化的 tair 可以看成是一个分布式缓存. 持久化的 tair 将数据存放于磁盘中. 为了解决磁盘损坏导致数据丢失, tair 可以配置数据的备份数目, tair 自动将一份数据的不同备份放到不同的主机上, 当有主机发生异常, 无法正常提供服务的时候, 其于的备份会继续提供服务.


tair 的总体结构

tair 作为一个分布式系统, 是由一个中心控制节点和一系列的服务节点组成. 我们称中心控制节点为config server. 服务节点是data server. config server 负责管理所有的data server, 维护data server的状态信息. data server 对外提供各种数据服务, 并以心跳的形式将自身状况汇报给config server. config server是控制点, 而且是单点, 目前采用一主一备的形式来保证其可靠性. 所有的 data server 地位都是等价的.

tair 的负载均衡算法是什么

tair 的分布采用的是一致性哈希算法, 对于所有的key, 分到Q个桶中, 桶是负载均衡和数据迁移的基本单位. config server 根据一定的策略把每个桶指派到不同的data server上. 因为数据按照key做hash算法, 所以可以认为每个桶中的数据基本是平衡的. 保证了桶分布的均衡性, 就保证了数据分布的均衡性.

增加或者减少data server的时候会发生什么

当有某台data server故障不可用的时候, config server会发现这个情况, config server负责重新计算一张新的桶在data server上的分布表, 将原来由故障机器服务的桶的访问重新指派到其它的data server中. 这个时候, 可能会发生数据的迁移. 比如原来由data server A负责的桶, 在新表中需要由 B负责. 而B上并没有该桶的数据, 那么就将数据迁移到B上来. 同时config server会发现哪些桶的备份数目减少了, 然后根据负载情况在负载较低的data server上增加这些桶的备份. 当系统增加data server的时候, config server根据负载, 协调data server将他们控制的部分桶迁移到新的data server上. 迁移完成后调整路由. 当然, 系统中可能出现减少了某些data server 同时增加另外的一些data server. 处理原理同上. 每次路由的变更, config server都会将新的配置信息推给data server. 在客户端访问data server的时候, 会发送客户端缓存的路由表的版本号. 如果data server发现客户端的版本号过旧, 则会通知客户端去config server取一次新的路由表. 如果客户端访问某台data server 发生了不可达的情况(该 data server可能宕机了), 客户端会主动去config server取新的路由表.


发生迁移的时候data server如何对外提供服务

当迁移发生的时候, 我们举个例子, 假设data server A 要把 桶 3,4,5 迁移给data server B. 因为迁移完成前, 客户端的路由表没有变化, 客户端对 3, 4, 5 的访问请求都会路由到A. 现在假设 3还没迁移, 4 正在迁移中, 5已经迁移完成. 那么如果是对3的访问, 则没什么特别, 跟以前一样. 如果是对5的访问, 则A会把该请求转发给B,并且将B的返回结果返回给客户, 如果是对4的访问, 在A处理, 同时如果是对4的修改操作, 会记录修改log.当桶4迁移完成的时候, 还要把log发送到B, 在B上应用这些log. 最终A B上对于桶4来说, 数据完全一致才是真正的迁移完成. 当然, 如果是因为某data server宕机而引发的迁移, 客户端会收到一张中间临时状态的分配表. 这张表中, 把宕机的data server所负责的桶临时指派给有其备份data server来处理. 这个时候, 服务是可用的, 但是负载可能不均衡. 当迁移完成之后, 才能重新达到一个新的负载均衡的状态.


桶在data server上分布时候的策略

程序提供了两种生成分配表的策略, 一种叫做负载均衡优先, 一种叫做位置安全优先: 我们先看负载优先策略. 当采用负载优先策略的时候, config server会尽量的把桶均匀的分布到各个data server上. 所谓尽量是指在不违背下面的原则的条件下尽量负载均衡. 1 每个桶必须有COPY_COUNT份数据 2 一个桶的各份数据不能在同一台主机上; 位置安全优先原则是说, 在不违背上面两个原则的条件下, 还要满足位置安全条件, 然后再考虑负载均衡. 位置信息的获取是通过 _pos_mask(参见安装部署文档中关于配置项的解释) 计算得到. 一般我们通过控制 _pos_mask 来使得不同的机房具有不同的位置信息. 那么在位置安全优先的时候, 必须被满足的条件要增加一条, 一个桶的各份数据不能都位于相同的一个位置(不在同一个机房). 这里有一个问题, 假如只有两个机房, 机房1中有100台data server, 机房2中只有1台data server. 这个时候, 机房2中data server的压力必然会非常大. 于是这里产生了一个控制参数 _build_diff_ratio(参见安装部署文档). 当机房差异比率大于这个配置值时, config server也不再build新表. 机房差异比率是如何计出来的呢? 首先找到机器最多的机房, 不妨设使RA, data server数量是SA. 那么其余的data server的数量记做SB. 则机房差异比率=|SA – SB|/SA. 因为一般我们线上系统配置的COPY_COUNT是3. 在这个情况下, 不妨设只有两个机房RA和RB, 那么两个机房什么样的data server数量是均衡的范围呢? 当差异比率小于 0.5的时候是可以做到各台data server负载都完全均衡的.这里有一点要注意, 假设RA机房有机器6台,RB有机器3台. 那么差异比率 = 6 – 3 / 6 = 0.5. 这个时候如果进行扩容, 在机房A增加一台data server, 扩容后的差异比率 = 7 – 3 / 7 = 0.57. 也就是说, 只在机器数多的机房增加data server会扩大差异比率. 如果我们的_build_diff_ratio配置值是0.5. 那么进行这种扩容后, config server会拒绝再继续build新表.


tair 的一致性和可靠性问题

分布式系统中的可靠性和一致性是无法同时保证的, 因为我们必须允许网络错误的发生. tair 采用复制技术来提高可靠性, 并且为了提高效率做了一些优化, 事实上在没有错误发生的时候, tair 提供的是一种强一致性. 但是在有data server发生故障的时候, 客户有可能在一定时间窗口内读不到最新的数据. 甚至发生最新数据丢失的情况.


tair提供的客户端

tair 的server端是C++写的, 因为server和客户端之间使用socket通信, 理论上只要可以实现socket操作的语言都可以直接实现成tair客户端. 目前实际提供的客户端有java 和 C++. 客户端只需要知道config server的位置信息就可以享受tair集群提供的服务了.





分享到:
评论

相关推荐

    tair与redis比较

    Tair与Redis比较 在分布式缓存系统中,Tair和Redis是两个常见的选择。下面,我们将对Tair和Redis进行比较,探讨它们的架构、功能、使用场景和性能特点。 Tair架构 Tair是一个分布式的缓存系统,主要包括四个模块...

    tair.zip, tair源码

    《深入解析tair源码》 tair,全称为Tencent Advanced In-Memory Storage,是腾讯公司开发的一款高性能、高可用、低延迟的分布式内存存储系统。它主要用于处理大规模数据的快速读写需求,尤其在实时计算、推荐系统、...

    tair缓存开发指南

    Tair 缓存开发指南 Tair 是淘宝网自主开发的 Key/Value 结构数据存储系统,在淘宝网有着大规模的应用。以下是 Tair 的功能和实现细节: 1. Version 支持:Tair 中的每个数据都包含版本号,版本号在每次更新后都会...

    tair 服务端源码包

    《淘宝Tair服务端源码解析》 Tair,全称为Taobao Advanced In-Memory Storage,是淘宝自主研发的一款高性能、高可用的分布式Key/Value存储系统。它在淘宝内部广泛应用于缓存、配置中心、日志存储等多个场景,极大地...

    轻松入门淘宝开源NoSQL框架Tair视频教程

    在Tair出现之前的很长一段时间里,像redis、memcache这些知名NoSql数据库是不支持分布式的,在这样的背景下,由淘宝网自主开发并在2010.6开源的一个高性能、高扩展、高可靠分布式缓存,类似map的key/value结构,在...

    分布式缓存tair介绍

    【分布式缓存tair详解】 Tair是一款由淘宝自主研发的分布式键值存储系统,它主要设计用于处理大量的key-value数据,提供高并发访问和高效的数据存储。Tair分为持久化和非持久化两种模式,非持久化模式下,Tair充当...

    com.taobao.tair

    通过模块化设计,Tair可以方便地添加新功能或进行定制,例如支持Tair的插件系统可以扩展出如Tair-Graph(图数据库)、Tair-Search(搜索引擎)等子系统。 ### 9. 监控与运维 Tair提供了丰富的监控指标和运维工具,...

    tair-2.3分布式key-value存储引擎

    tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化两种使用方式. 非持久化的 tair 可以看成是一个分布式缓存. 持久化的 tair 将数据存放于磁盘中. 为了解决磁盘损坏导致数据丢失, ...

    分布式缓存tair的内部结构介绍

    分布式缓存系统Tair是一个专为高性能、高可用性设计的键值存储系统。它支持多种存储引擎,但每个系统实例仅能使用一种。Tair的架构由几个关键组件构成,包括config_server、data_server、storage模块以及一些通用...

    Redis企业版Tair性能增强系列产品概述.pdf

    阿里云Redis企业版Tair是一款高性能的NoSQL数据库系统,旨在为企业提供更加强大和灵活的数据存储解决方案。Tair最初是阿里巴巴自研的数据库系统,用于应对双11等大型活动的高流量挑战。随着云计算的发展,Tair逐渐...

    memcache、redis、tair性能对比测试报告

    《memcache、redis、tair性能对比测试报告》详述了在分布缓存技术领域,对这三种主流缓存服务器的性能评估。测试主要目的是在相同功能特性的基础上,对比它们在不同场景下的表现,因此排除了ehcache(组件级缓存)和...

    tair使用测试

    **淘宝TAIR使用测试** 淘宝TAIR(Tencent Advanced Internet Repository)是一款由淘宝公司开发的分布式键值存储系统,主要用于处理大规模数据存储和快速访问的需求。TAIR的设计目标是提供高可用性、高性能以及可...

    tair集群配置

    ### TAIR集群配置详解 TAIR (TaoBao Advanced In-Memory Database) 是一款由阿里巴巴集团自主研发的高性能、分布式内存存储系统。本文将详细解析TAIR集群的配置步骤及过程中需要注意的关键点。 #### 一、环境准备 ...

    tair源码java镜像

    tair源码,java,镜像,nosql数据库,阿里巴巴淘宝源码

    tair-2.3.tar.tar

    淘宝tair源代码包,tair 是淘宝自己开发的一个分布式 key/value 存储引擎。

    第二届数据库大赛-Tair性能挑战复赛参赛源码+项目说明.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为...第二届数据库大赛-Tair性能挑战复赛参赛源码+项目说明.zip

    tair3-client-3.0.1.13.jar

    maven 淘宝下的jar包啊

Global site tag (gtag.js) - Google Analytics