分布式存储系统关键问题

简介: 本文介绍分布式存储系统关键问题。

(一)关键问题

数据分布
对于存储系统,最重要的问题就是数据分布,即什么样的数据放置在什么样的节点上。数据分布时需要考虑数据是否均衡、以后是否容易扩容等一系列问题。不同的数据分布方式也存在不同的优缺点,需要根据自身数据特点进行选择。

1)哈希分布 => 随机读取

取模直接哈希:将不同哈希值的数据分布到不同的服务器上

image

关键:找出一个散列特性很好的哈希函数

问题:增加、减少服务器时的大量数据迁移

解决:1)将<哈希值,服务器>元数据存储在元数据服务器中;2)一致性哈希

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

image

关键:哈希值变成了一个范围,每个物理节点上存储的数据是哈希值处于前一段范围的数据。

优点: 节点增加/删除时只会影响到在hash环中相邻的节点,而对其他节点没影响。

维护每台机器在哈希环中的位置方式:1) 记录它前一个&后一个节点的位置信息,每次查找可能遍历整个哈希环所有服务器;2) O(logN)位置信息,查找的时间复杂度为O(logN);3) 每台服务器维护整个集群中所有服务器的位置信息,查找服务器的时间复杂度为O(1)

虚拟节点:将哈希取模的模数取得很大,就会得到更多的哈希值,这个哈希值成为逻辑节点,一个物理机器可以根据自己的能力选择若干个逻辑节点的存储节点。

image

优点:将传统哈希的一(物理节点)对一(哈希值)的分布变成了一(物理节点)对多(哈希值)的分布。可以根据物理节点的能力调整数据的分布。

2)顺序分布 => 顺序扫描

表格上的数据按照主键整体有序

负载均衡
1)数据写入时,写入节点的选择(空间容量?CPU负载?)

2)运行过程中,数据的迁移

如果运行过程中有新机器的加入,导致每个机器的存储数据量不同,需要能够自动发现,并自动进行调整。但是在调整的过程中也要控制好速度,以免对业务产生影响。

复制&多备份
1)最大保护模式

强同步复制:至少在一个备库上执行成功

至少成功存储2个备份,才返回成功。

2)最大性能模式

异步复制模式:主库执行成功即返回

只要成功存储1个备份,就返回成功。

3)最大可用性模式

两种模式折衷:正常情况是最大保护模式,出现故障时变成最大性能模式

数据一致性
版本号:在收到写入数据请求时,生成对应版本号。

删除老的版本号;读取时,保证读取到的是最新的版本号的数据;写入时,保证写入数据的版本号要新与存储的。

容错
1)故障检测

心跳:S每隔一段时间向C发送一个心跳包

租约机制:带有超时时间的授权

2)故障恢复

master:主备机制,持久化索引

datanode:永久故障,增加备份

可扩展性
1)总控节点是否成为瓶颈

不是瓶颈:舍弃小文件的处理,数据的读写控制权下放到工作机,通过客户端缓存元数据减少对总控节点的访问

内存成为瓶颈:采用两级结构,在总控机与工作机之间加一层元数据节点

2)同构系统

存储节点分为若干组,每个组内的节点服务完全相同的数据

3)异构系统

将数据划分为大小接近的分片,每个分片的多个副本分布到集群中的任何一个存储节点,某个节点发生故障,原有的服务将由整个集群而不是某几个固定的存储节点来恢复

原文发布时间为:2018-08-05
本文作者: HARRIES
本文来自云栖社区合作伙伴“ Java杂记”,了解相关信息可以关注“ Java杂记

相关文章
|
6月前
|
Kubernetes 大数据 调度
Airflow vs Argo Workflows:分布式任务调度系统的“华山论剑”
本文对比了Apache Airflow与Argo Workflows两大分布式任务调度系统。两者均支持复杂的DAG任务编排、社区支持及任务调度功能,且具备优秀的用户界面。Airflow以Python为核心语言,适合数据科学家使用,拥有丰富的Operator库和云服务集成能力;而Argo Workflows基于Kubernetes设计,支持YAML和Python双语定义工作流,具备轻量化、高性能并发调度的优势,并通过Kubernetes的RBAC机制实现多用户隔离。在大数据和AI场景中,Airflow擅长结合云厂商服务,Argo则更适配Kubernetes生态下的深度集成。
804 34
|
2月前
|
存储 算法 安全
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
本文深入解析分布式系统核心机制:数据分片与冗余副本实现扩展与高可用,租约、多数派及Gossip协议保障一致性与容错。探讨节点故障、网络延迟等挑战,揭示CFT/BFT容错原理,剖析规模与性能关系,为构建可靠分布式系统提供理论支撑。
184 2
|
2月前
|
机器学习/深度学习 算法 安全
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
|
4月前
|
数据采集 缓存 NoSQL
分布式新闻数据采集系统的同步效率优化实战
本文介绍了一个针对高频新闻站点的分布式爬虫系统优化方案。通过引入异步任务机制、本地缓存池、Redis pipeline 批量写入及身份池策略,系统采集效率提升近两倍,数据同步延迟显著降低,实现了分钟级热点追踪能力,为实时舆情监控与分析提供了高效、稳定的数据支持。
138 1
分布式新闻数据采集系统的同步效率优化实战
|
10月前
|
存储 运维 安全
盘古分布式存储系统的稳定性实践
本文介绍了阿里云飞天盘古分布式存储系统的稳定性实践。盘古作为阿里云的核心组件,支撑了阿里巴巴集团的众多业务,确保数据高可靠性、系统高可用性和安全生产运维是其关键目标。文章详细探讨了数据不丢不错、系统高可用性的实现方法,以及通过故障演练、自动化发布和健康检查等手段保障生产安全。总结指出,稳定性是一项系统工程,需要持续迭代演进,盘古经过十年以上的线上锤炼,积累了丰富的实践经验。
751 7
|
10月前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
325 7
|
存储 运维 负载均衡
构建高可用性GraphRAG系统:分布式部署与容错机制
【10月更文挑战第28天】作为一名数据科学家和系统架构师,我在构建和维护大规模分布式系统方面有着丰富的经验。最近,我负责了一个基于GraphRAG(Graph Retrieval-Augmented Generation)模型的项目,该模型用于构建一个高可用性的问答系统。在这个过程中,我深刻体会到分布式部署和容错机制的重要性。本文将详细介绍如何在生产环境中构建一个高可用性的GraphRAG系统,包括分布式部署方案、负载均衡、故障检测与恢复机制等方面的内容。
626 4
构建高可用性GraphRAG系统:分布式部署与容错机制
|
11月前
|
机器学习/深度学习 存储 运维
分布式机器学习系统:设计原理、优化策略与实践经验
本文详细探讨了分布式机器学习系统的发展现状与挑战,重点分析了数据并行、模型并行等核心训练范式,以及参数服务器、优化器等关键组件的设计与实现。文章还深入讨论了混合精度训练、梯度累积、ZeRO优化器等高级特性,旨在提供一套全面的技术解决方案,以应对超大规模模型训练中的计算、存储及通信挑战。
618 4
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现
消息队列系统中的确认机制在分布式系统中如何实现
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
249 3

热门文章

最新文章