分布式存储系统关键问题

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

(一)关键问题

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

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杂记

相关文章
|
4天前
|
分布式计算 Ubuntu 调度
如何本地搭建开源分布式任务调度系统DolphinScheduler并远程访问
如何本地搭建开源分布式任务调度系统DolphinScheduler并远程访问
|
1月前
|
存储 分布式计算 大数据
现代化数据库技术——面向大数据的分布式存储系统
传统的关系型数据库在面对大规模数据处理时遇到了诸多挑战,而面向大数据的分布式存储系统应运而生。本文将深入探讨现代化数据库技术中的分布式存储系统,包括其优势、工作原理以及在大数据领域的应用。
|
1月前
|
消息中间件 存储 NoSQL
【Redis项目实战】使用Springcloud整合Redis分布式锁+RabbitMQ技术实现高并发预约管理处理系统
【Redis项目实战】使用Springcloud整合Redis分布式锁+RabbitMQ技术实现高并发预约管理处理系统
|
1月前
|
存储 Web App开发 运维
原来10张图就可以搞懂分布式链路追踪系统原理
原来10张图就可以搞懂分布式链路追踪系统原理
|
1月前
|
算法 Java 数据中心
分布式ID生成系统之雪花算法详解
在当今的云计算和微服务架构盛行的时代,分布式系统已成为软件开发的重要组成部分。随着系统规模的扩大和业务的复杂化,对数据一致性和唯一性的要求也越来越高,尤其是在全局唯一标识符(ID)的生成上。因此,分布式ID生成系统应运而生,成为保证数据唯一性和提高系统可扩展性的关键技术之一。雪花算法(Snowflake)是Twitter开源的一种算法,用于生成64位的全局唯一ID,非常适用于分布式系统中生成唯一标识符。下面我们将深入探讨雪花算法的原理、结构和实现方式。
97 2
 分布式ID生成系统之雪花算法详解
|
3月前
|
存储 供应链 安全
新一代数据库技术——基于区块链的分布式存储系统
传统数据库系统通常采用集中式存储结构,容易受到单点故障和数据篡改的影响。本文将介绍基于区块链技术的分布式存储系统,探讨其在数据库领域的应用和优势,以及面临的挑战和未来发展趋势。
173 1
|
3月前
|
消息中间件 存储 NoSQL
面试题解析:如何解决分布式秒杀系统中的库存超卖问题?
面试题解析:如何解决分布式秒杀系统中的库存超卖问题?
110 0
|
3月前
|
存储 监控 网络协议
百度基于金融场景构建高实时、高可用的分布式数据传输系统的技术实践
本文将通过一个百度搜索旗下的金融场景案例来分享构建高实时、高可用的分布式数据传输系统的技术实践。
50 0
|
3月前
|
中间件 测试技术 调度
设计一个简易版本的分布式任务调度系统
设计一个简易版本的分布式任务调度系统
83 0
|
4月前
|
消息中间件 监控 负载均衡
Kafka 最佳实践:构建可靠、高性能的分布式消息系统
Apache Kafka 是一个强大的分布式消息系统,被广泛应用于实时数据流处理和事件驱动架构。为了充分发挥 Kafka 的优势,需要遵循一些最佳实践,确保系统在高负载下稳定运行,数据可靠传递。本文将深入探讨 Kafka 的一些最佳实践,并提供丰富的示例代码,帮助大家更好地应用这一强大的消息系统。

热门文章

最新文章