java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2360|回复: 0

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

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

    [LV.Master]出神入化

    2096

    主题

    3754

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66788

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

    发表于 2017-3-3 20:41:09 | 显示全部楼层 |阅读模式
    5.2 淘宝Tair
    5 D; H5 ~- s  u2 gTair是淘宝开发的一个分布式键/值存储引擎。Tair分为持久化和非持久化两种使3 p& X; ]/ W* U7 D7 F1 m* w
    用方式:非持久化的Tair可以看成是一个分布式缓存,持久化的Tair将数据存放于磁0 j2 \0 ~' n. {: \- Z
    盘中。为了解决磁盘损坏导致数据丢失,Tair可以配置数据的备份数目,Tair自动将# W3 Z; u/ T: _# d# Q! }6 z" K4 F
    一份数据的不同备份放到不同的节点上,当有节点发生异常,无法正常提供服务的& G3 L! H, A1 q6 R: _& E
    时候,其余的节点会继续提供服务。$ N$ r5 b- I) F/ `; i" X* h
    5.2.1 系统架构# L4 ?1 c8 r, {3 H( i- f
    Tair作为一个分布式系统,是由一个中心控制节点和若干个服务节点组成。其
    # g( P0 p8 R2 o5 u+ ?中,中心控制节点称为Config Server,服务节点称为Data Server。Config Server负责5 ?  {  a" c* |; N' L' y* w
    管理所有的Data Server,维护其状态信息;Data Server对外提供各种数据服务,并以
    4 l) K$ Y  k8 N9 H5 f8 C心跳的形式将自身状况汇报给Config Server。Config Server是控制点,而且是单点,6 t6 z# p& A; u( Q$ c
    目前采用一主一备的形式来保证可靠性,所有的Data Server地位都是等价的。
    . H9 ]' u3 w" K8 u& [图5-5是Tair的系统架构图。客户端首先请求Config Server获取数据所在的Data; {* c+ r! J+ ?# P" G2 O+ t
    Server,接着往Data Server发送读写请求。Tair允许将数据存放到多台Data Server,以9 S; O( h1 o) h' b
    实现异常容错。
    8 [  s/ d) S7 e: u* R# _图 5-5 Tair系统架构
    8 y+ A1 f9 M  T0 R) o5.2.2 关键问题
    9 }2 _6 D9 H# O6 D# F& D) Z/ m(1)数据分布$ q" R5 o1 d9 h
    根据数据的主键计算哈希值后,分布到Q个桶中,桶是负载均衡和数据迁移的基0 v9 k& i( ]6 `
    本单位。Config Server按照一定的策略把每个桶指派到不同的Data Server上。因为数( n9 ?7 ]" m- Q7 t: Q* P+ l, P. \3 r
    据按照主键计算哈希值,所以可以认为每个桶中的数据基本是平衡的,只要保证桶* r- X# F* A+ L
    分布的均衡性,就能够保证数据分布的均衡性。根据Dynamo论文中的实验结论,Q6 V2 t, r: H8 C
    取值需要远大于集群的物理机器数,例如Q取值10240。! a+ Y3 T# _, i; p/ X- o1 [
    (2)容错
      H0 F1 J1 p! N7 b. Z' j当某台Data Server故障不可用时,Config Server能够检测到。每个哈希桶在Tair, `$ n7 e4 g0 s3 B3 ?2 @5 {
    中存储多个副本,如果是备副本,那么Config Server会重新为其指定一台Data
    1 k, O7 o% y1 ~' a0 [Server,如果是持久化存储,还将复制数据到新的Data Server上。如果是主副本,那
    5 }( N1 C9 [3 Z2 J$ t& |. O  |" b$ ?) O么ConfigServer首先将某个正常的备副本提升为主副本,对外提供服务。接着,再选
    8 g  _/ `2 J% D0 d5 m择另外一台Data Server增加一个备副本,确保数据的备份数。& ]3 T8 t: a1 u( k
    (3)数据迁移
    # r0 q. h% s2 R机器加入或者负载不均衡可能导致桶迁移,迁移的过程中需要保证对外服务。
    $ L6 ?0 ?4 Y& {$ ^当迁移发生时,假设Data Server A要把桶3、4、5迁移到Data Server B。迁移完成( j. C- A0 W2 O7 ?3 q
    前,客户端的路由表没有变化,客户端对3、4、5的访问请求都会路由到A。现在假
    * k: ^8 T! _: a6 [2 g! `设3还没开始迁移,4正在迁移中,5已经迁移完成。那么如果对3访问,A直接服务;
    / V" |& d8 ?4 z如果对5访问,A会把请求转发给B,并且将B的返回结果返回给用户;如果对4访) b% j& x, V1 ^+ e# k! ~
    问,由A处理,同时如果是对4的修改操作,会记录修改日志,等到桶4迁移完成时,9 D# u/ ^2 W8 H! x9 T0 q% Y
    还要把修改日志发送到B,在B上应用这些修改操作,直到A和B之间数据完全一致迁
    4 ~& e6 W) p# }& }; L: \. A移才真正完成。* E6 C6 u. C& S: ~4 ^# Y0 f
    (4)Config Server
    , [- P9 L, k/ y, ^% g1 H# ^9 q+ k客户端缓存路由表,大多数情况下,客户端不需要访问Config Server,Config& W9 u# T6 d+ t7 h" Q8 d
    Server宕机也不影响客户端正常访问。每次路由的变更,Config Server都会将新的配0 S0 ]0 S$ `9 h$ j, o
    置信息推给Data Server。在客户端访问Data Server的时候,会发送客户端缓存的路由8 k& @; |- e3 L9 f
    表的版本号。如果Data Server发现客户端的版本号过旧,则会通知客户端去Config$ W& ?% y9 v! q6 k' M
    Server获取一份新的路由表。如果客户端访问某台Data Server发生了不可达的情况, R' }  ~) G, U
    (该Data Server可能宕机了),客户端会主动去Config Server获取新的路由表。
    7 |5 {, e& F" [( p4 P, N(5)Data Server
    ; w! v% {+ P5 \5 ~% L8 |1 wData Server负责数据的存储,并根据Config Server的要求完成数据的复制和迁移) ?$ I1 Q+ \" c* ]; `
    工作。Data Server具备抽象的存储引擎层,可以很方便地添加新存储引擎。Data
    7 X$ [5 \4 @: C& oServer还有一个插件容器,可以动态加载/卸载插件,如图5-6所示。. I) T: j9 z0 l: N3 E* y0 j
    图 5-6 Data Server内部结构
    9 Y/ i) L5 r* l/ o# Z1 T/ r1 g" n: gTair存储引擎有一个抽象层,只要满足存储引擎需要的接口,就可以很方便地替
    + |- f! l1 r$ [, j$ U0 O换Tair底层的存储引擎。Tair默认包含两个存储引擎:Mdb和Fdb,此外,还支持: ?" z6 t3 Y6 |: B5 Z0 ^
    Berkerly DB、Tokyo Cabinet、InnoDB、Leveldb等各种存储引擎。$ i% X4 `( l1 U: k" f
    5.2.3 讨论
    ' x- ?  Q3 \& B9 E) V9 \$ v. @& CAmazon Dynamo采用P2P架构,而在Tair中引入了中心节点Config Server。这种方4 Q. F+ K' P/ o. C& y2 a
    式很容易处理数据的一致性,不再需要向量时钟、数据回传、Merkle树、冲突处理* T8 s5 ^; |: _4 A# W
    等复杂的P2P技术。另外,中心节点的负载很低。笔者认为,分布式键值系统的整体$ q6 F9 v6 w" {! M9 F
    架构应该参考Tair,而不是Dynamo。
    : L7 F: O; m- j% b1 ^当然,Tair最主要的用途在于分布式缓存,持久化存储起步比较晚,在实现细节
    0 Q+ b, l% f2 N! {: M8 Q( O上也有一些不尽如人意的地方。例如,Tair持久化存储通过复制技术来提高可靠性,
    # V6 ~, [0 m  q& x- {: N$ h然而,这种复制是异步的。因此,当有Data Server发生故障时,客户有可能在一定时; Q8 Z( ~( s+ O7 Y, U6 p
    间内读不到最新的数据,甚至发生最新修改的数据丢失的情况。
    # Z, D6 g4 |4 }) d  A/ r
    0 M, \9 I/ s% G! l/ Z8 \8 q+ ~9 o' T! l/ J  X
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-4-1 14:23 , Processed in 0.145781 second(s), 31 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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