分布式系统功能设计--读取流程 | 学习笔记

简介: 快速学习分布式系统功能设计--读取流程

开发者学堂课程【分布式文件存储系统技术及实现:分布式系统功能设计--读取流程 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/368/detail/4378


分布式系统功能设计--读取流程

内容介绍

一、正常读取流程

二、异常读取流程

三、如何解决慢节点?

四、总结

 

一、正常读取流程

首先 client 端从 master 端获得数据位置,比如现在获得的位置是CS1、CS2、CS3 ,然后 client 端任选一个 CS 去读取,client 端选取的是 CS1,如果 client 端可以从 CS1 正确读取数据,那么此次读操作就算完成。可以看出读对于写,相对简单了许多。

5.png

 

二、异常读取流程

Client 端第一选取的位置是 CS1 ,如果 CS1 出现了问题,那么读操作就会返回失败,client 端收到读失败后会再选取一个正常节点比如 CS2,发起读请求,然后 CS2 读取数据之后这时读流程才算完成。

6.png

7.png

 

三、如何解决慢节点?

1.BackupRead

client 端在发起读请求时,不只发给同一个点,client 端会发起多个点。在下图可以看到,它向 CS1、CS2 都发起请求,此时它会等其中一个返回,读操作就会成功。但是为了防止这种方式引起大量的 IO 请求,会发一个 ack 请求到 CS1,结束CS1 还没有进行的一些操作。在这可以看到发起多个请求,可以把慢节点完全规避掉。但在平均延迟都增大的情况下,会出现问题。比如两个节点都进行了 IO,但返回的数据只有一份,这是个非常大的浪费。

8.png

2.读流程优化-规避慢节点

1) 首先 master 返回给 client 端位置时,会给它一张列表,告知每个节点大概返回的时间是多长,这是基于位置考虑的。比如说这个节点从 client 进程分布在同一台机器,就可以断定它在 15ms 左右就可以返回。

9.png

2) 但如果CS节点从 client 进程分布在同一个 Rack ,可以大概估算出返回时间在 18ms 左右,如果分布在不同的 Rack 可能要 30ms ,这时候 client 端会选取一个期望返回时间比较短的位置去读。比如 CS1 期望返回是 15ms ,他的第一个请求就会发给 CS1 。但等了一段时间后并没有发现 CS1 返回,这时它才发给第二个可能快的节点,果然 CS3 很快返回,这时候返回的时间还少于 18ms ,这时 client 端先停掉 CS1 的L请求然后将 CS3 的实际返回请求更新。

10.png

3) 在下次选取时发现 CS3 是读取速度最快的,然后这时把请求发给 CS3,有效的发现了集群中最快的节点,之后的读操作都发给它,隔段时间统计再进行一次,所以在 client 端这种只能处理方法,可以有效规避慢节点,对集群中的热点做到动态规避。

11.png

 

四、总结

1. 多个副本分布方式:

2. 可读取任意有效副本

3. 副本出现异常时尝试其他副本

4. Backup Read 可减少读取延迟、但会引起更多的 L 请求,所以根据局部性原理选最优副本访问,既绕过了慢节点又达到了最小的 L 请求量。

相关文章
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
136 1
|
23天前
|
开发工具 git 开发者
Git 作为最流行的分布式版本控制系统之一,为开发者提供了强大的功能和灵活的操作方式
本文深入介绍了 Git 中的 `git rebase` 操作,涵盖其基本概念、原理、与 `git merge` 的区别、具体操作步骤及应用场景,如保持提交历史整洁、解决合并冲突等,并讨论了其优缺点。强调在公共分支上谨慎使用 rebase,以避免潜在的风险。
34 6
|
6月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
237 0
|
2月前
|
分布式计算 Hadoop 网络安全
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
38 1
|
2月前
|
存储 机器学习/深度学习 缓存
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
52 1
|
5月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
15029 32
|
4月前
|
存储 运维 NoSQL
分布式表的写入流程
分布式表的写入流程
|
4月前
|
监控 Cloud Native 容灾
核心系统转型问题之API网关在云原生分布式核心系统中的功能如何解决
核心系统转型问题之API网关在云原生分布式核心系统中的功能如何解决
|
4月前
|
存储 运维 NoSQL
分布式表的写入流程
分布式表的写入流程
|
5月前
|
负载均衡 数据管理
ClickHouse的分布式查询流程
ClickHouse的分布式查询流程