* Redis
http://www.redis.net.cn/
http://doc.redisfans.com/
* Tair
http://code.taobao.org/p/tair/wiki/index/
适应场景
Redis
适用
- 需要使用复杂数据结构(map, set),map/set中元素很多(1000以上)
- 延迟敏感服务
不适用
- 数据量超过600GB(数据太多,全内存太浪费资源)
- 需要多语言客户端支持
Tair
适用
- 不能容忍数据丢失
- 数据量大,内存放不下的服务
不适用
- 使用复杂数据结构(map/set),map/set中元素很多(1000以上)
详细对比
1.访问模式
具体参数 | Redis | Redis Cluster | Tair |
---|---|---|---|
支持Value大小 | 理论上不超过1GB(建议不超过1MB) | 理论上不超过1GB(建议不超过1MB) | 256M(更大value还需要测试) |
支持Value结构 | byte[]/list/map/set | byte[]/list/map/set | (1)kv/map/list (2)支持big_list(list无长度限制) (3)支持创建schema,cmd query |
支持的总数据量 | 1000+instance | scale out,理论上总数据量无限制 | |
适宜的读写比 | 存内存型,均适合 | 存内存型,均适合 | 支持多引擎,适宜各种比例的读写。读多写少(mdb+leveldb),读少写多(leveldb)。 |
数据是否可改写 | Y | Y | Y |
是否支持Scan/Range Query | 不支持,并且不支持merge operations | 支持scan; 支持range query |
|
CAP | CP | 用户可配置,CP或AP | |
语言支持 | 主流语言 | 主流语言,目前java、ruby可用 | php,restful,java,c/c++ |
数据自动过期 | 支持 | 支持 | 支持 |
2.访问性能
具体参数 | Redis | Redis Cluster | Tair |
---|---|---|---|
点写latency | 虚机上平均1~2ms | 虚机上平均1~2ms | 5~8ms(write through),1ms左右(write back) |
点写吞吐率 | 一个instance 5w,单机器整体性能根据cpu来决定 | 一个instance 5w,单机器整体性能根据cpu来决定 | 受限网卡带宽瓶颈(100MB),单机纯内存8w~10w qps(key+value=1k) |
批量写吞吐率 | 受限网卡带宽瓶颈 | 受限网卡带宽瓶颈 | 受限网卡带宽瓶颈(100MB),单机纯内存8w ~10w batch/s(batch=10keys,key+value=100,batch_size=1k) |
读latency | 虚机上平均1~2ms | 虚机上平均1~2ms | 同机房内存1ms,磁盘5-8ms(延迟不会随单机数据容量增加而增加) |
3.可运维性
具体参数 | Redis | Redis Cluster | Tair |
---|---|---|---|
可扩展性(自动扩容、在线扩容) | 支持水平扩展 | 在不停读和写的服务下自动扩容 | |
可用性(是否有单点、数据迁移/单机出错时是否会有服务中断、过载保护、慢查询保护) | 使用keepalived或者官方哨兵来保持高可用 | 无单点 | (1)无单点 (2)不中断服务 (3)有过载保护 (4)无慢查询保护,但有慢查询递归树监控 |
可靠性(如何防止数据丢失,包括机器断电、硬盘损毁等情形下) | 0~N个数据slave备份(实际使用情况基本是0个备份) | 0~N个数据slave备份(实际使用情况基本是0个备份) | (1)多机数据冗余 (2)断电数据不丢失,重放redo log (3)数据完整性crc校验(防止磁盘损坏) |
数据可靠性 | 用户可选是否开启持久化 | 用户可选是否开启持久化 | 强,有持久存储,一般不会丢失数据 |
多副本 | 支持(副本平时可读) | 支持(副本平时可读) | 支持(副本平时不提供读写) |
副本一致性 | 弱 | 弱 | 可根据业务需求配置强一致/弱一致 |
持久化 | 支持。持久化的数据是用于重启后的数据恢复。Redis是一个内存数据库,无论是RDB还是AOF,都只是其保证数据恢复的措施。 | 支持。持久化的数据是用于重启后的数据恢复。Redis是一个内存数据库,无论是RDB还是AOF,都只是其保证数据恢复的措施。 | 支持 |
对业务混合部署的支持(性能隔离) | 进程级隔离(特殊处理可以到机器间隔离) | 进程级隔离(特殊处理可以到机器间隔离) | 硬软隔离: (1)支持不同group的业务混步 (2) 支持同一个group业务混步(通过名字空间隔离),支持网络和内存的隔离。 |
对访问权限的可控制性 | web操作管理员授权.api操作支持鉴权和非鉴权两种模式 | web操作管理员授权.api操作支持鉴权和非鉴权两种模式 | 机器粒度的白名单管理 |
实现语言、代码量 | JAVA,java客户端14000行、管理中心22000行 | JAVA,java客户端14000行、管理中心22000行 | 核心代码c++,10w行左右 |
个人介绍:
高广超:多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能、可扩展的互联网架构。