java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2112|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66105

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

    发表于 2017-3-3 20:41:09 | 显示全部楼层 |阅读模式
    5.2 淘宝Tair
    ' [, Q9 Y4 O  lTair是淘宝开发的一个分布式键/值存储引擎。Tair分为持久化和非持久化两种使
    8 |/ _& v/ R+ A, C用方式:非持久化的Tair可以看成是一个分布式缓存,持久化的Tair将数据存放于磁5 Z  x. ]5 o+ M* M3 D7 @
    盘中。为了解决磁盘损坏导致数据丢失,Tair可以配置数据的备份数目,Tair自动将- [# f; J. \3 g  `1 f+ W" f
    一份数据的不同备份放到不同的节点上,当有节点发生异常,无法正常提供服务的. q/ G, g: ?2 O5 K& o
    时候,其余的节点会继续提供服务。
    5 X/ _) H, k4 r5 I/ J5.2.1 系统架构+ P; B! E' I" T2 }
    Tair作为一个分布式系统,是由一个中心控制节点和若干个服务节点组成。其2 A7 e3 y6 f4 [& c: E
    中,中心控制节点称为Config Server,服务节点称为Data Server。Config Server负责/ R( l$ J7 C5 n  j. T& r
    管理所有的Data Server,维护其状态信息;Data Server对外提供各种数据服务,并以6 e* f4 W* ~5 C0 r6 r
    心跳的形式将自身状况汇报给Config Server。Config Server是控制点,而且是单点,
    ! v7 U" x& W  t0 Q目前采用一主一备的形式来保证可靠性,所有的Data Server地位都是等价的。
    ) B8 a) O; E0 a: s( K; \) z7 r图5-5是Tair的系统架构图。客户端首先请求Config Server获取数据所在的Data
    7 y1 E2 H  _/ y& q" j; gServer,接着往Data Server发送读写请求。Tair允许将数据存放到多台Data Server,以
    ; I3 W+ Y9 T) P' ^; x实现异常容错。
    2 D3 n1 f! c; L) ~+ R! M/ P3 F5 p; h图 5-5 Tair系统架构! q/ u) N) X  p, k% ]2 N' m. e
    5.2.2 关键问题
    % s; E) k: v& Y0 |5 Y(1)数据分布- ?; T& i  X5 Y, c
    根据数据的主键计算哈希值后,分布到Q个桶中,桶是负载均衡和数据迁移的基
    - h+ u% a) a& o3 g本单位。Config Server按照一定的策略把每个桶指派到不同的Data Server上。因为数
    6 _0 S5 e7 z$ o3 E$ a6 \据按照主键计算哈希值,所以可以认为每个桶中的数据基本是平衡的,只要保证桶( C; E" f) N" W7 F: u0 G* A$ p
    分布的均衡性,就能够保证数据分布的均衡性。根据Dynamo论文中的实验结论,Q
    ! ?* e9 a8 ]" |2 C6 ~6 r取值需要远大于集群的物理机器数,例如Q取值10240。/ }- H# @/ o3 Q$ e; |2 \
    (2)容错& J4 \% n) Z+ R  c' M: u
    当某台Data Server故障不可用时,Config Server能够检测到。每个哈希桶在Tair' r/ ^$ w5 \8 }- e9 z
    中存储多个副本,如果是备副本,那么Config Server会重新为其指定一台Data
    . Y& ^5 X- ^/ A$ D2 NServer,如果是持久化存储,还将复制数据到新的Data Server上。如果是主副本,那
    4 {; e1 P- L9 q! H5 W4 i么ConfigServer首先将某个正常的备副本提升为主副本,对外提供服务。接着,再选
    $ p' k( R4 U! C6 C: D择另外一台Data Server增加一个备副本,确保数据的备份数。
    * y4 ?! z2 b6 l& o+ y. v(3)数据迁移
    $ Q& `1 ^. d. k1 v机器加入或者负载不均衡可能导致桶迁移,迁移的过程中需要保证对外服务。* `3 e% x& Z" R2 j6 _8 F% W
    当迁移发生时,假设Data Server A要把桶3、4、5迁移到Data Server B。迁移完成
    # ~/ n; r2 C: ~7 I9 M# K* k- o3 D5 ~前,客户端的路由表没有变化,客户端对3、4、5的访问请求都会路由到A。现在假9 C- L" F+ I8 X) m6 s  A
    设3还没开始迁移,4正在迁移中,5已经迁移完成。那么如果对3访问,A直接服务;, k; H1 o( [' u, r
    如果对5访问,A会把请求转发给B,并且将B的返回结果返回给用户;如果对4访
    ; f/ T* ~$ w/ E  m, s5 k问,由A处理,同时如果是对4的修改操作,会记录修改日志,等到桶4迁移完成时,
    6 t' s( r% H8 ~6 p+ T还要把修改日志发送到B,在B上应用这些修改操作,直到A和B之间数据完全一致迁
    ( f1 J% c: W: {# d0 y移才真正完成。( J# j( b7 `& w: \
    (4)Config Server& k5 R: g. J3 R4 h6 o$ `
    客户端缓存路由表,大多数情况下,客户端不需要访问Config Server,Config9 z7 M6 ]2 a+ D& M" v4 I5 Z
    Server宕机也不影响客户端正常访问。每次路由的变更,Config Server都会将新的配
      U8 P* [7 B6 L3 M9 n置信息推给Data Server。在客户端访问Data Server的时候,会发送客户端缓存的路由
    ( `. R6 s7 J2 N1 g: Y( y$ `表的版本号。如果Data Server发现客户端的版本号过旧,则会通知客户端去Config
    4 u  a$ ^( B+ ]Server获取一份新的路由表。如果客户端访问某台Data Server发生了不可达的情况
    ) `& [! t: |4 H8 @# w; h6 V(该Data Server可能宕机了),客户端会主动去Config Server获取新的路由表。  A/ N* b: A3 P. j7 X  b. _( c
    (5)Data Server1 ^. D2 m* k6 X5 ]" {4 O$ i
    Data Server负责数据的存储,并根据Config Server的要求完成数据的复制和迁移
    6 `$ N- m# J3 I1 {( d% V工作。Data Server具备抽象的存储引擎层,可以很方便地添加新存储引擎。Data" {7 t. K8 o9 o& @5 m& M4 k( ^
    Server还有一个插件容器,可以动态加载/卸载插件,如图5-6所示。
    " e; d, q  I7 O  [' z3 Y( c图 5-6 Data Server内部结构% f/ b+ P3 E. H1 S1 h0 q" {
    Tair存储引擎有一个抽象层,只要满足存储引擎需要的接口,就可以很方便地替
    3 Z& u2 z5 c* S. B* l% }换Tair底层的存储引擎。Tair默认包含两个存储引擎:Mdb和Fdb,此外,还支持! ]' L' X7 V  x: q
    Berkerly DB、Tokyo Cabinet、InnoDB、Leveldb等各种存储引擎。
    1 C- M$ ^0 `* M# i5.2.3 讨论
    , B- A  d' i2 ]; Z7 c; J. s: JAmazon Dynamo采用P2P架构,而在Tair中引入了中心节点Config Server。这种方
    # a, q1 _( k; G: [3 r2 z' p3 r) ^式很容易处理数据的一致性,不再需要向量时钟、数据回传、Merkle树、冲突处理4 |! {7 N" ^" Q
    等复杂的P2P技术。另外,中心节点的负载很低。笔者认为,分布式键值系统的整体* Z) q/ R) w& I' l% Y+ o
    架构应该参考Tair,而不是Dynamo。
    $ Y  b# u3 E1 H4 `当然,Tair最主要的用途在于分布式缓存,持久化存储起步比较晚,在实现细节$ f, d$ V( `" V% E
    上也有一些不尽如人意的地方。例如,Tair持久化存储通过复制技术来提高可靠性,% Z  A4 [7 o$ i6 F9 r3 M, o
    然而,这种复制是异步的。因此,当有Data Server发生故障时,客户有可能在一定时0 q* i8 S) _( p8 K9 X# n. K1 v
    间内读不到最新的数据,甚至发生最新修改的数据丢失的情况。. _" |4 P3 S" ]7 D: R
    5 T! i, m3 p* U6 \/ f& L9 q

    & [# b7 |, T' U2 q' e
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-6 19:44 , Processed in 0.074626 second(s), 35 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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