java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2320|回复: 0

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

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

    [LV.Master]出神入化

    2062

    主题

    3720

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66592

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

    发表于 2017-3-3 20:41:09 | 显示全部楼层 |阅读模式
    5.2 淘宝Tair' k( `% a; R7 E
    Tair是淘宝开发的一个分布式键/值存储引擎。Tair分为持久化和非持久化两种使
    " J, ]& Y6 O5 e) j5 z用方式:非持久化的Tair可以看成是一个分布式缓存,持久化的Tair将数据存放于磁
    6 y# T, k3 B  u4 z盘中。为了解决磁盘损坏导致数据丢失,Tair可以配置数据的备份数目,Tair自动将
    4 k) L& |2 p) d+ b9 k一份数据的不同备份放到不同的节点上,当有节点发生异常,无法正常提供服务的2 f8 F3 M& a1 W  P; k& c( q* Z* T4 W
    时候,其余的节点会继续提供服务。; w2 C2 q  n: t3 f7 E
    5.2.1 系统架构) y2 o5 V- r, _! J( L
    Tair作为一个分布式系统,是由一个中心控制节点和若干个服务节点组成。其- ~! H  \6 _1 Z% c7 Q" ?
    中,中心控制节点称为Config Server,服务节点称为Data Server。Config Server负责8 A9 G9 x7 O- n( d% A. e/ R+ U
    管理所有的Data Server,维护其状态信息;Data Server对外提供各种数据服务,并以2 [3 z* J1 `( \. e
    心跳的形式将自身状况汇报给Config Server。Config Server是控制点,而且是单点,$ g* p; ~6 r" q' l, c- n9 E" B% y. ?) r
    目前采用一主一备的形式来保证可靠性,所有的Data Server地位都是等价的。$ P2 F6 v6 O4 {& m  N/ D: e
    图5-5是Tair的系统架构图。客户端首先请求Config Server获取数据所在的Data6 E  Y# w; G8 S; w- c% k2 d7 [
    Server,接着往Data Server发送读写请求。Tair允许将数据存放到多台Data Server,以4 O+ Y/ m7 f! f, n2 x" w+ t/ e
    实现异常容错。: O8 m$ o, b2 K( W5 e
    图 5-5 Tair系统架构! a3 D; n! d' G# R) T/ B5 b# f
    5.2.2 关键问题
    6 w* n1 V' h7 B2 s, l" V, K(1)数据分布+ n* m5 _' L5 c5 P, N* }8 a' p- B
    根据数据的主键计算哈希值后,分布到Q个桶中,桶是负载均衡和数据迁移的基& Z5 ^" y, \* \$ ~
    本单位。Config Server按照一定的策略把每个桶指派到不同的Data Server上。因为数
    6 y) x; u7 l( a- V7 a据按照主键计算哈希值,所以可以认为每个桶中的数据基本是平衡的,只要保证桶
    2 a2 k7 l: i! Y* C' O分布的均衡性,就能够保证数据分布的均衡性。根据Dynamo论文中的实验结论,Q0 }. A/ C4 J6 M( S; E4 F( T( @
    取值需要远大于集群的物理机器数,例如Q取值10240。! h7 H2 y+ d/ T% ^
    (2)容错
    & W2 Y4 H+ Y" E8 H当某台Data Server故障不可用时,Config Server能够检测到。每个哈希桶在Tair" h( ~0 q: ]% Z1 G5 k' c1 p
    中存储多个副本,如果是备副本,那么Config Server会重新为其指定一台Data0 v& z- M' N8 G7 O
    Server,如果是持久化存储,还将复制数据到新的Data Server上。如果是主副本,那( {3 ~: X/ y; F! C# r
    么ConfigServer首先将某个正常的备副本提升为主副本,对外提供服务。接着,再选0 x  n/ g- y0 G
    择另外一台Data Server增加一个备副本,确保数据的备份数。. L/ P  s1 k* c8 N) \  v
    (3)数据迁移; ^, ^) G1 }3 D+ E
    机器加入或者负载不均衡可能导致桶迁移,迁移的过程中需要保证对外服务。3 `* I; w, d3 P6 O9 ]0 K
    当迁移发生时,假设Data Server A要把桶3、4、5迁移到Data Server B。迁移完成
    " `- ?6 b5 ?+ h( K7 Q* L4 E前,客户端的路由表没有变化,客户端对3、4、5的访问请求都会路由到A。现在假
    - P/ f) [6 n; I& e- S设3还没开始迁移,4正在迁移中,5已经迁移完成。那么如果对3访问,A直接服务;& C% O2 U! @. ?" g( R1 z2 z1 {, ^
    如果对5访问,A会把请求转发给B,并且将B的返回结果返回给用户;如果对4访! _! |0 N4 Q3 g* o
    问,由A处理,同时如果是对4的修改操作,会记录修改日志,等到桶4迁移完成时,
    ) }9 e8 l( i6 z  p; g* h8 Y  ]还要把修改日志发送到B,在B上应用这些修改操作,直到A和B之间数据完全一致迁9 |& I8 U" Q5 x0 X
    移才真正完成。
      n% Z# r' Z  Q. F$ o(4)Config Server
    ' u. x$ @. g6 P+ U/ o. I+ I/ b客户端缓存路由表,大多数情况下,客户端不需要访问Config Server,Config
    # a9 A3 a6 H. a! O1 v( O8 ^; N; |) rServer宕机也不影响客户端正常访问。每次路由的变更,Config Server都会将新的配
    7 k& y8 ^8 U( V1 C置信息推给Data Server。在客户端访问Data Server的时候,会发送客户端缓存的路由' Y& P; S5 s& K" ^5 y7 E
    表的版本号。如果Data Server发现客户端的版本号过旧,则会通知客户端去Config' V' n. ^7 D& S+ u* n
    Server获取一份新的路由表。如果客户端访问某台Data Server发生了不可达的情况
    ! @. }8 r, W* F" V9 |# P  l$ E(该Data Server可能宕机了),客户端会主动去Config Server获取新的路由表。' N9 s( b% ]) f4 z3 O5 U
    (5)Data Server: l8 x- I9 U* c: q' O
    Data Server负责数据的存储,并根据Config Server的要求完成数据的复制和迁移" o5 G8 }  @5 A  J% y; C: c
    工作。Data Server具备抽象的存储引擎层,可以很方便地添加新存储引擎。Data' H6 Q0 Z5 O+ j+ y
    Server还有一个插件容器,可以动态加载/卸载插件,如图5-6所示。( f, n) L. U# k- H9 d  y
    图 5-6 Data Server内部结构1 c  H  Q; v6 q: D
    Tair存储引擎有一个抽象层,只要满足存储引擎需要的接口,就可以很方便地替
    " W1 Q4 O4 p7 V- ?6 O# k换Tair底层的存储引擎。Tair默认包含两个存储引擎:Mdb和Fdb,此外,还支持& q& p! W/ R) s8 w/ Y
    Berkerly DB、Tokyo Cabinet、InnoDB、Leveldb等各种存储引擎。% D0 T: w6 I. R, e1 l
    5.2.3 讨论5 R% `- T0 o' @7 ?) z/ q1 ^- v: u. q
    Amazon Dynamo采用P2P架构,而在Tair中引入了中心节点Config Server。这种方
    0 @$ x- I. K, V  ?8 o* A4 F$ n6 A9 x式很容易处理数据的一致性,不再需要向量时钟、数据回传、Merkle树、冲突处理5 c- u6 v2 b7 G8 F2 r3 g
    等复杂的P2P技术。另外,中心节点的负载很低。笔者认为,分布式键值系统的整体$ u  p* W% k  B) R" v* K
    架构应该参考Tair,而不是Dynamo。" [- B7 U: C* |( s/ a
    当然,Tair最主要的用途在于分布式缓存,持久化存储起步比较晚,在实现细节# k" s$ C1 k/ {  N6 X+ \
    上也有一些不尽如人意的地方。例如,Tair持久化存储通过复制技术来提高可靠性,' a; J7 B+ g$ m& g7 ]
    然而,这种复制是异步的。因此,当有Data Server发生故障时,客户有可能在一定时. T0 q8 }0 |+ U" G
    间内读不到最新的数据,甚至发生最新修改的数据丢失的情况。
    % l8 V- P6 z7 j4 M2 `1 B* H( y5 o1 ]! R3 t) q5 l! P2 x" L

      u# F) l) I/ d* a$ Y0 B
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-2-23 11:44 , Processed in 1.330492 second(s), 34 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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