「读书笔记」《大规模分布式存储系统:原理解析与架构实战》:五

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 「读书笔记」《大规模分布式存储系统:原理解析与架构实战》:五

5 分布式键值系统

可以看成是分布式表格模型的一种特例。

哈希分布算法。

5.1 Amazon Dynamo

问题 采取的技术
数据分布 改进的一致性哈希(虚拟节点)
复制协议 复制写协议(Replicated-write Protocol,NWR 参数可调)
数据冲突处理 向量时钟
临时故障处理 数据回传机制(Hinted handoff)
永久故障后的恢复 Merkle 哈希树
成员资格及错误检测 基于 Gossip 的成员资格和错误检测协议

5.1.1 数据分布

一致性哈希算法思想:给系统中每个节点分配一个随机 token,这些 token 构成一个哈希环。执行数据存放操作时,先计算主键的哈希值,然后存放到顺时针方向第一个大于或等于该哈希值的 token 所在的节点。

一致性哈希的优点:节点加入、删除时只会影响到在哈希环中相邻的节点,而对其他节点没有影响。

Dynamo 使用了改进的一致性哈希算法:每个物理节点根据其性能的差异分配多个 token,每个 token 对应一个「虚拟节点」。每个虚拟节点的处理能力基本相当,并随机分布在哈希空间中。

由于种子节点的存在,新节点加入比较简单。新节点首先与种子节点交换集群信息,从而对集群有了认识。DHT(Distributed Hash Table,一致性哈希表)环中的其他节点也会定期和种子节点交换集群信息,从而发现新节点的加入。

5.1.2 一致性与复制

复制:数据回传。

Dynamo 亮点技术:NWR,N 表示复制的备份数,R 指成功读操作的最少节点数,W 指成功写操作的最少节点数。 只要满足 W + R > N,就可以保证当存在不超过一台机器故障的时候,至少能够读到一份有效的数据。

如果应用重视读效率,可以设置 W = N,R=1;如果应用需要在读写之间权衡,一般可以设置 N=3,W=2,R=2。

NWR 看似完美,实则不然。在 Dynamo 这样的 P2P 集群中,由于每个节点存储的集群信息有所不同,可能出现同一个记录被多个节点同时更新的情况,无法保证多个节点之间的更新顺序。为此 Dynamo 引入向量时钟(Vector Clock)的技术手段尝试解决冲突。

5.1.3 容错

Dynamo 将异常分为 2 种类型:

  • 临时性的异常:如机器假死
  • 永久性的异常:如硬盘报修或机器报废等

容错机制:

  • 数据回传
  • Merkle 树同步
  • 读取修复

5.1.4 负载均衡

取决于如何给每台机器分配虚拟节点号,即 token。

分配节点的方法:

  • 随机分配:缺点是可控性差。
  • 数据范围分配 + 随机分配

5.1.5 读写流程

image.png

读取过程中,如果数据不一致,默认策略是根据修改时间戳选择最新的数据,当然用户也可以自定义冲突处理方法。读取过程中如果发现某些副本上数据版本太旧,Dynamo 内部会异步发起一次读取修复操作,使用冲突解决后的结果修正错误的副本。

image.png

5.1.6 单机实现

Dynamo 的存储节点包含 3 个组件:

  • 请求协调
  • 成员和故障检测
  • 存储引擎

Dynamo 设计支持可拔插 的存储引擎,如 Berkerly DB,MySQL InnoDB 等。

5.1.7 讨论

Dynamo 采用无中心节点的 P2P 设计,增加了系统的可扩展性。

Dynamo 只保证最终一致性,多客户端并发操作的时候很难预测操作结果,也很难预测不一致的时间窗口。

总体来看,Dynamo 在 Amazon 的使用场景有限,后续的类似系统会采用其他设计思路以提供更好地一致性。

5.2 淘宝 Tair

Tair 是淘宝开发的一个分布式 K/V 存储引擎。Tair 分为持久化和非持久化两种使用方式:

  • 非持久化可以看成是个分布式缓存
  • 持久化的 Tair 将数据存放于磁盘中。

Tair 可配置数据的备份数目。

5.2.1 系统架构

组成:

  • 1 个中心控制节点 - config server:负责管理所有 Data Server,维护其状态信息。一主一备。
  • 若干服务节点 - data server:对外各种数据服务,并以心跳的形式将自身情况汇报给 Config Server。

5.2.2. 关键问题

数据分布

哈希后,分布到 Q 个桶中。Q 要远大于集群的物理机器数,如 Q = 10240

容错

数据迁移

config server

客户端缓存路由表。

Data Server

Data Server 具备抽象的存储引擎层,可以很方便地添加新存储引擎。Data Server 还有一个插件容器,可以动态加载、卸载插件。

默认包含两个存储引擎:

  • Mdb
  • Fdb

5.2.3 讨论

Tair 中引入了中心节点 Config Server。这样很容易处理数据的一致性,不再需要向量时钟、数据回传、Merkle 数、冲突处理等复杂的 P2P 技术。另外,中心节点的负载很低。

Tair 持久化不尽如人意。如,Tair 持久化存储通过 异步复制 技术提高可靠性,可能会丢数据。

相关文章
|
12天前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
|
9天前
|
运维 持续交付 API
深入理解并实践微服务架构:从理论到实战
深入理解并实践微服务架构:从理论到实战
34 3
|
10天前
|
存储 缓存 负载均衡
亿级流量架构理论+秒杀实战系列(二)
亿级流量架构理论+秒杀实战系列(二)
|
11天前
|
网络协议 安全 中间件
系统架构设计师【第2章】: 计算机系统基础知识 (核心总结)
本文全面介绍了计算机系统及其相关技术,涵盖计算机系统概述、硬件、软件等内容。计算机系统由硬件(如处理器、存储器、输入输出设备)和软件(系统软件、应用软件)组成,旨在高效处理和管理数据。硬件核心为处理器,历经从4位到64位的发展,软件则分为系统软件和应用软件,满足不同需求。此外,深入探讨了计算机网络、嵌入式系统、多媒体技术、系统工程及性能评估等多个领域,强调了各组件和技术在现代信息技术中的重要作用与应用。
22 3
|
24天前
|
缓存 运维 NoSQL
二级缓存架构极致提升系统性能
本文详细阐述了如何通过二级缓存架构设计提升高并发下的系统性能。
|
23天前
|
Cloud Native Devops 持续交付
探索云原生架构:构建高效、灵活和可扩展的系统
本文将深入探讨云原生架构的核心概念、主要技术以及其带来的优势。我们将从云原生的定义开始,了解其设计理念和技术原则;接着分析容器化、微服务等关键技术在云原生中的应用;最后总结云原生架构如何助力企业实现数字化转型,提升业务敏捷性和创新能力。通过这篇文章,读者可以全面了解云原生架构的价值和应用前景。
|
23天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
29 3
|
1月前
|
运维 监控 持续交付
深入浅出:微服务架构的设计与实战
微服务,一个在软件开发领域如雷贯耳的名词,它代表着一种现代软件架构的风格。本文将通过浅显易懂的语言,带领读者从零开始了解微服务的概念、设计原则及其在实际项目中的运用。我们将一起探讨如何将一个庞大的单体应用拆分为灵活、独立、可扩展的微服务,并分享一些实践中的经验和技巧。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
50 3
|
10天前
|
SQL 缓存 运维
亿级流量架构理论+秒杀实战系列(一)
亿级流量架构理论+秒杀实战系列(一)
|
10天前
|
消息中间件 应用服务中间件 数据库
亿级流量架构理论+秒杀实战系列(三)
亿级流量架构理论+秒杀实战系列(三)

推荐镜像

更多
下一篇
无影云桌面