【转】tair与redis比较总结
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比较总结的更多相关文章
- Ehcache/Redis/Tair缓存性能对比[转载]
FW : http://xulingbo.net/?p=434 版权归许令波所有.此处只是一个转载. 后面介绍的不同方式都有测试数据,这些测试数据都是在同一的测试环境下得出的测试结果: 测试机器的配置 ...
- Redis学习一:Nosql入门和概述
现在Redis越来越火,为了适应技术的发展,开始学习一下Redis,在学习Redis之前先学习一下Nosql. 第一部分:入门概述 1.1 互联网时代背景下大机遇,为什么用nosql 1.1.1 单机 ...
- Redis(一):NoSQL入门和概述
NoSQL入门和概述目录导航: NoSQL入门概述 3V+3高 当下的NoSQL经典应用 NoSQL数据模型简介 NoSQL数据库的四大分类 在分布式数据库中CAP原理CAP+BASE NoSQL 入 ...
- Redis入门--进阶详解
Redis NoSql入门和概述 入门概述 互联网时代背景下大机遇,为什么用nosql 1.单机MySQL的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付,在那个时候, ...
- Redis之内存优化
Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要.高效利用Redis内存首先需要理解Redis内存消耗在哪里,如 ...
- Java面试10|数据库相关
1.ID分配单点问题 系统使用一张表的自增来得到订单号,所有的订单生成必须先在这里insert一条数据,得到订单号.分库后,库的数量变多,相应的故障次数变多,但由于单点的存在,故障影响范围并未相应的减 ...
- redis_NoSql入门概述
一.为什么要使用Nosql 今天我们可以通过第三方平台(如:google,facebook)可以很容易的访问和抓取数据.用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加. ...
- 阿里开源的缓存框架JetCache
之前一直在用Spring Cache进行接口数据的缓存,主要是Spring Cache在对具体key缓存失效时间的设置不是很方法,还要自己去扩展,无意中发现了阿里的JetCache.大部分的需求都能满 ...
- redis--基于内存的高速缓存,NoSql的典型代表
NoSql入门和概述 入门概述 为什么要使用NoSql? 1.单机mysql的美好年代 在早些年以前,那时候网站的访问量不大,用单个数据库完全可以应付.而且那个时候,绝大部分都是LAMP架构:Linu ...
随机推荐
- 【COGS2479】 HZOI2016—偏序
http://cogs.pro/cogs/problem/problem.php?pid=2479 (题目链接) 题意 四维偏序. Solution CDQ套CDQ. 细节 第二次分治不能直接按照mi ...
- 解题:JSOI 2011 柠檬
题面 显然分出来的每段两端颜色相同,否则把一边归给旁边的答案不变劣,于是可以$O(n^2)$地dp了:设$dp[i]$表示到第$i$个位置为止的最优解,$dp[i]=dp[j]+a[i]*(s[j]- ...
- C++中this指针
原文 . this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自 ...
- linux 系统文件类型、系统安装时间、系统启动时间、系统运行时间、设置及显示时间、系统时间和硬件时间
系统文件类型: 1) $mout 2) df -l:仅列出本地文件系统:-h (--human-readable):-T:文件系统类型 $df -lhf 3) file -s (--special-f ...
- nodejs读取json文件,写入mongodb数据库
最近又一点时间,开始使用mongodb存储json模型文件,然后可以实现模型文件的在线编辑和管理.今天上午实现了json文件入库的代码,如下: var fs=require("fs" ...
- [整理]定义但未初始化赋值的局部变量与OXCCCCCCCC
开发环境 : win7 32bit ,VS2010,先看一段C代码: #include <stdio.h> int main(){ int x; //-858993460 printf(& ...
- 【LibreOJ】#6354. 「CodePlus 2018 4 月赛」最短路 异或优化建图+Dijkstra
[题目]#6354. 「CodePlus 2018 4 月赛」最短路 [题意]给定n个点,m条带权有向边,任意两个点i和j还可以花费(i xor j)*C到达(C是给定的常数),求A到B的最短距离.\ ...
- 蓝桥杯 问题 1110: 2^k进制数 (排列组合+高精度巧妙处理)
题目链接 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2 ...
- 对package.json的理解和学习
一.初步理解 1. npm安装package.json时 直接转到当前项目目录下用命令npm install 或npm install --save-dev安装即可,自动将package.json中 ...
- Python 入门基础11 --函数基础4 迭代器、生成器、枚举类型
今日目录: 1.迭代器 2.可迭代对象 3.迭代器对象 4.for循环迭代器 5.生成器 6.枚举对象 一.迭代器: 循环反馈的容器(集合类型) 每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的 ...