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

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

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

课程地址: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管理

相关文章
|
1月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(二)Rest微服务工程搭建
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(二)Rest微服务工程搭建
52 0
|
3月前
|
存储 安全 JavaScript
【分布式技术专题】「授权认证体系」深度解析OAuth2.0协议的原理和流程框架实现指南(授权流程和模式)
在传统的客户端-服务器身份验证模式中,客户端请求服务器上访问受限的资源(受保护的资源)时,需要使用资源所有者的凭据在服务器上进行身份验证。资源所有者为了给第三方应用提供受限资源的访问权限,需要与第三方共享它的凭据。这就导致一些问题和局限:
373 2
【分布式技术专题】「授权认证体系」深度解析OAuth2.0协议的原理和流程框架实现指南(授权流程和模式)
|
27天前
|
NoSQL Java Redis
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件(二)
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件
15 0
|
1月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
98 0
|
4月前
|
监控 Java Nacos
【分布式流控组件 Sentinel 快速入门】——图文详解操作流程(上)
【分布式流控组件 Sentinel 快速入门】——图文详解操作流程
136 0
【分布式流控组件 Sentinel 快速入门】——图文详解操作流程(上)
|
27天前
|
存储 监控 安全
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
62 1
|
1月前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
65 1
|
1月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
783 0
|
1月前
|
SpringCloudAlibaba Java 测试技术
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(六)Hystrix(豪猪哥)的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(六)Hystrix(豪猪哥)的使用
39 1
|
1月前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(五)OpenFeign的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(五)OpenFeign的使用
42 0

热门文章

最新文章