1  Tair的功能

Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别和我们通常所说的缓存和持久化存储对应。

Tair除了普通Key/Value系统提供的功能,比如get、put、delete以及批量接口外,还有一些附加的实用功能,使得其有更广的适用场景,包括:Version支持

原子计数器

Item支持

1.1  Version支持

Tair中的每个数据都包含版本号,版本号在每次更新后都会递增。这个特性有助于防止由于数据的并发更新导致的问题。

比如,系统有一个value为“a,b,c”,A和B同时get到这个value。

A执行操作,在后面添加一个d,value为“a,b,c,d”

B执行操作添加一个e,value为”a,b,c,e”。

如果不加控制,无论A和B谁先更新成功,它的更新都会被后到的更新覆盖。

Tair无法解决这个问题,但是引入了version机制避免这样的问题。

还是拿刚才的例子,A和B取到数据,假设版本号为10,A先更新,更新成功后,value为”a,b,c,d”,与此同时,版本号会变为11。

当B更新时,由于其基于的版本号是10,服务器会拒绝更新,从而避免A的更新被覆盖。B可以选择get新版本的value,然后在其基础上修改,也可以选择强行更新。

1.2  原子计数器

Tair从服务器端支持原子的计数器操作,这使得Tair成为一个简单易用的分布式计数器

1.3  Item支持

Tair还支持将value视为一个item数组,对value中的部分item进行操作。

比如有个key的value为[1,2,3,4,5],我们可以只获取前两个item,返回[1,2],也可以删除第一个item,还支持将数据删除,并返回被删除的数据,通过这个接口可以实现一个原子的分布式FIFO的队列

2  Tair的内部结构

Tair总体架构图

一个Tair集群主要包括client、configserver和dataserver 3个模块。

Configserver通过和dataserver的心跳(HeartBeat)维护集群中可用的节点,并根据可用的节点,构建数据的在集群中的分布信息(见下文的对照表)。

Client在初始化时,从configserver处获取数据的分布信息,根据分布信息和相应的dataserver交互完成用户的请求。Dataserver负责数据的存储,并按照configserver的指示完成数据的复制和迁移工作。

3  数据的分布

分布式系统需要解决的一个重要问题便是决定数据在集群中的分布策略,好的分布策略应该能将数据均衡地分布到所有节点上

能适应集群节点的变化

Tair采用的对照表方式较好地满足了这两点。

对照表的行数是一个固定值,这个固定值应该远大于一个集群的物理机器数,由于对照表是需要和每个使用Tair的客户端同步的,所以不能太大,不然同步将带来较大的开销。我们在生产环境中的行数一般为1023 。

3.1  对照表简介

下面我们看对照表是怎么完成数据的分布功能的

为了方便,我们这里假设对照表的行数为6。最简单的对照表包含两列,第一列为hash值,第二列为负责该hash值对应数据的dataserver节点信息。

比如我们有两个节点192.168.10.1和192.168.10.2,那么对照表类似:

当客户端接收到请求后,将key的hash值和6取模,然后根据取模后的结果查找对照表。比如取模后的值为3,客户端将和192.168.10.2通信。

3.2  对照表如何适应节点数量的变化

我们假设新增了一个节点——192.168.10.3,当configserver发现新增的节点后,会重新构建对照表

构建依据以下两个原则:数据在新表中均衡地分布到所有节点上。

尽可能地保持现有的对照关系。

更新之后的对照表如下所示:

这里将原本由192.168.10.1负责的4和192.168.10.2负责的5交由新加入的节点192.168.10.3负责。

如果是节点不可用,则相当于上述过程反过来,都是同理

4 多备份的支持

Tair支持自定义的备份数,比如你可以设置数据备份为2,以提高数据的可靠性。

对照表可以很方便地支持这个特性。我们以行数为6,两个节点为例,2个备份的对照表类似:

第二列为主节点的信息,第三列为辅节点信息

在Tair中,客户端的读写请求都和主节点交互,所以如果一个节点不做主节点,那么它就退化成单纯的备份节点。

因此,多备份的对照表在构建时需要尽可能保证各个节点作为主节点的个数相近。

当节点不可用时如果是辅节点,那么configserver会重新为其指定一个辅节点,如果是持久化存储,还将复制数据到新的辅节点上

如果是主节点,那么configserver首先将辅节点提升为主节点,对外提供服务,并指定一个新的辅节点,确保数据的备份数

5 多机架和多数据中心的支持

对照表在构建时,可以配置将数据的备份分散到不同机架或数据中心的节点上

Tair当前通过设置一个IP掩码来判断机器所属的机架和数据中心信息。

比如你配置备份数为3,集群的节点分布在两个不同的数据中心A和B,则Tair会确保每个机房至少有一份数据

假设A数据中心包含两份数据时,Tair会尽可能将这两份数据分布在不同机架的节点上。这可以减少整个数据中心或某个机架发生故障是数据丢失的风险。

作者:JavaEdge

链接:https://www.jianshu.com/p/aa24bf06ed0e

java tair,Tair 简介相关推荐

  1. 双表查询java代码_什么是JDBC?Java数据库连接性简介

    JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...

  2. java 设计模式_快速上手Java设计模式之简介

    阅读本文约需要5分钟 大家好,我是你们的导师,经常看我朋友圈的同学应该知道,我每天会在微信上给大家免费提供以下服务! 1.长期为你提供最优质的学习资源! 2.给你解决技术问题! 3.每天在朋友圈里分享 ...

  3. java.util.concurrent简介

    文章目录 主要的组件 Executor ExecutorService ScheduledExecutorService Future CountDownLatch CyclicBarrier Sem ...

  4. Java GC系列(1):Java垃圾回收简介

    转载自  Java GC系列(1):Java垃圾回收简介 这篇教程是系列第一部分.首先会解释基本的术语,比如JDK.JVM.JRE和HotSpotVM.接着会介绍JVM结构和Java 堆内存结构.理解 ...

  5. java 模块化osgi_OSGi简介–模块化Java

    java 模块化osgi OSGi联盟是这种搁浅的管理机构,它始于1999年.其最初目标是为网络设备创建开放搁浅. 基于此思想,此规范也针对Java引入. Eclipse在Java中是第一个. 他们于 ...

  6. 【Java程序设计】Java基础类库简介

    Java基础类库简介 文章目录 Java基础类库简介 一.Java基础类库介绍 二.语言包(java.lang) (1)数据类型包裹类 1.生成数据类型包裹类对象的方法 2.得到基本数据类型数据的方法 ...

  7. Java虚拟机JVM简介与理解(三)

    Java虚拟机JVM简介与理解(三) 问题背景 PC程序计数器 虚拟机栈 本地方法栈 堆 元空间 方法区 运行时常量池 直接内存 Lyric: 彻底把我囚禁在你的呼吸 问题背景 Java虚拟机JVM简 ...

  8. Java JSON格式简介说明

    转自: Java JSON格式简介说明 下文笔者讲述java中JSON格式的相关简介说明,如下所示: JSON简介说明 JSON(JavaScript Object Notation) 是一种轻量级的 ...

  9. java开发工具包 jdk_什么是JDK? Java开发工具包简介

    java开发工具包 jdk Java开发工具包(JDK)与JVM(Java虚拟机)和JRE(Java运行时环境)一起是Java编程中使用的三个核心技术软件包之一. 重要的是要区分这三种技术,并了解它们 ...

  10. Java开发环境简介及下载

    文章目录 一. Java开发工具:JDK(Java Development Kit) 二.IDE(集成开发环境):Eclipse或IDEA 三. 文本编辑器:Visual Studio Code(VS ...

最新文章

  1. 为iPhone6 设计自适应布局(一)
  2. iOS开发中乱用hook可能导致灾难
  3. 跨站访问如何保证session的正常使用
  4. FreeBSD控制台分辨率调整
  5. 利用python进行数据分析_资料 | 利用Python进行数据分析
  6. Java AIO初探(异步网络IO)
  7. Deltix Round, Spring 2021 D. Love-Hate 随机化 + sos dp(高维前缀和)
  8. 列举网络芳邻的网络资源
  9. 速览EMNLP 2020上录取的知识图谱相关论文
  10. rabbitmq消息的序列化与反序列化
  11. 【ASP.NET 问题】IIS发布网站后出现 “处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误“的解决办法
  12. linux brctl
  13. 计算机声音管理器不见了,电脑Realtek高清晰音频管理器不见了怎么办
  14. 九宫格日记-2013年02月23日
  15. win8: html5+css3+js
  16. Python数据分析(1)----餐饮订单数据分析
  17. cocos2d - JS 物理引擎 - chipmunk
  18. kvmla openvz 评测
  19. EXCEL——逻辑函数,信息类函数
  20. 也谈今日IBM(IBM china/IGSC/ISSC/ETC)

热门文章

  1. 360°可旋转线上沙盘,VR看盘不错过每一个细节
  2. 【shell脚本】——归档文件脚本
  3. 企业如何降低代码泄露的风险?
  4. 百度统计---事件跟踪设置
  5. 新媒体运营的日常工作如何?真的很有趣吗?
  6. 如何把腾讯微博关闭 腾讯微博的关闭方法
  7. CSS布局页面之盒子模型
  8. 利用SPSS进行PSM倾向性评分配对
  9. 远程桌面端口默认是什么?修改远程桌面端口号方法
  10. 登陆QQ手机版,免费拿精品靓号