java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2262|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66345

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

    发表于 2017-3-3 20:41:09 | 显示全部楼层 |阅读模式
    5.2 淘宝Tair
    . a" W  f+ w; E6 ATair是淘宝开发的一个分布式键/值存储引擎。Tair分为持久化和非持久化两种使* F" o' ~! q" d. `
    用方式:非持久化的Tair可以看成是一个分布式缓存,持久化的Tair将数据存放于磁
    " D- ~# l- D$ H+ l- f# h盘中。为了解决磁盘损坏导致数据丢失,Tair可以配置数据的备份数目,Tair自动将
    , V1 V. l( {/ D  y% n) p. h一份数据的不同备份放到不同的节点上,当有节点发生异常,无法正常提供服务的6 j# s/ _- t* @% C
    时候,其余的节点会继续提供服务。. d0 l2 n; B& {9 y6 C
    5.2.1 系统架构
    7 m. ]- r% p& E, o7 hTair作为一个分布式系统,是由一个中心控制节点和若干个服务节点组成。其
    $ u; _5 \; N% X( W# E中,中心控制节点称为Config Server,服务节点称为Data Server。Config Server负责! x# S/ t. A- D- b& _  |
    管理所有的Data Server,维护其状态信息;Data Server对外提供各种数据服务,并以
    : b+ `) x" x  G2 c8 B5 L心跳的形式将自身状况汇报给Config Server。Config Server是控制点,而且是单点,
    7 Y6 r& Y1 Z7 k0 w) m$ T* S目前采用一主一备的形式来保证可靠性,所有的Data Server地位都是等价的。$ f8 w$ g1 r* g' K3 m+ x. q+ ]# a. ]
    图5-5是Tair的系统架构图。客户端首先请求Config Server获取数据所在的Data; L/ U; C$ M1 Q; E1 e0 L
    Server,接着往Data Server发送读写请求。Tair允许将数据存放到多台Data Server,以  b, F0 v4 b$ \# C( C
    实现异常容错。
    & d- V1 f- }& J5 S图 5-5 Tair系统架构
    ) ?) s. s5 a2 |% p' [3 r6 u5.2.2 关键问题- M. Y0 F# \% ?0 }
    (1)数据分布
    + j& H: l- Z4 s& d; D; h根据数据的主键计算哈希值后,分布到Q个桶中,桶是负载均衡和数据迁移的基
    ) w1 a) U7 V9 T$ u. u本单位。Config Server按照一定的策略把每个桶指派到不同的Data Server上。因为数- Z& ]- k2 I( s% S' t3 w7 R8 ?8 _$ x
    据按照主键计算哈希值,所以可以认为每个桶中的数据基本是平衡的,只要保证桶0 N; b( v; U3 A+ j
    分布的均衡性,就能够保证数据分布的均衡性。根据Dynamo论文中的实验结论,Q
    / z+ z& J+ J8 h& f1 b取值需要远大于集群的物理机器数,例如Q取值10240。+ ^& x1 |3 ]* Z: U$ H/ b
    (2)容错
    : d1 A3 m' ^9 r- V: ]9 u当某台Data Server故障不可用时,Config Server能够检测到。每个哈希桶在Tair7 z; P" c+ _! J* B. \( a' L" p3 U
    中存储多个副本,如果是备副本,那么Config Server会重新为其指定一台Data" Q% |8 U" t2 R4 N! i) e+ j
    Server,如果是持久化存储,还将复制数据到新的Data Server上。如果是主副本,那0 J0 x+ U, @$ G! A' e: |* e
    么ConfigServer首先将某个正常的备副本提升为主副本,对外提供服务。接着,再选" H3 y3 ^1 `0 C6 i2 `9 Y7 |4 H
    择另外一台Data Server增加一个备副本,确保数据的备份数。
    1 `! `5 j. N1 q9 P3 l(3)数据迁移7 N5 v% `8 ]7 `0 I
    机器加入或者负载不均衡可能导致桶迁移,迁移的过程中需要保证对外服务。
    4 P" y+ Z  u( Y5 K当迁移发生时,假设Data Server A要把桶3、4、5迁移到Data Server B。迁移完成3 s1 @% K/ L9 G: f$ x: b* w0 W# N
    前,客户端的路由表没有变化,客户端对3、4、5的访问请求都会路由到A。现在假
    + S4 C7 v" `: p3 R# W( C设3还没开始迁移,4正在迁移中,5已经迁移完成。那么如果对3访问,A直接服务;% ?1 G+ y/ t( N& }7 l2 D$ A
    如果对5访问,A会把请求转发给B,并且将B的返回结果返回给用户;如果对4访) k2 P# A7 J# e" |
    问,由A处理,同时如果是对4的修改操作,会记录修改日志,等到桶4迁移完成时,
    & `; b. D& `4 }. \, i( \; {还要把修改日志发送到B,在B上应用这些修改操作,直到A和B之间数据完全一致迁# X3 o) N0 w( ]8 s& T9 H; K) ]
    移才真正完成。
    , n% d3 `1 {( r! V- `(4)Config Server$ H5 V* T' s% o
    客户端缓存路由表,大多数情况下,客户端不需要访问Config Server,Config' ]( I; ^( z2 [& Q6 `+ g* N
    Server宕机也不影响客户端正常访问。每次路由的变更,Config Server都会将新的配- T) R* D  B9 K- l
    置信息推给Data Server。在客户端访问Data Server的时候,会发送客户端缓存的路由
    4 U; J. A- e" s0 o7 t表的版本号。如果Data Server发现客户端的版本号过旧,则会通知客户端去Config) L' N# W$ Z! r- I; ]
    Server获取一份新的路由表。如果客户端访问某台Data Server发生了不可达的情况
    ( t& z" ~6 k: ^( m' g+ H7 A4 L" m$ ~(该Data Server可能宕机了),客户端会主动去Config Server获取新的路由表。9 f# x+ ]: u: k# @$ `, k$ }* k+ A
    (5)Data Server; w! M: z4 v  C+ a9 K6 F2 W
    Data Server负责数据的存储,并根据Config Server的要求完成数据的复制和迁移2 [: s  j1 e4 a
    工作。Data Server具备抽象的存储引擎层,可以很方便地添加新存储引擎。Data8 c! q. M9 |$ c9 i0 f* y7 P7 N
    Server还有一个插件容器,可以动态加载/卸载插件,如图5-6所示。. G0 k% O0 J' b3 A9 D3 ^
    图 5-6 Data Server内部结构
    3 P6 W, f7 _7 p/ MTair存储引擎有一个抽象层,只要满足存储引擎需要的接口,就可以很方便地替( R6 W$ Y8 U8 l  Z# o( k* C
    换Tair底层的存储引擎。Tair默认包含两个存储引擎:Mdb和Fdb,此外,还支持
    6 B6 j# J" o7 e- _% k. s, HBerkerly DB、Tokyo Cabinet、InnoDB、Leveldb等各种存储引擎。  i+ Q/ A# b6 @$ b9 j
    5.2.3 讨论
    / r0 j9 z7 n/ k2 s5 ~" @Amazon Dynamo采用P2P架构,而在Tair中引入了中心节点Config Server。这种方
    / x9 @. M( j6 i1 ?- v( d式很容易处理数据的一致性,不再需要向量时钟、数据回传、Merkle树、冲突处理
    $ w5 @  W& Y: @等复杂的P2P技术。另外,中心节点的负载很低。笔者认为,分布式键值系统的整体, e- u; l3 F$ H9 P" g
    架构应该参考Tair,而不是Dynamo。
    ' Z& P0 l  F$ R4 g# X( @当然,Tair最主要的用途在于分布式缓存,持久化存储起步比较晚,在实现细节
    ) P- f2 e3 Q9 n1 x$ s2 r, w上也有一些不尽如人意的地方。例如,Tair持久化存储通过复制技术来提高可靠性,
    8 W9 t! K9 h$ m2 ]- f9 Z然而,这种复制是异步的。因此,当有Data Server发生故障时,客户有可能在一定时
    ; [, `4 R: }+ s' T2 Y- k间内读不到最新的数据,甚至发生最新修改的数据丢失的情况。  h+ k: [7 |3 A1 C" E0 d& ]

    + Q7 ]* M, l5 i! w$ E, ~; I2 y9 n) p4 r5 j8 R6 R, f# H/ T& s5 K
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-21 20:47 , Processed in 0.305620 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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