1. Tair总述

1.1 系统架构

一个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),而不需要知道内部节点的情况。

1.1.1 ConfigServer的功能

1) 通过维护和dataserver心跳来获知集群中存活节点的信息

2) 根据存活节点的信息来构建数据在集群中的分布表。

3) 提供数据分布表的查询服务。

4) 调度dataserver之间的数据迁移、复制。

1.1.2 DataServer的功能

1) 提供存储引擎

2) 接受client的put/get/remove等操作

3) 执行数据迁移,复制等

4) 插件:在接受请求的时候处理一些自定义功能

5) 访问统计

1.1.3 InvalidServer的功能

1) 接收来自client的invalid/hide等请求后,对属于同一组的集群(双机房独立集群部署方式)做delete/hide操作,保证同一组集群的一致。

2) 集群断网之后的,脏数据清理。

3) 访问统计。

1.1.4 client的功能

1) 在应用端提供访问Tair集群的接口。

2) 更新并缓存数据分布表和invalidserver地址等。

3) LocalCache,避免过热数据访问影响tair集群服务。

4) 流控

2.tair的使用场景

2.1 tair 的使用场景

2.1.1 Tair缓存使用的场景

1. 数据可以以key/value的形式存储

2. 数据可以接受丢失

3. 访问速度要求很高

4. 单个数据大小不是很大,一般在KB级别

5. 数据量很大,并且有较大的增长可能性

6. 数据更新不频繁

2.1.2 Tair持久化适用的场景

1. 数据可以以key/value的形式存储

2. 数据需要持久化

3. 数据量很大,并且有较大的增长可能性

4. 单个数据大小不是很大,一般在KB级别

5. 数据的读写比例较高

2.2 不适Tair用的场景

1.对数据有查询需求,比如对key的模糊查询,或者根据value反查询key等

2.单条数据很大

3.读写比例很低

3.tair与redis关系

3.1 功能对比

 产品比较项

 Tair

REDIS

开源情况

完全开源

完全开源

使用语言

服务器端C++;客户端支持C、JAVA、PHP等

ANSI C语言编写 ,提供多种语言(C/C++/JAVA/PHP等)的API 

分布式

支持

目前redis的3.0已经支持分布式式,特点是主从的方式支持即主从库方式添加代理进行管理。3.0版本处于测试版

集群

支持

不支持,3.0测试版支持

动态扩展

支持

不支持,3.0测试版支持

持久化

可配,fdb方式实现持久化

支持,快照及aof方式都支持

效率

mdb 较高,fdb稍次

较高

容错

支持,数据在写入主节点后,会异步同步到辅节点;如果主节点不可用,则辅节点会自动接管为主节点;当有节点不可用时,能自动复制数据,保证数据的备份数。

支持,主从节点互为备份

缓存过期移除策略

支持

支持

缓存数据方式

持久化和非持久化两种,前者和memcached类似的缓存数据方式。

支持,一是 key/value,一是关系数据库。

吞吐量

每秒高达66000次(mdb),fdb时,吞吐量减半

每秒高达60000次

KEY/VALUE

key :1024个字符;value: 1M个字节。

key :254个字符;value: 高达1G个字节。

单点故障

已解决,通过备份

存在

内存管理

支持

支持

其他数据结构

支持redis的内存存储结构。支持k/v,list,hash,set等数据结构。

本身支持持k/v,list,hash,set,sortedset等数据结构

跨机房管理

支持

不支持

多集群管理

支持

不支持

是否支持副本

支持

不支持

使用情况

国内淘宝网 在最大规模的使用

国内新浪微博,以前曾出现过故障

 

 

 

3.2 关系总结

tair及redis集成关系:Tair是淘宝开源的分布式KV缓存系统,内部将功能模块化,抽离出底层存储细节,可以接入不同的存储引擎。redis是一个开源的、高效的key-value存储,提供了strings、hashs、lists、sets、sorted sets等多种高级数据结构。redis作为Tair的存储引擎接入,称为rdb,rdb从redis继承了丰富的操作,包括list、hash、sorted set、set(与mdb相比,list不再那么ugly)。

总结:rdb:是tair集成从redis继承了丰富的操作,包括list、hash、sorted set、set(与mdb相比,list不再那么ugly),Tair将Redis的存储部分抽离出来,作为非持久化的存储引擎rdb(目前代码里面没有rdb代码,即没有开源);

4 tair与redis集群管理

4.1 redis集群介绍

首先增加一个代理端,作用是检测处理应用请求,如果是读代理会尝试在tair及redis两个系统查找数据,返回给应用;如果是写数据代理直接将数据写入tair。

4.1.1 目前readis系统

4.1.2 redis目前测试版本的结构

4.2 tair 目前现状 

4.2.1 tair支持的集群一个机房

支持副本,管理结点是主从,数据结点是多个,不同数据结点之间没有主从关系,有副本。

4.2.2 tair双机房单集群单份

双机房单集群单备份数是指,该Tair集群部署在两个机房中(也就是该Tair集群的机器分别在两个机房), 数据存储份数为1, 该类型集群部署示意图如下所示。数据服务器(Dataserver)分布在两个机房中,他们都属于同一集群

4.2.3 双机房独立集群是指,在两个机房中同时部署2个独立的Tair集群,这两个集群没有直接关系。下图是一个典型的双机房独立集部署示意图,可以看到,cm3和cm4各有一个完整的tair集群(2个configserver+多个dataserver)。图中还多了一个invalidserver的角色, invalidserver接收客户端的invalid或者hide请求后,会对各机房内的集群进行delete或者hide操作,以此保障Tair中的数据和后端数据源保持一致的。

4.2.3  双机房单集群双份

双机房单集群双份,是指一个Tair集群部署在2个机房中,数据保存2份,并且同一数据的2个备份不会放在同一个数据服务器上。根据数据分布策略的不同,还可以将同一份数据的不同备份分布到不同的机房上。该类型的集群部署方式与双机房单集群单份数据的部署方式一样。其不同之处,数据保存份数不一样。该类型集群部署方式示意图如下图所示,数据服务器分别部署在两个不同的机房里,所有的数据服务器都被相同的配置服务器管理,在逻辑上,他们构成一个独立的集群。

4.2.4  双机房主备集群

这种部署方式中,存在一个主集群和一个备份集群,分别在两个机房中。如下图所示,不妨假设CM3中部署的是主集群,CM4中部署的是备份集群。那么,在正常情况下,用户只使用主集群,读写数据都与主集群交互。主备集群会自动同步数据(不需要业务去更新两边),保证两个机房数据的最终一致性。当一个机房发生故障后,备集群会自动切换成主集群,提供服务,保证系统可用性。

5 tair与redis比较总结

5.1 tair优势

a.在分布式集群支持方面tair支持副本,支持多种集群结构,如:一机房一个集群、双     机房单集群单份、双机房独立集群、双机房单集群双份、双机房主备集群;

b.对于读写性能根据结点添加对线性上升,原因是各个结点之间是没有关系,节点增多相应性能提升。

c.高可用比较强,任何小于副本数结点挂掉,不会影响正常业务。

e.淘宝在多个实际应用场景应用,满足不同业务需求。

F.支持跨机房数据分布。

5.2 tair弱势 

a.在单节点的性能比较方面,redis是性能比tair高大概1/5

b.redis目前研究人员比较少,社区不是很活跃。

5.3 redis优势

a.在单节点的性能比较方面,redis是性能比tair高大概1/5

b.redis目前研究人员比较多,社区比较活跃。

c.在支持多种数据结构方面tair没有redis支持的全面。

5.4 redis弱势

a.目前发布版不支持分布式,测试版支持,测试版对分布式支持比较弱,是用主备支持高可能,没有副本。

b.容灾性相比tair弱,原因是redis的分布式不支持多副本。

【转】tair与redis比较总结的更多相关文章

  1. Ehcache/Redis/Tair缓存性能对比[转载]

    FW : http://xulingbo.net/?p=434 版权归许令波所有.此处只是一个转载. 后面介绍的不同方式都有测试数据,这些测试数据都是在同一的测试环境下得出的测试结果: 测试机器的配置 ...

  2. Redis学习一:Nosql入门和概述

    现在Redis越来越火,为了适应技术的发展,开始学习一下Redis,在学习Redis之前先学习一下Nosql. 第一部分:入门概述 1.1 互联网时代背景下大机遇,为什么用nosql 1.1.1 单机 ...

  3. Redis(一):NoSQL入门和概述

    NoSQL入门和概述目录导航: NoSQL入门概述 3V+3高 当下的NoSQL经典应用 NoSQL数据模型简介 NoSQL数据库的四大分类 在分布式数据库中CAP原理CAP+BASE NoSQL 入 ...

  4. Redis入门--进阶详解

    Redis NoSql入门和概述 入门概述 互联网时代背景下大机遇,为什么用nosql 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付,在那个时候, ...

  5. Redis之内存优化

    Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要.高效利用Redis内存首先需要理解Redis内存消耗在哪里,如 ...

  6. Java面试10|数据库相关

    1.ID分配单点问题 系统使用一张表的自增来得到订单号,所有的订单生成必须先在这里insert一条数据,得到订单号.分库后,库的数量变多,相应的故障次数变多,但由于单点的存在,故障影响范围并未相应的减 ...

  7. redis_NoSql入门概述

    一.为什么要使用Nosql 今天我们可以通过第三方平台(如:google,facebook)可以很容易的访问和抓取数据.用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加. ...

  8. 阿里开源的缓存框架JetCache

    之前一直在用Spring Cache进行接口数据的缓存,主要是Spring Cache在对具体key缓存失效时间的设置不是很方法,还要自己去扩展,无意中发现了阿里的JetCache.大部分的需求都能满 ...

  9. redis--基于内存的高速缓存,NoSql的典型代表

    NoSql入门和概述 入门概述 为什么要使用NoSql? 1.单机mysql的美好年代 在早些年以前,那时候网站的访问量不大,用单个数据库完全可以应付.而且那个时候,绝大部分都是LAMP架构:Linu ...

随机推荐

  1. 扩展中国剩余定理学习笔记+模板(洛谷P4777)

    题目链接: 洛谷 题目大意:求同余方程组 $x\equiv b_i(mod\ a_i)$ 的最小正整数解. $1\leq n\leq 10^5,1\leq a_i\leq 10^{12},0\leq ...

  2. 获取C++类成员虚函数地址

    1.GCC平台 GCC平台获取C++成员虚函数地址可使用如下方法[1]: class Base{ int i; public: virtual void f1(){ cout<<" ...

  3. POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流)

    POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for ...

  4. AGC 018E.Sightseeing Plan——网格路径问题观止

    原题链接 鸣谢:AGC 018E.Sightseeing Plan(组合 DP) 本蒟蒻认为,本题堪称网格路径问题观止. 因为涵盖了不少网格路径问题的处理方法和思路. 一句话题意: 给你三个矩形. 三 ...

  5. js实现数字键盘

    效果图: 1.引入jquery.js文件 2.css样式 <style type="text/css"> #numberkeyboard { border: 1px s ...

  6. Object和泛型

    这俩东东呢实现的效果是一样的,但是它们俩的效率不一样,原理也不一样.直接说结论吧,泛型比Object好用,效率高.因为Object有一个装箱和拆箱的过程,倘若是很多的数据那效率就低到不行了,而泛型没有 ...

  7. python Flask post 数据 输出

    #!/usr/bin/env python # -*- coding: utf-8 -*- from flask import Flask from flask import request from ...

  8. thinkphp自学笔记

    什么是MVC? M:编写模型类-对数据进行操作 用作数据处理 V:编写HTML文件-将页面显示出来 网页视图 C:编写类文件 用作逻辑处理 ThinkPHP的MVC的特点是什么: 它比较灵活并不依赖 ...

  9. html5 canvas缩放变换

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. html5 canvas多个图像旋转

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...