TAIR

资料百科

Tair是一景茶牛木个Key/Value结构数据的解决方案厂几钢使必难很,它默认支持基于内存和文件的两种存储方式,分别与缓苦落确小条存和持久化存储对应。 TAIR的功能是get、put、delete以及批量接口。

  • 外文名称 TAIR
  • 属于 Key/Value结构数据的解决方案
  • 基于 内存和文件的两种存储方式
  • 功能 get、put、delete以及批量接口

功能

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

  Version支持

  原来自子计数器

  Item支持

Version支持

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

  比如,系统有一个value为"a,b,c",阳实厚层府滑府下差思A和B同时get到这个va父数举矛以景lue。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,然后在其基础上修改,也可以选择强行更新。

原子计数器

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

Item支持

  Tair还支持将value视为一个item数组,对value中的部分item进行操作。比如有个k类准牛油刘画算节洋ey的value为[1,2,3,4,5], 可以只获取前两个item,返回[1,2],也可以删除第一个item,还支持将数据删除,并返回被删除的数据,通过这测棉消逐西边下杨水给个接口可以实现一个原子的分布 式FIFO的队列。

结构特点

  一个Tai360百科r集群主要包括client、configserver和dataserver 3个模块。Configserver通过和dataserv刑职市比降易顺拿苦er的心跳(HeartBeat)维护集群中可用的节点,并根据可用的节点,构建数据的在集群 中的分布信息(见下文的对照表)。Client在初始化时,从confi香高表结刘望治耐包们gserver处获称说倒历需取数据的分布信息,根据分布信息和相应的dataserver 交互完成用户的请求。Dataserver负责数据的存储,并按照configserver的指示完成数据的频普抗字套木酒搞复制和迁移工作。

轻量士座左冲

  从Tair的整体架构图上看,configserver很类似传统分布式集群中的中心节点。整个集群服务都依赖于configserver的正常工作。

  但Tair的configserver却是一个突口久轻量级的中心节点,在大部分时候,configserver不可用对集群的服务以的已海保季联教影渐击是不造成影响的。

  Tair用户和configserver的交互主要是为了获取数据分布的对照表,当client获取到对照表后,会cache这张表,然后通过查这 张表决定数据存储的节点,所以请求不需要和configserver交互,这使得Tair对外的服务不依赖configserver,所以它不是传统意义 岁改团上的中心节点。

  configserver维护的对照表有一个版本号,每次新星演沙龙生成表,该版本号都会增加。当的济顶认究员半秋面探有数据节点状态发生变化(比如新增节点或者有节点不可用了)时功送们含,configserver会根据当前可用的节点重新生成对照表,并通过数据节点的心跳,将新表同步给数据节点。

  当客户端请求数据节点时,数据节点每次都会将自己的对照表的版本号放入response中返回给客户端,客户端接收到response后,会将数据害热功件节点返回的版本号和自己的子木卷还版本号比较,如果不相同,则主动和configserver通信,请求新的对照表。

  所以客户端也不需要和configserver保持心跳,以便及时地更新对照表。这使得在正常的情况下,客户端不需要和configserver通信,即使configserver不可用了,也不会对整个集群的服务造成大的影响。

  仅有当configserver不可用,此时有客户端需要初始化,那么客户端将取不到对照表信息,这将使得客户端无法正常工作。

内部结构

  DataServer负责数据的物理存储,并根据configserver构建的对照表完成数据的复制和迁移工作。DataServer具备抽象的存储引擎层,可以很方便地添加新存储引擎。DataServer还有一个插件容器,可以动态地加载/卸载插件。

  抽象的存储引擎层 Tair的存储引擎有一个抽象层,只要满足存储引擎需要的接口,便可以很方便地替换Tair底层的存储引擎。比如可以很方便地将bdb、tc甚至MySQL作为Tair的存储引擎,而同时使用Tair的分布方式、同步等特性。

  Tair默认包含两个存储引擎:mdb和fdb。

  mdb是一个高效的缓存存储引擎,它有着和memcached类似的内存管理方式。mdb支持使用share memory,这使得在重启Tair数据节点的进程时不会导致数据的丢失,从而使升级对应用来说更平滑,不会导致命中率的较大波动。

  fdb是一个简单高效的持久化存储引擎,使用树的方式根据数据key的hash值索引数据,加快查找速度。索引文件和数据文件分离,尽量保持索引文件在内存中,以便减小IO开销。使用空闲空间池管理被删除的空间。

  自动的复制和迁移 为了增强数据的安全性,Tair支持配置数据的备份数。比如可以配置备份数为3,则每个数据都会写在不同的3台机器上。得益于抽象的存储引擎层,无论是作为cache的mdb,还是持久化的fdb,都支持可配的备份数。

  当数据写入一个节点(通常称其为主节点)后,主节点会根据对照表自动将数据写入到其他备份节点,整个过程对用户是透明的。

  当有新节点加入或者有节点不可用时,configserver会根据当前可用的节点,重新build一张对照表。数据节点同步到新的对照表时,会自 动将在新表中不由自己负责的数据迁移到新的目标节点。迁移完成后,客户端可以从configserver同步到新的对照表,完成扩容或者容灾过程。整个过 程对用户是透明的,服务不中断。

  插件容器 Tair还内置了一个插件容器,可以支持热插拔插件。

  插件由configserver配置,configserver会将插件配置同步给各个数据节点,数据节点会负责加载/卸载相应的插件。

  插件分为request和response两类,可以分别在request和response时执行相应的操作,比如在put前检查用户的quota信息等。

  插件容器也让Tair在功能方便具有更好的灵活性。

标签:
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:yongganaa@126.com

评论留言

我要留言

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:yongganaa@126.com