java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2302|回复: 0

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

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

    [LV.Master]出神入化

    2040

    主题

    3698

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66476

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

    发表于 2017-3-3 20:41:09 | 显示全部楼层 |阅读模式
    5.2 淘宝Tair
    5 C+ Q  p( e: z$ s3 y; t  rTair是淘宝开发的一个分布式键/值存储引擎。Tair分为持久化和非持久化两种使8 Q0 m# ^1 i: B' h4 a2 w
    用方式:非持久化的Tair可以看成是一个分布式缓存,持久化的Tair将数据存放于磁' b! j) K- J, X9 s
    盘中。为了解决磁盘损坏导致数据丢失,Tair可以配置数据的备份数目,Tair自动将7 N- N  j) K# n0 U1 S
    一份数据的不同备份放到不同的节点上,当有节点发生异常,无法正常提供服务的
    * r# R" s: j' o, W时候,其余的节点会继续提供服务。  x/ T! T) h8 k: u  w0 Y: M6 n
    5.2.1 系统架构
    & ^7 X1 H7 W4 LTair作为一个分布式系统,是由一个中心控制节点和若干个服务节点组成。其, W+ y7 U/ E9 e) o% m& _7 O
    中,中心控制节点称为Config Server,服务节点称为Data Server。Config Server负责
    " V- ~2 G. r+ }0 E$ I4 }管理所有的Data Server,维护其状态信息;Data Server对外提供各种数据服务,并以$ |  D. c% r+ R
    心跳的形式将自身状况汇报给Config Server。Config Server是控制点,而且是单点,
    ( [) o9 K+ U  c/ ]目前采用一主一备的形式来保证可靠性,所有的Data Server地位都是等价的。) F0 F) i4 f% X
    图5-5是Tair的系统架构图。客户端首先请求Config Server获取数据所在的Data
    ( J  k7 p7 M% ?' MServer,接着往Data Server发送读写请求。Tair允许将数据存放到多台Data Server,以% h: \- n8 E; }# [9 Q
    实现异常容错。1 ~. z+ G  t0 o# H) t: Y
    图 5-5 Tair系统架构
    8 Z& n/ M+ M3 R* \, F. X) N5.2.2 关键问题5 t( x# N3 f- \/ l
    (1)数据分布
    5 G  Z2 ^7 x4 @% {6 O4 @根据数据的主键计算哈希值后,分布到Q个桶中,桶是负载均衡和数据迁移的基0 n0 ]1 j+ O) O# S
    本单位。Config Server按照一定的策略把每个桶指派到不同的Data Server上。因为数( J$ T6 q+ D" |7 y
    据按照主键计算哈希值,所以可以认为每个桶中的数据基本是平衡的,只要保证桶% b7 K$ s1 B# _2 c% s+ z
    分布的均衡性,就能够保证数据分布的均衡性。根据Dynamo论文中的实验结论,Q  B1 ^2 N+ p5 ~# Q6 ?" b
    取值需要远大于集群的物理机器数,例如Q取值10240。
    / y: \, N  U# h6 \6 X3 m: R(2)容错
      I6 a1 Z. X. I  K; r7 Q: _当某台Data Server故障不可用时,Config Server能够检测到。每个哈希桶在Tair
    + [  t1 c# a9 C! F中存储多个副本,如果是备副本,那么Config Server会重新为其指定一台Data
    0 f' S3 X1 F. m8 q- [+ WServer,如果是持久化存储,还将复制数据到新的Data Server上。如果是主副本,那
    2 t2 H  G8 v, ?: h么ConfigServer首先将某个正常的备副本提升为主副本,对外提供服务。接着,再选
    & k; m8 P$ g/ {1 _: q# ]; B择另外一台Data Server增加一个备副本,确保数据的备份数。& |: U: i2 T) ?$ A
    (3)数据迁移+ k. r3 q5 j# l2 D) ]* M
    机器加入或者负载不均衡可能导致桶迁移,迁移的过程中需要保证对外服务。# ^5 d' S2 t- o+ D! l
    当迁移发生时,假设Data Server A要把桶3、4、5迁移到Data Server B。迁移完成+ b4 Z2 n% M. y3 J6 @
    前,客户端的路由表没有变化,客户端对3、4、5的访问请求都会路由到A。现在假6 V* i( d4 q% v( S5 n
    设3还没开始迁移,4正在迁移中,5已经迁移完成。那么如果对3访问,A直接服务;
    1 r1 _/ F& F& h/ d如果对5访问,A会把请求转发给B,并且将B的返回结果返回给用户;如果对4访
    $ x  G+ ]- M; j# @7 Q6 c问,由A处理,同时如果是对4的修改操作,会记录修改日志,等到桶4迁移完成时,3 s% q! |' F. A# |
    还要把修改日志发送到B,在B上应用这些修改操作,直到A和B之间数据完全一致迁4 d6 }. ?- a; h7 d8 ~9 ~
    移才真正完成。1 t( F& L0 o8 @8 g1 e+ ]$ d. V
    (4)Config Server
    & U, F/ e& s5 u6 e客户端缓存路由表,大多数情况下,客户端不需要访问Config Server,Config/ C* C1 ^5 F, X. V
    Server宕机也不影响客户端正常访问。每次路由的变更,Config Server都会将新的配
      G& Y; Z: b" X7 P; o置信息推给Data Server。在客户端访问Data Server的时候,会发送客户端缓存的路由
    - v  H$ N2 m( `: X5 T# u8 A# a表的版本号。如果Data Server发现客户端的版本号过旧,则会通知客户端去Config
    4 \  W0 V1 G2 T6 ZServer获取一份新的路由表。如果客户端访问某台Data Server发生了不可达的情况% D) r9 F1 A3 y" s+ Y; _0 K. w; k) {
    (该Data Server可能宕机了),客户端会主动去Config Server获取新的路由表。) D, N7 ^  ~" U3 w' L6 D7 g
    (5)Data Server) R$ u+ _1 g! }5 {0 s1 X  U
    Data Server负责数据的存储,并根据Config Server的要求完成数据的复制和迁移
    " O9 M" l! p3 Y1 {工作。Data Server具备抽象的存储引擎层,可以很方便地添加新存储引擎。Data' l0 h5 L& {5 D3 b; r' q$ ~2 E
    Server还有一个插件容器,可以动态加载/卸载插件,如图5-6所示。
    2 s3 o  ?/ j3 m, d+ M图 5-6 Data Server内部结构( N- c. ~" i4 R$ H
    Tair存储引擎有一个抽象层,只要满足存储引擎需要的接口,就可以很方便地替  X  g1 T) u" Y) O
    换Tair底层的存储引擎。Tair默认包含两个存储引擎:Mdb和Fdb,此外,还支持
    4 A" y  b% D5 y% z0 k. u- f; wBerkerly DB、Tokyo Cabinet、InnoDB、Leveldb等各种存储引擎。
    0 t- g) x$ I2 B. X' M' }8 i. i5.2.3 讨论
    . i9 q, n0 E/ X2 [& u. eAmazon Dynamo采用P2P架构,而在Tair中引入了中心节点Config Server。这种方
    ' e) U9 @& d$ _: Y1 B4 r式很容易处理数据的一致性,不再需要向量时钟、数据回传、Merkle树、冲突处理
    . _1 V* C. Q9 v( G; B. e. `' i: P8 u等复杂的P2P技术。另外,中心节点的负载很低。笔者认为,分布式键值系统的整体
    % n  B% W0 X) N' P9 V; T4 z架构应该参考Tair,而不是Dynamo。
    1 ?9 A1 F/ O' ?2 G当然,Tair最主要的用途在于分布式缓存,持久化存储起步比较晚,在实现细节7 f; i+ Z& G8 F0 {! Y" x
    上也有一些不尽如人意的地方。例如,Tair持久化存储通过复制技术来提高可靠性,
    , i) g/ c$ j. k$ T0 Y( q- j2 B然而,这种复制是异步的。因此,当有Data Server发生故障时,客户有可能在一定时8 Q8 Y& z* C3 u8 g1 Q) w
    间内读不到最新的数据,甚至发生最新修改的数据丢失的情况。4 F4 H. W$ V4 K5 m

    " g7 @2 Z/ x. Z8 p' q9 ]3 L0 N) C4 z" G' S+ e) n; _8 k2 b" C, L+ D7 q
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-1-22 14:40 , Processed in 0.707676 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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