java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2362|回复: 0

《大规模分布式存储系统》 第5章 分布式键值系统【5.2】

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2097

    主题

    3755

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66793

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2017-3-3 20:41:09 | 显示全部楼层 |阅读模式
    5.2 淘宝Tair
    8 a- u) B: t1 S# \* |% ?3 wTair是淘宝开发的一个分布式键/值存储引擎。Tair分为持久化和非持久化两种使
    # M$ Q: {+ ?' d# m- d- n6 v用方式:非持久化的Tair可以看成是一个分布式缓存,持久化的Tair将数据存放于磁
    1 U7 H* R# i  @$ M盘中。为了解决磁盘损坏导致数据丢失,Tair可以配置数据的备份数目,Tair自动将
    & N' E! T6 D% }4 ^6 D一份数据的不同备份放到不同的节点上,当有节点发生异常,无法正常提供服务的
    # z5 [+ r8 j+ Y4 ]; A' g4 l& U5 l时候,其余的节点会继续提供服务。
    + i& ?5 z4 _# z  e) c5.2.1 系统架构6 C: c* Y+ U, D) F
    Tair作为一个分布式系统,是由一个中心控制节点和若干个服务节点组成。其
    " C1 ]0 c- E. Y, X' b中,中心控制节点称为Config Server,服务节点称为Data Server。Config Server负责
    # D' l5 a" j" ^) H: _8 Y) _管理所有的Data Server,维护其状态信息;Data Server对外提供各种数据服务,并以
    2 L0 U% D" V$ ]) v心跳的形式将自身状况汇报给Config Server。Config Server是控制点,而且是单点,
    ! U* W. D+ h1 ~目前采用一主一备的形式来保证可靠性,所有的Data Server地位都是等价的。  m2 A9 }% ^/ D! Z0 e
    图5-5是Tair的系统架构图。客户端首先请求Config Server获取数据所在的Data
    % E, S# b& z3 G% K' WServer,接着往Data Server发送读写请求。Tair允许将数据存放到多台Data Server,以
    5 [2 `/ |1 ]6 T3 H, h2 f3 ?! v* n1 t1 d! V$ A实现异常容错。
    & S- t5 U3 J# z$ S, c/ m9 ?/ [图 5-5 Tair系统架构! ]( S/ S6 i6 Y. V2 f: ~
    5.2.2 关键问题6 l! ~6 Y4 k+ |2 M2 J
    (1)数据分布
    ! U; g/ a; _9 a4 Z& t8 T根据数据的主键计算哈希值后,分布到Q个桶中,桶是负载均衡和数据迁移的基2 ^+ K) C9 A7 y9 l! ]
    本单位。Config Server按照一定的策略把每个桶指派到不同的Data Server上。因为数9 d$ y/ o' q8 t: y0 o+ Y
    据按照主键计算哈希值,所以可以认为每个桶中的数据基本是平衡的,只要保证桶
    + `/ B2 \& N! n分布的均衡性,就能够保证数据分布的均衡性。根据Dynamo论文中的实验结论,Q
    7 s# d2 C$ q1 T取值需要远大于集群的物理机器数,例如Q取值10240。* t# x4 i9 t0 p' |/ g2 q
    (2)容错- j, W" E3 ~8 [/ F- j6 }
    当某台Data Server故障不可用时,Config Server能够检测到。每个哈希桶在Tair2 o1 }8 B! y+ U% i
    中存储多个副本,如果是备副本,那么Config Server会重新为其指定一台Data5 `6 I' c, n( W8 P0 a5 O
    Server,如果是持久化存储,还将复制数据到新的Data Server上。如果是主副本,那8 V3 P& w1 K6 G9 k6 w  L: N
    么ConfigServer首先将某个正常的备副本提升为主副本,对外提供服务。接着,再选% @9 G1 C" L3 `6 c/ |1 d
    择另外一台Data Server增加一个备副本,确保数据的备份数。3 D2 @3 z7 k. c2 r/ Z! |3 w
    (3)数据迁移, B; G5 o% Q  f, p
    机器加入或者负载不均衡可能导致桶迁移,迁移的过程中需要保证对外服务。7 e' O" S; P, g9 j7 Y, V
    当迁移发生时,假设Data Server A要把桶3、4、5迁移到Data Server B。迁移完成
    / L! s- G: l( T) z" t前,客户端的路由表没有变化,客户端对3、4、5的访问请求都会路由到A。现在假
    ! ?* P' m6 l1 C9 S7 C设3还没开始迁移,4正在迁移中,5已经迁移完成。那么如果对3访问,A直接服务;7 z# W6 H; s- V1 y% V( J3 `  m
    如果对5访问,A会把请求转发给B,并且将B的返回结果返回给用户;如果对4访
      {2 c# y- p9 f3 s- a问,由A处理,同时如果是对4的修改操作,会记录修改日志,等到桶4迁移完成时,
    # U# c. a* d' n, i; X$ A& Q还要把修改日志发送到B,在B上应用这些修改操作,直到A和B之间数据完全一致迁
    / w1 X4 Y$ Q5 q7 {) @移才真正完成。1 |/ F! L+ X7 F6 r. T
    (4)Config Server" l  m& |3 ~% F( p' P
    客户端缓存路由表,大多数情况下,客户端不需要访问Config Server,Config% ^4 d$ G) @4 I# p- A0 i
    Server宕机也不影响客户端正常访问。每次路由的变更,Config Server都会将新的配1 ?: o, d$ f0 }# R/ O
    置信息推给Data Server。在客户端访问Data Server的时候,会发送客户端缓存的路由$ ~$ T. }" S' z. x
    表的版本号。如果Data Server发现客户端的版本号过旧,则会通知客户端去Config% u& q1 J2 @4 T2 H
    Server获取一份新的路由表。如果客户端访问某台Data Server发生了不可达的情况6 ^) r9 N* h8 v, P  X% f3 m$ Z
    (该Data Server可能宕机了),客户端会主动去Config Server获取新的路由表。& ^4 f6 A7 r, u8 A$ X
    (5)Data Server
    & s& E; p* [5 AData Server负责数据的存储,并根据Config Server的要求完成数据的复制和迁移/ E9 P. r5 [  v  r+ e
    工作。Data Server具备抽象的存储引擎层,可以很方便地添加新存储引擎。Data
    & a/ x6 u% h8 U1 a! kServer还有一个插件容器,可以动态加载/卸载插件,如图5-6所示。/ E, C* H. ^5 j
    图 5-6 Data Server内部结构
    % ?6 D7 o0 D9 L1 VTair存储引擎有一个抽象层,只要满足存储引擎需要的接口,就可以很方便地替
    5 ]2 H3 B3 C$ V换Tair底层的存储引擎。Tair默认包含两个存储引擎:Mdb和Fdb,此外,还支持
    / Y) k7 l' a, h; N$ c' t' RBerkerly DB、Tokyo Cabinet、InnoDB、Leveldb等各种存储引擎。
    & L5 U) ]' \( B9 V4 Q5.2.3 讨论/ r7 a# ~# Q4 W9 Q- n9 n) L
    Amazon Dynamo采用P2P架构,而在Tair中引入了中心节点Config Server。这种方
    ) e2 I: H* v( L) D& \" q* e7 E式很容易处理数据的一致性,不再需要向量时钟、数据回传、Merkle树、冲突处理" `/ {7 |$ T7 X
    等复杂的P2P技术。另外,中心节点的负载很低。笔者认为,分布式键值系统的整体0 Z1 m' Z3 W. R. a4 m) b; D
    架构应该参考Tair,而不是Dynamo。
    # j4 K' i2 Z/ @# x当然,Tair最主要的用途在于分布式缓存,持久化存储起步比较晚,在实现细节
    " S+ a& ]- J4 d( v- g4 B上也有一些不尽如人意的地方。例如,Tair持久化存储通过复制技术来提高可靠性,
    0 ?; e# Y. y2 Z# Y然而,这种复制是异步的。因此,当有Data Server发生故障时,客户有可能在一定时
    % ]' @# k& p# j0 x, Q4 B间内读不到最新的数据,甚至发生最新修改的数据丢失的情况。, I; P9 Q2 E7 `7 A
    ( T- W; V, `+ x9 Q' _$ h5 a# `

    ' u* {/ P- ]2 A) f7 \: n
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2025-4-2 17:11 , Processed in 0.123199 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表