java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2359|回复: 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
    % r  E+ h. H  JTair是淘宝开发的一个分布式键/值存储引擎。Tair分为持久化和非持久化两种使
    7 f8 h3 }- B' P7 x% n  L用方式:非持久化的Tair可以看成是一个分布式缓存,持久化的Tair将数据存放于磁2 o0 \% N9 h/ d1 ?/ ?
    盘中。为了解决磁盘损坏导致数据丢失,Tair可以配置数据的备份数目,Tair自动将
    5 ]: [3 d: U- p% s0 ?$ H8 r, [8 ?一份数据的不同备份放到不同的节点上,当有节点发生异常,无法正常提供服务的
    - [% ?( O, H; U时候,其余的节点会继续提供服务。
    ! ^! n- g! g: U- ]( O3 \5 ~5.2.1 系统架构
    , f) b1 a$ I: X/ Z$ u% xTair作为一个分布式系统,是由一个中心控制节点和若干个服务节点组成。其
    5 K6 `6 V/ c+ b& J' ~中,中心控制节点称为Config Server,服务节点称为Data Server。Config Server负责
    ) ]5 K1 p+ g6 G$ _" s8 w管理所有的Data Server,维护其状态信息;Data Server对外提供各种数据服务,并以: {. D/ Y: X" k/ Q* t
    心跳的形式将自身状况汇报给Config Server。Config Server是控制点,而且是单点,- q- U$ A7 ]! x. ^4 g# D
    目前采用一主一备的形式来保证可靠性,所有的Data Server地位都是等价的。! [) {. Y- B; W+ v" Y, q
    图5-5是Tair的系统架构图。客户端首先请求Config Server获取数据所在的Data9 q- |$ b$ `. _0 l  F9 K, E# f
    Server,接着往Data Server发送读写请求。Tair允许将数据存放到多台Data Server,以
    4 f" m3 N9 N* o9 L/ P实现异常容错。( V* r: {+ L5 `& W# e
    图 5-5 Tair系统架构
    1 I$ w9 P. v) K- s- s( c5.2.2 关键问题4 S: f/ }3 P8 ~2 o
    (1)数据分布
    . v" d% r; O9 V% K; i( X" a. b根据数据的主键计算哈希值后,分布到Q个桶中,桶是负载均衡和数据迁移的基: r8 I8 B6 a4 u7 e# {
    本单位。Config Server按照一定的策略把每个桶指派到不同的Data Server上。因为数
    7 Y' T% L7 v0 u) E据按照主键计算哈希值,所以可以认为每个桶中的数据基本是平衡的,只要保证桶. Q  U! o- C( F+ T1 o$ ~
    分布的均衡性,就能够保证数据分布的均衡性。根据Dynamo论文中的实验结论,Q* _) ?5 G1 ?2 U5 ?
    取值需要远大于集群的物理机器数,例如Q取值10240。
    # t4 W) y1 I( M(2)容错  Z7 _- M. n6 q. F% `5 t
    当某台Data Server故障不可用时,Config Server能够检测到。每个哈希桶在Tair: E$ A" O; q% F: `( ]5 p7 J
    中存储多个副本,如果是备副本,那么Config Server会重新为其指定一台Data
    ' @$ J  J: N( H) ^# j  _( d2 f$ }% GServer,如果是持久化存储,还将复制数据到新的Data Server上。如果是主副本,那
    / m+ N1 a, `( R3 u么ConfigServer首先将某个正常的备副本提升为主副本,对外提供服务。接着,再选' A" G- K2 G2 d5 A3 N0 S
    择另外一台Data Server增加一个备副本,确保数据的备份数。
    - U/ s1 d4 C+ L(3)数据迁移
    & u  u  [+ }$ l机器加入或者负载不均衡可能导致桶迁移,迁移的过程中需要保证对外服务。. g4 W8 Y& J; \$ @2 s
    当迁移发生时,假设Data Server A要把桶3、4、5迁移到Data Server B。迁移完成
      @* k' W' S- I& P: U' e6 B2 h( I前,客户端的路由表没有变化,客户端对3、4、5的访问请求都会路由到A。现在假
    & x6 V) q: p% G! M. c设3还没开始迁移,4正在迁移中,5已经迁移完成。那么如果对3访问,A直接服务;
    # Q+ O7 Y' k$ A- m7 ^如果对5访问,A会把请求转发给B,并且将B的返回结果返回给用户;如果对4访
    * x" W: A0 x0 a6 A0 t/ d. n/ N: t问,由A处理,同时如果是对4的修改操作,会记录修改日志,等到桶4迁移完成时,0 ?5 I* Q% `$ M7 N
    还要把修改日志发送到B,在B上应用这些修改操作,直到A和B之间数据完全一致迁
      }3 M! W' e' l4 i# `移才真正完成。0 o3 |! s/ l* y  w  S
    (4)Config Server
    1 q; t0 y  c- y$ ~7 B' }3 z, `) c客户端缓存路由表,大多数情况下,客户端不需要访问Config Server,Config
    2 F* ^* B4 ]$ y; }  w$ N6 }& [Server宕机也不影响客户端正常访问。每次路由的变更,Config Server都会将新的配' g& F3 C0 S! d6 B. t3 @
    置信息推给Data Server。在客户端访问Data Server的时候,会发送客户端缓存的路由
    ) J% S0 s. e4 C2 F! f表的版本号。如果Data Server发现客户端的版本号过旧,则会通知客户端去Config4 F1 s1 _# Z) }$ g$ `' j
    Server获取一份新的路由表。如果客户端访问某台Data Server发生了不可达的情况
    9 e% _# Z9 ]5 y+ Z4 O(该Data Server可能宕机了),客户端会主动去Config Server获取新的路由表。) `; y7 N1 H  M+ G5 x7 O; e1 K% F) X
    (5)Data Server
    8 X8 P5 g6 t# q: ?Data Server负责数据的存储,并根据Config Server的要求完成数据的复制和迁移0 f( @: z$ b7 _  O
    工作。Data Server具备抽象的存储引擎层,可以很方便地添加新存储引擎。Data, {1 c) e2 ]/ s* ^/ z
    Server还有一个插件容器,可以动态加载/卸载插件,如图5-6所示。
    " D2 Z. [  e  T9 l7 }$ D* j图 5-6 Data Server内部结构
    $ I2 s, a' j6 PTair存储引擎有一个抽象层,只要满足存储引擎需要的接口,就可以很方便地替; X- j; x8 I: H/ X0 t+ g( J: y
    换Tair底层的存储引擎。Tair默认包含两个存储引擎:Mdb和Fdb,此外,还支持
    4 N+ i- ^# _8 O2 t% a: I& mBerkerly DB、Tokyo Cabinet、InnoDB、Leveldb等各种存储引擎。9 f6 c, I5 m# E1 Y9 F
    5.2.3 讨论1 u$ I+ p* q+ m, P8 K1 U- f
    Amazon Dynamo采用P2P架构,而在Tair中引入了中心节点Config Server。这种方
    " g7 _7 z$ O7 C4 ?3 u- |, M4 D9 V5 r  ^式很容易处理数据的一致性,不再需要向量时钟、数据回传、Merkle树、冲突处理' F& Z: }4 E/ \
    等复杂的P2P技术。另外,中心节点的负载很低。笔者认为,分布式键值系统的整体
    # e" c/ P1 Y: Q, C, {$ b架构应该参考Tair,而不是Dynamo。1 S' k4 R- K+ l4 k) t
    当然,Tair最主要的用途在于分布式缓存,持久化存储起步比较晚,在实现细节
    $ X2 g4 C& C8 K上也有一些不尽如人意的地方。例如,Tair持久化存储通过复制技术来提高可靠性,
    3 J* w' S. w# T; {1 x0 ^. O然而,这种复制是异步的。因此,当有Data Server发生故障时,客户有可能在一定时
    " @6 d% W: }; e2 @" t间内读不到最新的数据,甚至发生最新修改的数据丢失的情况。
    , c3 m$ b& W3 I9 l9 Y% \& O
    5 G5 g- u( d0 C+ ~1 D1 p- V
    ; h' F/ g# L3 I6 P3 K
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-4-1 14:02 , Processed in 0.125107 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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