java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2363|回复: 0

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

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

    [LV.Master]出神入化

    2099

    主题

    3757

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66805

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

    发表于 2017-3-3 20:41:09 | 显示全部楼层 |阅读模式
    5.2 淘宝Tair
    ' Z6 G' j3 ]. H" Z3 e6 B. d) [Tair是淘宝开发的一个分布式键/值存储引擎。Tair分为持久化和非持久化两种使
    + G& o; [+ Y& [5 ^( r0 R7 O5 D用方式:非持久化的Tair可以看成是一个分布式缓存,持久化的Tair将数据存放于磁! R! [  {0 m, Q
    盘中。为了解决磁盘损坏导致数据丢失,Tair可以配置数据的备份数目,Tair自动将
    5 }/ V; c2 ^5 w) ^( n6 ^2 T一份数据的不同备份放到不同的节点上,当有节点发生异常,无法正常提供服务的- I5 v1 u: A' T, ~5 e& S) S' j
    时候,其余的节点会继续提供服务。
    ( m7 q" x9 k7 ^( R  B5.2.1 系统架构
    9 [5 Z% C+ b; @5 W. XTair作为一个分布式系统,是由一个中心控制节点和若干个服务节点组成。其
    # }% @0 v! ?! A# [中,中心控制节点称为Config Server,服务节点称为Data Server。Config Server负责
    6 |7 U8 [/ S6 t1 b, M, ~管理所有的Data Server,维护其状态信息;Data Server对外提供各种数据服务,并以
    9 q" {# N) b. q% y2 f9 O. R心跳的形式将自身状况汇报给Config Server。Config Server是控制点,而且是单点,
    " Q, _# H* p, H* {7 ?- J目前采用一主一备的形式来保证可靠性,所有的Data Server地位都是等价的。
      n+ {; J/ j! c: a; P图5-5是Tair的系统架构图。客户端首先请求Config Server获取数据所在的Data% X2 z8 p6 C' ~( C# k1 [9 f
    Server,接着往Data Server发送读写请求。Tair允许将数据存放到多台Data Server,以
    3 d) L* G# [9 Q. l- x6 X& C4 Y实现异常容错。
    2 ~. A! v8 F/ [1 o3 H0 o图 5-5 Tair系统架构
    9 f4 o+ r' w0 P5 I2 g5 s5.2.2 关键问题2 {# S4 K) x) _, g" `( O$ B, F
    (1)数据分布
    , |" K+ C. R. e1 W* U根据数据的主键计算哈希值后,分布到Q个桶中,桶是负载均衡和数据迁移的基) x2 j# X4 V4 x3 S! k
    本单位。Config Server按照一定的策略把每个桶指派到不同的Data Server上。因为数  D# ]' `- z$ d& u$ Y
    据按照主键计算哈希值,所以可以认为每个桶中的数据基本是平衡的,只要保证桶) i$ u8 _/ b% ?
    分布的均衡性,就能够保证数据分布的均衡性。根据Dynamo论文中的实验结论,Q
    & b/ `! g8 j; S; _7 C& g3 K取值需要远大于集群的物理机器数,例如Q取值10240。
    ! z* A) p0 y1 g5 M& _; r(2)容错! }& ^* s, F' e2 n; b( i' F4 W
    当某台Data Server故障不可用时,Config Server能够检测到。每个哈希桶在Tair1 E5 A$ P6 |2 C" [, V% Y
    中存储多个副本,如果是备副本,那么Config Server会重新为其指定一台Data- o; ?' l2 y5 |8 b3 n
    Server,如果是持久化存储,还将复制数据到新的Data Server上。如果是主副本,那+ E6 V" ~9 _: l8 H% F) h
    么ConfigServer首先将某个正常的备副本提升为主副本,对外提供服务。接着,再选
    4 V2 I% K9 J1 P4 o择另外一台Data Server增加一个备副本,确保数据的备份数。: q2 S" n0 Q9 b' K5 M+ N' z* ?
    (3)数据迁移# H5 \! \  B, u3 e1 L+ Q6 i
    机器加入或者负载不均衡可能导致桶迁移,迁移的过程中需要保证对外服务。
    ' N( I% r+ C* ?- V当迁移发生时,假设Data Server A要把桶3、4、5迁移到Data Server B。迁移完成
    : L7 {- ?6 H) [' _8 l前,客户端的路由表没有变化,客户端对3、4、5的访问请求都会路由到A。现在假
    6 l2 h  n, P4 e# v- B+ [设3还没开始迁移,4正在迁移中,5已经迁移完成。那么如果对3访问,A直接服务;/ N0 b/ G2 ~6 T
    如果对5访问,A会把请求转发给B,并且将B的返回结果返回给用户;如果对4访
    ( z# D( P" p- J7 z8 J8 \$ F8 l问,由A处理,同时如果是对4的修改操作,会记录修改日志,等到桶4迁移完成时,  z; f! W7 }4 W; }* ^$ o
    还要把修改日志发送到B,在B上应用这些修改操作,直到A和B之间数据完全一致迁; E* P# n- R6 E( ~$ x' g/ e1 ~
    移才真正完成。
    6 K5 ~5 h4 ~9 e. @(4)Config Server5 U/ P% e- _1 E) N8 W. ]$ B( t
    客户端缓存路由表,大多数情况下,客户端不需要访问Config Server,Config. O4 u+ }; g& M4 ], \* l0 }
    Server宕机也不影响客户端正常访问。每次路由的变更,Config Server都会将新的配* T, }! ?1 Y+ L& M6 T7 k
    置信息推给Data Server。在客户端访问Data Server的时候,会发送客户端缓存的路由
    * V7 @8 E" u. R- v" E5 |# w4 e表的版本号。如果Data Server发现客户端的版本号过旧,则会通知客户端去Config
    , a9 s; J/ H4 }# R! X; zServer获取一份新的路由表。如果客户端访问某台Data Server发生了不可达的情况, B: t4 X% z! i  D, i
    (该Data Server可能宕机了),客户端会主动去Config Server获取新的路由表。
    / U" V( }3 N# Z. T/ ^+ Z1 A(5)Data Server; I1 J4 z/ l3 O0 l6 U+ v% e
    Data Server负责数据的存储,并根据Config Server的要求完成数据的复制和迁移9 f' e0 j( S0 n4 N0 n+ D( g! o5 Z
    工作。Data Server具备抽象的存储引擎层,可以很方便地添加新存储引擎。Data$ N! G, ?/ _$ C
    Server还有一个插件容器,可以动态加载/卸载插件,如图5-6所示。6 I* K! [  ]! ^4 ?- H, c* B
    图 5-6 Data Server内部结构
    & @% ^: `6 w, y; vTair存储引擎有一个抽象层,只要满足存储引擎需要的接口,就可以很方便地替) C; m6 ?% |+ n. y
    换Tair底层的存储引擎。Tair默认包含两个存储引擎:Mdb和Fdb,此外,还支持* Z* f- }5 m2 p; L
    Berkerly DB、Tokyo Cabinet、InnoDB、Leveldb等各种存储引擎。
    & |: F* z/ [8 l  f3 Q: ~* R$ ?- E. B  w5.2.3 讨论- T8 r  M  @. c- M$ n
    Amazon Dynamo采用P2P架构,而在Tair中引入了中心节点Config Server。这种方8 M: A: S; ?4 q; ]
    式很容易处理数据的一致性,不再需要向量时钟、数据回传、Merkle树、冲突处理
    - e5 ~3 `! u) A# S9 H8 y等复杂的P2P技术。另外,中心节点的负载很低。笔者认为,分布式键值系统的整体& z2 R+ u# M" e' Z
    架构应该参考Tair,而不是Dynamo。9 J: R; x' J  K: Y. H6 x" g) p
    当然,Tair最主要的用途在于分布式缓存,持久化存储起步比较晚,在实现细节
    6 V+ D3 C# H' A4 j& u+ Q6 N* Q! U7 b上也有一些不尽如人意的地方。例如,Tair持久化存储通过复制技术来提高可靠性," i. X$ c( e# `: w5 |' G7 L% k+ R
    然而,这种复制是异步的。因此,当有Data Server发生故障时,客户有可能在一定时
    # F8 r5 M( E2 O% B. @间内读不到最新的数据,甚至发生最新修改的数据丢失的情况。
    + z3 q) ^, m; G" z! J9 q4 V
    # c1 J7 P/ k/ S8 M4 u2 N; ^3 y2 }5 {6 _1 I9 b+ E
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-4-4 10:55 , Processed in 0.117296 second(s), 33 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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