tair:这个系统进行的很顺利,淘宝在很早就开始使用缓存的技术了,esi解决了页面端静态片段的缓存,tbstore的分布式算法实现
tair (编辑注:Tair是由淘宝网自主开发的Key/Value结构数据存储系统。)
TFS的开发,让淘宝的你们不是承诺3年不收费么?收广告费不是收费么?后来我们的竞争对手又推波助澜,公关公司和圈子里各路大侠上蹿下跳,甚至同行搞了个“一键搬家”的功能来收纳我们的会员。一时之间,舆论哗然,各种矛头都指了过来。为了收场,我们又一次在论坛里面让用户投票决定产品是否下线,同“我的淘宝”一样,以悲剧收场。也如同“我的淘宝”一样,下线后,一拨尝到甜头的卖家说,这么好的功能怎么没有了?(直到后来yahoo中国合并过来之后,开发了淘宝直通车,才以类似的产品形态满足了这部分需求)
虽然招财进宝失败了,但这个项目中对技术的探索更加深入,这里面用到了用户行为追踪、Ajax等。其中有一个技术的细节非常经典,淘宝商品详情页面每天的流量在10亿以上,里面的内容都是放在缓存里的,做招财进宝的时候,我们要给卖家显示他的商品被浏览的次数(见下根据保存的key,对key进行hash算法,取得hash值,再对hash值与总cache服务器数据取模。然后根据取模后的值,找到服务器列表中下标为此值cache服务器。由java client api封装实现,应用无需关心;这点和memecached的实现方案完全一致。
tbstore有一个优点,这也是它的弱点,它的存储是基于berkeley DB的,而Berkeley DB在数据量超过内存的时候,就要往磁盘上写数据了,所以说它是可以做持久化存储的。但是一旦往磁盘写数据,作为缓存的性能就大幅度下降。
这时又有一个项目,推动了淘宝在缓存方面的技术提升。在2007年,我们把淘宝的用户信息独立出来,形成一个中心系统uic(user information center),因为淘宝所有的功能都要依赖于用户信息,所以这个模块必须单独拿出来,不然以后系统无法扩展了。把UIC拿出来以后,应用系统访问UIC,UIC访问数据库取得用户信息,粗粗算一下,每天要取几十亿的用户信息,直接查询数据库的话,显然数据库要崩溃的,这里必须要用缓存。于是多隆为UIC专门写了一个缓存系统,取名叫做tdbm。tdbm抛弃了Berkeley DB的持久功能,数据全部存放在内存中。到2009年,多隆又参考了memcached的内存结构,改进了tdbm的集群分布方式,在内存利用率和吞吐量方面又做了大幅提升,推出了tdbm2.0系统。
由于tdbm和tbstore的数据接口和用途都很相似,开发团队把二者合并,推出了淘宝自创的kv缓存系统——tair。tair包括缓存和持久化两种存储功能。tair 作为一个分布式系统,是由一个中心控制节点和一系列的服务节点组成。我们称中心控制节点为config server,服务节点是data server。config server 负责管理所有的data server,维护data server的状态信息。data server 对外提供各种数据服务,并以心跳的形式将自身状况汇报给config server。 config server是控制点,而且是单点,目前采用一主一备的形式来保证其可靠性。所有的 data server 地位都是等价的。tair的架构
目前,tair支撑了淘宝几乎所有系统的缓存信息。Tair已开源,地址code.taobao.org。
在创造了TFS和tair之后,整个系统的架构可以如下所示:
在这个时候搜索引擎iSearch也进行了一次升级,之前的搜索引擎是把数据分到多台机器上,但是每份数据只有一份,现在是每份数据变成多份,整个系统从一个单行的部署变成了矩阵。能够支撑更大的访问量,并且做到很高的可用性。
作者:赵超
文章来源:赵超的博客
本文地址:https://www.pizijiang.com/tougao/101603.html
举报投诉邮箱:253000106@qq.com