`

开源的项目tair 简介

阅读更多

简介¶
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集群提供的服务了.

 

主要的性能数据¶


测试机软件情况描述¶
•Red Hat Enterprise Linux Server release 5.4
•gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)

测试机硬件情况描述¶
•十六核 Intel(R) Xeon(R) CPU E5520 @ 2.27GHz
•内存总数24G


测试环境部署描述¶
•两台配置服务器
•四台数据服务器(数据服务器copycount为3)


fdb存储引擎性能¶
本次性能测试主要测试fdb存储引擎下,随着各个数据服务器存储数据量的增大纯写操作和纯读操作的性能。测试数据选取512-1024大小的数据,纯写时写入完全不存在的数据。纯读时数据读取范围总数据量为内存cache大小的2倍。采用单台性能测试client端压测,分别在各个数据服务器存储了以下大小文件的情况下进行了纯读纯写性能测试:

 

 

•分别在每台数据服务器存储100G-700G数据(包括备份数据)情况下,客户端250线程纯读操作测试。
•分别在每台数据服务器存储100G-700G数据(包括备份数据),客户端30线程纯写操作测试。
场景  操作  TPS  成功率(%)  Load情况  平均响应时间 
100G数据  纯Get 250Thread  5515  99.9%  6-10  0.046 
100G数据  纯Put 30Thread  7105  99.8%  6-10  0.0037 
200G数据  纯Get 250Thread  5395  99.9%  6-10  0.047 
200G数据  纯Put 30Thread  8150  99.7%  6-10  0.0025 
300G数据  纯Get 250Thread  5245  99.7%  6-10  0.049 
300G数据  纯Put 30Thread  6143  99.7%  6-10  0.0041 
400G数据  纯Get 250Thread  5017  99.7%  6-10  0.053 
400G数据  纯Put 30Thread  5510  99.7%  6-10  0.0046 
500G数据  纯Get 250Thread  5115  99.7%  6-10  0.053 
500G数据  纯Put 30Thread  4478  99.6%  6-10  0.0046 
600G数据  纯Get 250Thread  4018  99.9%  6-10  0.059 
600G数据  纯Put 30Thread  1145  99.4%  6-10  0.053 
700G数据  纯Get 250Thread  3126  99.99%  6-10  0.079 
700G数据  纯Put 30Thread  457  99.2%  6-10  0.058 

mdb存储引擎性能¶
mdb存储引擎是内存操作,所以性能受数据量的影响不是很明显

20G数据  纯读  29753 
20G数据  纯写  31180 

 

下面是tair的源代码包

http://download.csdn.net/source/2509151

或者svn客户端下载:http://code.taobao.org/svn/tair/trunk/

分享到:
评论

相关推荐

    阿里开源项目合集

    ### 阿里开源项目合集 #### 一、FastDFS **FastDFS** 是一个专为文件管理和分发设计的轻量级分布式文件系统。它有效地解决了在高并发场景下,文件存储和访问的问题。具体功能包括但不限于: - **文件存储**:支持大...

    com.taobao.tair

    作为阿里巴巴开源项目,Tair拥有活跃的社区支持,开发者可以获取到详尽的文档、示例代码以及来自社区的解答和帮助。 总结来说,**com.taobao.tair** 是一个强大而灵活的分布式键值存储系统,它具备高并发、低延迟、...

    网络蜘蛛webspider开源系统

    由于是开源项目,用户还可以根据自身的技术背景和需求对代码进行修改和扩展,进一步优化和适应自己的业务场景。 总的来说,【网络蜘蛛Webspider开源系统】是一个功能全面、技术先进的网络爬虫框架,它结合了高效的...

    数据库大赛-基于C++实现的Tair性能挑战复赛代码+文档说明

    Tair是阿里云自研的云原生内存数据库,接口兼容开源Redis/Memcache。在阿里巴巴集团内和阿里云上提供了缓存服务和高性能存储服务,追求极致的性能和稳定性。全新英特 - 不懂运行,下载完可以私聊问,可远程教学 该...

    开源webspider网络蜘蛛

    开源的Webspider网络蜘蛛是一种高效且稳定的网页抓取工具,设计用于并行抓取多个网站的数据。这个项目采用BS(Browser/Server)架构,即浏览器/服务器模式,这意味着用户可以通过网页界面远程控制和监控爬虫的运行...

    开源webspider网络蜘蛛webspider-1.0.0.6.tar.gz

    通过这个开源项目,开发者不仅可以学习到网络爬虫的设计原理和实现技巧,还可以深入了解如何利用HTTPSQS、Tair、MySQL和Sphinx等技术构建分布式、高性能的爬虫系统。此外,该项目的源代码对于理解分布式系统、数据库...

    Alibabab开源分布式核心原理解析,分布式最强图文笔记

    Hadoop和Spark是大数据处理领域的明星项目,阿里巴巴的MaxCompute(原名ODPS)是一个大规模并行计算平台,它提供SQL接口,让用户轻松处理PB级别的数据。此外,Flink作为实时流处理引擎,也被广泛应用于阿里巴巴的...

    ppt-章文嵩

    - **开源项目与技术分享**:淘宝通过开源项目如Tengine(基于Nginx的Web服务器)、TFS、OceanBase等向社区贡献了自己的技术和经验。此外,淘宝还通过各种渠道分享自己的技术实践,如MySQL优化经验等。 #### 五、...

    《架构师》电子月刊2010年10月刊PDF电子书

    从给定的文件信息中,我们可以提炼出一...通过上述内容,我们可以看到2010年左右的IT行业动态,涉及移动开发、企业战略、软件工程、云计算、开源项目、编程语言、Web技术等多个领域,体现了当时技术发展的趋势和热点。

    美团的Mtrace分布式会话跟踪系统架构设计与实践

    #### 一、Mtrace项目简介 Mtrace是美团内部开发的一款分布式会话跟踪系统,旨在解决日益复杂的分布式系统中的服务调用关系梳理问题。在这样的系统环境中,每一个前端请求都可能引发一系列复杂的后端服务调用链路。...

    cache-demo-2.5.zip_Cache2.5_DEMO_cache

    8. 阿里巴巴开源的缓存库:如JStorm、Dubbo等项目中的缓存应用。 9. Java缓存API:如Guava Cache、Spring Cache等的使用方法。 10. 测试:如何编写测试用例来验证缓存功能的正确性和效率。 通过研究这个"cache-demo...

    淘宝技术这十年 文字版

    10. **技术创新与开源文化**:淘宝积极推动技术创新,不仅自身研发了一系列开源项目,如Dubbo、Seata等,还积极参与国际开源社区,推动技术共享和进步。 总的来说,《淘宝技术这十年》是Java开发者和互联网从业者...

    淘宝软件基础设施构建PPT

    除了内部项目的建设,淘宝还积极推动开源技术的发展,通过开放源代码、共享技术成果等方式,与业界共同进步。这一举措有助于吸引更多开发者加入,形成良性循环,促进技术创新和生态系统的完善。 #### 五、小结 ...

    主流云存储系统竞争分析报告.pptx

    它们通过集群扩展来确保性能和可靠性,通常被互联网公司和开源项目采用。例如,Google、亚马逊、雅虎、Facebook、淘宝和人人网等都使用或贡献了此类系统。分布式存储系统可以分为两类:中心化架构和对称架构。 3. ...

    一线头部互联网公司技术架构设计资料合集.zip

    此外,阿里巴巴还推动了开源项目如RocketMQ消息中间件和Ant Design前端框架的发展。 六、百度的技术架构 百度的技术架构以搜索引擎技术为核心,包括PageRank算法、Palo在线分析处理系统和Baidu Cloud Storage。...

    Hadoop与大数据技术大会2012PPT

    在"按需启用高可用,弹性,多租户的Hadoop.pdf"中,可能会介绍如何配置Hadoop集群以提供高可用性,如何动态调整资源以适应变化的工作负载,以及如何在单个集群上支持多个用户或项目(多租户)。 接着是"**Hadoop ...

    tengine介绍.pptx

    2011年,为了满足阿里巴巴集团内部的业务需求,特别是对Nginx核心代码的修改和大量自定义模块的开发,Tengine项目启动并开源。 在Nginx的基础上,Tengine增加了许多针对大型互联网公司的功能和优化,例如: 1. **...

    leveldb实现解析

    淘宝开源存储Tair的底层实现就使用了LevelDB,基于LSM树(Log-Structured Merge-tree)算法实现,适合解决大量数据的存储和快速检索问题。LSM树是用于改善大数据集上的写入吞吐量的一种数据结构。通过延迟更新,将...

Global site tag (gtag.js) - Google Analytics