淘宝网宗岱谈高性能KV系统Tair

个人简介 宗岱,2008年加入淘宝,主要从事分布式存储系统的开发,TFS/Tair的主要开发和维护者。

   

1. 大家好,我们现在是在淘宝技术嘉年华的会议现场,很荣幸能够邀请到淘宝Tair系统的开发负责人宗岱,宗岱您好,首先先请您做一下自我介绍。

我是淘宝核心系统的宗岱,现在主要负责Tair的开发,我曾经做过一些分布式KV存储、缓存分布式数据库之类的系统,一般比较喜欢看一些系统结构,或者云计算相关方面的资料。

   

2. 那您最近主要在做一些什么样的工作?

我最近主要是在负责Tair开发,包括Tair现有存储引擎的优化,Tair新的特性的开发之类的。

   

3. 那么下面能否请您简单的介绍一下Tair系统是干什么用的,它是在一个什么样的技术背景下诞生的?

Tair其实就是一个Key Value的存储系统,他分为了非持续化和持久化两种,分别对应的内存和磁盘,内存就是一般是做缓存来用的,持久化的话是放在磁盘上,一般我们可以设置为多个备份,这样数据不会丢失。当时开发这个Tair是因为在互联网上,其实很多操作其实就是一个简单的KV而已,像用传统的数据库MySQL之类的话,这个相对来说是比较重。而且如果访问量特别高的话,传统数据库是很难支撑的,相应的我们就开发了一个这种缓存类的系统,在MySQL前端加了一个KV的缓存,之后我们就往后做,去掉MySQL这个比较庞大的表结构,我们就在下面也是做了一层持久化的KV结构。

   

4. 那么这个Tair同其他的一些KV系统,存在那些技术优势呢?

Tair跟其他的KV系统相比来说最大的优势可能是在一个,它天生就是一个分布式的,像以前Memcache刚出来的时候,可能是一个单机版本的,因为需要在客户端去做数据路由之类的。我们Tair的话,天然就是一个分布式的。我们的存储引擎是一个可以抽离出来的,本身我们也可以自己开发成为引擎,我们也可以把那些开源KV的存储引擎直接插入进来,像我们现有的Tair就用了Tokyo Cabinet,跟BDB,直接加入到我们Tair中使用了。这样的话把这些开源的KV系统加入进来,我们直接可以使用他们多点,基本上我们只需要加一下接口层的代码就可以使用了。

   

5. 那么那个能否请您再解释一下Tair中的Version一个支持的功能?

Tair中的Version是这样的,我们每存一个数据进去,就有个version的概念,之后对这个Key进行一次更新的话,版本号就会加一,这个是用来做什么呢?我们可以有效的防止并发更新的情况,比如一个应用它存一个Key进去,当前的值是1,那么这个应用有两个客户端又同时访问了这个值,比如AB两个客户端去访问了这个值,他们都把这个值取回来是1。AB这两个应用又去改了这个值,比如A想把这个值改成2,B想把这个值改成3。AB这两个请求可能到服务端是有一个先后的,最后的结果可能是一个并不确定的值了,有可能是2,有可能是3。

   

6. 两个有可能是冲突的。

对,我们加入这个版本概念的时候,比如它值是1的时候,版本号是10,那么A、B取回来的时候,当时都是1。去修改的时候,把那个版本号10给带回到服务端了,A先到了那个服务端,A去把它改成了2,同时在服务端版本号加了1,变成了11了。之后B又到来了,B如果这时候想把它改成3,但是它原来取回的版本号是10,这时候服务端会拒绝掉他的更新请求的,这个时候就可以由应用方自己控制该怎么处理,是要把他强制更新掉呢,还是再取一次,再更新,还是直接把这次更新放弃掉,这个就可以直接由业务层去控制了。

   

7. 那么在Tair中呢,数据分布均衡还有一个集群节点变化的需求,是如何满足的?

数据分布均衡的话,是我们通过一个称之为对照表的概念来做的,我们会把所有的数据分在1023个桶上面去,这个每一个桶都会对应着我们集群中的某一个节点,相应来说这个桶的数目1023,会远远大于我们一个集群中的节点数目的。这样的话一个节点会负责很多个桶。我们那个集群会有一个Config Server的模块,他会根据那个集群中所有数据节点信息,就是所有的数据节点都会上报给Config Server,那么Config Server知道我这个集群中有多少个数据节点,那么他就会把这1023个桶均分到所有的数据节点上去。如果有新节点加入,或者有节点Down的话,这个也是通过数据节点跟Config Server的心跳来发现的,Config Server发现有机器节点退出或者加入了,那么他就要重新把这个对照表重新建立过,如果有新加入节点的话,那么就可以把原来那些节点上负责的桶挪一部分到新节点上去。那么我们所有做的策略就是尽量第一个保证所有桶上节点数是一样的,第二个是就是迁移,要迁移一些桶到新节点上去,迁移的量是最小的。

   

8. 那么目前在淘宝内部,Tair应用主要是应用在哪些产品上,还有应用的一些情况是怎么样的?

在淘宝内部的话,Tair基本上是一个大规模的应用了,其实你从淘宝登陆,就是登陆的Session,它是存放在Tair中的。访问商品的像页面、商品的价格、标题、属性,那些都是存放在Tair中的。再往后交易的信息,交易的定单也是存在Tair中的,整个交易线,包括淘江湖、广告、开放平台都是广泛使用了Tair,我们大概现在的服务器总数可能有接近四百台,其中有三百多台是做缓存用的,还有几十台是做持久化使用的,总记录数有七十多亿条,每秒大概的访问数有一百多万次,大概就是这样一个规模。

   

9. 那么现在在国内有一些社区,也在学习Tair的一些使用。那么在学习Tair的时候呢,主要存在那些障碍,这些障碍应该如何解决,你有没有一些建议?

第一个是我们之前做Tair的时候,相对来说文档还是缺乏的,这一块我们一直在往上补;第二个就是我们基本上是会建一些论坛,我们会把他们其中问的问题会统一起来去解答。可能还有人会直接发邮件给我们Tair的开发人员之类的,通过点对点直接去沟通,直接去解决这个问题。

   

10. 那除了文档上的这种,还有一些其他的建议吗,比如说开发中的一些问题,或者说使用中的一些问题?

开发中的问题的话,其实整个部署、整个接口都还是比较很明确的,主要是照着我们Taocode上的布置的话,基本上都是没问题的。

   

11. 在未来Tair一个发展的计划是什么样的?

未来Tair的发展计划,我们第一个会把持久化的存储引擎做得更高效、更容易一些,第二个因为现有的业务需求越来越多样化,针对业务部门可能我们会去开发一些那种特定的存储引擎。因为像一个业务部门,他们有一些东西要存进来,他们拿了一个通用的存储引擎去存的成本往往比他们自己开发一个特定的存储引擎的成本还要高,所以说我们这方面可能要跟业务方沟通的更多,尽量去开发更多的存储引擎,我们同样也会开源出来其他的,国内的社区国外的都可以使用。

   

12. 好的,非常感谢宗岱接受我们的采访。谢谢。

谢谢。

你可能感兴趣的:(淘宝网宗岱谈高性能KV系统Tair)