Tair
架构
configServer作用,dataServer作用
configServer(以下称CS)
CS中维护了一个对照表,存储数据桶和服务节点的关系。key的hash和桶长度取模,决定数据存储到哪个桶。比如现在有两个DS节点,172.11.12.1,172.11.12.2,设置桶大小为6,映射表关系如下
数据(1,q),(11,w),(2,e)分别存到了1,5,2号桶,也就是节点172.11.12.2存两条记录,172.11.12.1存一条记录。
tair支持自定义备份数量,备份数量不同,CS中的映射表也会有差别。备份数量为2,第一列还是hash值,第二列是主节点,第三列为备份节点。客户端都是直接和主节点进行交互。当辅节点不可用,CS会再指定一个新的辅节点,主节点不可以,会讲辅节点升级为主,同时再指定一个辅节点
在tair中,CS和一般的控制中心不太一样,CS在首次将配置下发到客户端后,客户端会缓存一份配置,直至下一次配置发生变化,再去CS中拉配置,所以在配置无变化时,即使CS挂掉,也不会影响服务。CS会把对照表的版本信息下发到dataServer,客户端读数据时会将自己持有的CS版本号带过去,dataServer如果判断版本不一致,会通知客户端从新获取配置。
dataServer(以下称DS)
DS 对外提供各种数据服务,并以心跳的形式将自身状况汇报给configServer;所有的DS地位都是等价的。
主流缓存对比
Tair和RedisCluster都是集群模式,Redis是单机缓存系统,所以在应用场景中,更多的是对Tair和RedisCluster进行对比,看哪一个更适合。
| Redis | RedisCluster | Tair | |
|---|---|---|---|
| 支持Value大小 | 理论上不超过1GB(建议不超过1MB) | 理论上不超过1GB(建议不超过1MB) | 256M |
| 支持Value结构 | byte[]/list map/set/string |
byte[]/list map/set/string |
(1)kv/map/list (2)支持big_list(list无长度限制) (3)支持创建schema,cmd query |
| 支持的总数据量 | 1000+instance | 理论上总数据量无限制 | |
| 适宜的读写比 | 存内存型,均适合 | 存内存型,均适合 | 支持多引擎,适宜各种比例的读写。读多写少(mdb+leveldb),读少写多(leveldb) |
| 数据是否可改写 | Y | Y | Y |
| 是否支持Scan/Range Query | 不支持,并且不支持merge operations | 支持Scan/Range Query | |
| CAP | CP | 用户可配置,CP或AP | |
| 数据自动过期 | 支持 | 支持 | 支持 |
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232180.html原文链接:https://javaforall.net
