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

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

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

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


分布式系统功能设计--写入流程

目录:

一、链式写入流程

二、主从模式

三、链式异常写入流程

四、Seal  and  New

五、数据写入流程总结

 

一、链式写入流程

以 MFS 文件系统为例讲:

首先 Client 端发起 open 写的请求给 Master 端,然后 Master 端返回给 Client 端写入位置。在这个例子里面可以看到返回的写入位置是 CS1、CS2、CS3 。这时候 client 端开始进行用户数据的写,第一个写肯定是用链式的方式到达 CS1,传递给 CS2,最终传给 CS3,然后 CS3 将写好的数据返回给 CS2 ,以此类推 CS2 返回给 CS1,最终返回给 client 端,这个数据写入成功。可以看到在这写入过程中,数据的流向是从 client 端到 CS1、CS2、CS3 再依次流回来。这样的话,网络流量只是由用户流量的一份,所以这个方式非常利于从集群外部导入数据到集群内部,网络流量充分被利用,但是在写的过程中会经历三段网络,所以会产生三段网络的延迟,对于注重响应时间的请求是不太有利的。

 

二、主从模式

首先 client 端在写入数据的时候会把数据传给 primary CS1,primary CS1 再传给另外的非常多份。这时候传出方式和之前的不同点在于它采用了星型辐射方式,这种方式的好处是这种发射过程减短了网络上传递的延迟,数据到达之后都会有一个 update 的过程。每个做完 update 之后表明它将数据收入到了内存之中,这时候还差最后一步就是把数据落入到磁盘上,如果这一步成功之后(就是说这一途中绿色的虚线返回的时候)数据已经成功,这时候会等待所有的 primary 写好之后返回 client 端,client 端确认数据写入成功。虽然减少了网络延迟,但是看到在  primary 网其他的 replica 传入数据的时候使用辐射发包方式,会导致 primary 网络最高利用率是 1/2,对于流量较高的应用是不合适的,对流量较低的应用较合适,所以在集群部经常采用这样的方式将数据写入。

 

三、链式异常写入流程

首先 client 端还是要把 master 端的数据位置拿到,这时候也是获得了 CS1、CS2、CS3,在写的过程中 CS2 出现了异常,这时候 client 端以链式方式把数据传给CS1之后,CS1 再往 CS2 传递数据的过程中发现 CS2 不能响应,这时会绕过 CS2 直接将数据写入到 CS3,然后再用链式方式告知 client 端这个写入结果成功,但在这过程中发现实际上用户要求写入三份数据,只写了两份。虽然这种处理方式降低了数据安全性,但保证了数据写入的成功率。在这种方式的写入下,还有另外的处理方式,比如在 CS2 出现问题的时候 client 端再从 master 要到 CS4,然后将数据补全,但是这过程中会变得非常复杂,保证了数据的安全性,但降低了数据的成功率。这就是我们在设计方式存储系统的时候,要做的一些取舍。

 

四、Seal  and  New

首先 client 端将数据传给 CS1,CS1 再传给 CS2,CS2 在返回数据的过程中告知CS1 数据没有写成功,这时 client 端会将现在正在写的窗口标记为不再可以写,并且设置这个窗口的数据长度为 N,而不是 CS1 写的 N+1。实际上用户写的数据并没有写入成功,这时 client 端会告知在 CS2 上写失败了,然后会从 master 端拿回的位置是 CS1、CS3,客户端重新写入数据,这时候数据会从 CS1 直接传给 CS3,然后由于 CS3 是个正常的节点,替换掉了原先的 CS2,所以这次写入成功。可以看到在这过程中并没有降低数据的拷贝份数,还是写了两份。但还是绕过了异常节点 CS2,达到了写入过程快速完成的目的,所以这样的方式有效的解决了链式写入方式的缺点。

 

五、数据写入流程总结

数据写入方式

优点

不足

链式写入

每个节点负载和流量比较均衡

链条较长,出现异常时诊断和修复过程比较复杂

主从写入

总路径较短,管理逻辑由主节点负责

主节点有可能成为负载和流量瓶颈

 

异常处理方式

优点

不足

重新修复

最大程度保留之前写入的数据

-直接删除异常节点会导致后续写入的replica数降低

-如果补充心的replica进来,需要补充之前写入的数据给新的replica

Seal  and  New

简单快捷,可以绕过异常节点

Chunk长度不固定,需要更多的meta管理

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