【分布式存储】聊一下分布式存储之复制机制

news2024/11/26 7:46:54

上一篇文章中,主要聊了下数据分片的主要内容,我们知道,**通过数据分片其实可以解决数据存储的高性能以及可拓展,但是也导致了用join和使用分布式事务进行查询和存储数据的问题,**属于按下葫芦浮起瓢。但是在分布式领域中,如果只存储一份数据,其实不能保证存储高可用,因此需要将数据进行存储多份保存。也就是数据镜像,而数据镜像的方式有很多,一主一从,一主多从,一主一备,一主多备。但是数据复制就会涉及到数据之间的拷贝,也就是数据一致性问题。你看这就是为了解决一个问题,引入了别的问题。架构权衡的艺术。
复制的话主要介绍下单主复制、多主复制、无主复制几种常见的数据复制方式。

复制

复制的主要好处

  • 1.增加数据可用性和安全性:数据备份多个保证数据的可用性,即出现单点宕机数据可以恢复。
  • 2.减少往返时间:基于复制的方式,可以将数据分布到不同的区域,用户访问最近的数据节点。可以大大缩短网络请求耗时。
  • 3.增加吞吐量
    复制的坏处
  • 1.数据一致性问题
    • 任何事物都有两面性,采用数据复制的方式,可以将数据存储到多个节点中,但是对于客户端来说是无感知的,数据修改(更新、删除、添加)都需要实时备份到其他节点,那么这个过程中因为网络是不可靠,可能出现数据同步不一致,那么为保证性能,需要放弃一些别的属性,比如返回过期数据

单主复制

单主复制的架构其实就是一主多从,其中有一个Leader或Master节点,有多个从节点,主节点提供读写服务,然后将数据同步到从节点,可以通过同步日志或者转发请求,而从节点提供读操作。
在这里插入图片描述

同步数据的方式主要是三种:同步复制、异步复制、半异步复制
在这里插入图片描述

同步复制
同步复制,其实就是主节点接受到数据变更的请求,同时将数据同步给从节点1、从节点2,当从节点1、2都更新成功的时候,在返回结果给客户端,客户端此时在请求任意一个节点,都可以获取一致的数据。但是缺点就是整个过程性能比较差,如果其中一个节点更新数据过慢,那么整个过程就比较耗时。
异步复制
异步复制,当主节点收到数据更新请求,会直接返回数据更新成功,然后异步线程更新数据到从节点1,从节点2。这样的话虽然性能上比较快,但是客户端访问从节点1、2可能数据这个时候还没有同步过来,可能读取到旧数据。
半同步复制
基于同步和异步复制,同步复制太慢,虽然数据一致性可以保证,但是异步复制快,但是数据一致性没有办法保证,所以半同步复制的原理就是将数据至少同步给2个节点,(主和从),这样即使出现主节点宕机之后,另一个从节点也可以选举成为一个新的leader节点。避免因异步复制而导致数据丢失。

那么如何选择呢?其实就看具体的业务场景,根据不同的场景,具体选择。
好了,这里总结以下,单主复制的优缺点
优点

  • 1.简单易懂,比较好实现,对于客户端要么需要显示的使用主从节点,要么使用代理中间件,即可以将读写请求进行解析,将写请求到主节点,读请求分发到从节点。
  • 2.不用处理多个主节点之间数据的关系,并且写操作只会落到主节点上,分布式事务也比较好实现。
  • 3.大量的读请求,可以很好的实现可拓展。通过增加多个从节点来提升读的性能
    缺点
  • 1.只有一个主节点提供写服务,不能很好的拓展写请求服务。
  • 2.当主节点宕机之后,系统的整体写请求不能处理,因此就会引入,选择哪些合适的节点成为主节点,选举问题? 选举出来之后,如何切换 手动切换&主动切换分布式领域的脑裂问题?

应用场景
其实针对像MySQL,Redis 本身就提供了复制功能,MySQL支持上述三种方式,而Redis则通过复制 Redis Cluser模式提高系统的可用性。具体可以看 【Redis】聊一下Redis数据同步/复制 这里留一个坑,后续补一下MySQL的同步原理机制。

多主复制

在这里插入图片描述

为什么需要多主复制?
单主复制解决了数据读的压力,提供读性能,但是对于写请求来说也只能由一个主节点进行处理,所以为了提升写的性能很简单的方式就是通过多个主节点进行数据复制,即每个主节点都可以承担数据的写请求。
多主复制有哪些问题?
最直观的就是一个数据,可能同时被A、B两个主节点进行写入,这个时候如果出现网络问题,导致A延迟了,那么应该以那个数据为准,也就是出现了数据冲突。而比较麻烦的点,就是多主复制的问题。
解决方案?
1.客户端解决,一般可以将数据推送给客户端,用户自己选择,我在使用有道云比较的时候,有时候多个客户端操作同步文件,就会出现多个版本的文件,但是这个时候需要我自己来选择那个文件。
2.最后写入胜利 这种方式比较简单,也就是谁最后写入的,按照最后的为准,给每个写请求标记一个时间戳或者唯一自增ID
3.因果关系跟踪,根据使用一种因果关系的算法,推算出数据前后,比如用户先下单,在支付。
优缺点
优点:1.即使出现主节点宕机,其他主节点依然可以提供写请求服务。可以实现容错。 2.可以提升写请求的性能 3.用户可以将请求发送最近的节点,比如北京发送到北京的服务器,上海到上海的服务器。
缺点:数据冲突问题,比较难解决。
应用场景:
大多数业务场景其实不会使用这种方式,主要针对的是地理级别的数据中心,可以将用户数据存储在一个数据中心中。少用户与数据中心之间的网络延迟,提升用户体验

无主复制

这里简单介绍下无主复制,因为主从复制和多主复制都需要以来主节点进行数据的写入,而如果不采用主节点,每个节点都是主节点,那么就没有数据写入节点宕机的问题。所以大概就是数据写入的时候,同时将数据写入到多个节点 或者全部节点。而只要返回一定节点的数量成功,就认为数据写入成功。但是也会出现写入失败的情况,这个时候就需要依赖于数据修复能力。具体可以看下Quorum。

总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大数据之Hive】十一、Hive-HQL查询之基本查询

基础语法 select [all | distinct] select_expr,select_expr, ...from table)name --从什么表查[where where_condition] --过滤[group by col_list] --分组查询[having col_list] --分组后过滤[order by col_list] --排序[cluster by col_list | …

基础知识学习---牛客网C++面试宝典(七)操作系统--第三节

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习; 暂时只有2023年3月份,第一次社招找工作的过程; 2、个人经历: 研究生期间课题是SLAM在无人机上的应…

从 数据工程 到 Prompt 工程

动动发财的小手,点个赞吧! 数据工程构成了数据科学过程的很大一部分。在 CRISP-DM 中,这个过程阶段称为“数据准备”。它包括数据摄取、数据转换和数据质量保证等任务。在本文[1]章中,我们使用 ChatGPT 和 Python 解决了典型的数据…

用HTML5制作精美战机游戏

每天要被大学老师催H5作业👏🏻👏🏻👏🏻 不如看看本文,代码齐全,直接用来做参考案例👌🏻 干货满满不看后悔👍👍👍 代码…

用友畅捷通CRM SQL注入漏洞复现

0x01 产品简介 用友畅捷通CRM是面向小企业全力打造的简单、实用的客户关系管理应用。帮助企业用好自己的客户资源、管好商机跟进过程、引导好业务员跟单行为,促进团队销售能力的提升;通过查询和分析,识别企业的价值客户,融合电话、…

JUC笔记(二)

多线程编程核心 在前面,我们了解了多线程的底层运作机制,我们终于知道,原来多线程环境下存在着如此之多的问题。在JDK5之前,我们只能选择synchronized关键字来实现锁,而JDK5之后,由于volatile关键字得到了…

湖南大学CS-2021期末考试解析

【特别注意】 答案来源于@wolf 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 有必要一做。 【试卷与答案】 1.简答题(10 分) 小明设计了一款机器,整数和浮点数都占 10 个 bit,其中整数采用补码表示,浮点数采用 IEEE 754 标准。 (1)…

matlab横向连接字符组成文件路径

f fullfile(myfolder,myfile.tif) %字符串中不包含反斜杠 f strcat(myfolder\,myfile.tif) %字符串中包含反斜杠,strcat函数直接拼接得到的结果一致

【软件测试】测试用例设计要点总结

文章目录 考试题型简答题(一) 等价类划分1.1 划分等价类1.2 设计测试用例 (二) 边界值分析2.1 列出边界值分析表2.2 设计测试用例 (三) 因果图分析3.1 确定原因和结果3.2 确定原因和结果之间的逻辑关系3.3 在因果图上使用标准的符号标明约束条件 (四) 判定表驱动4.1 将因果图转…

【轻量化网络系列(7)】EfficientNetV2论文超详细解读(翻译 +学习笔记+代码实现)

前言 今天我们要学习的是EfficientNetV2 ,该网络主要使用训练感知神经结构搜索和缩放的组合;在EfficientNetV1的基础上,引入了Fused-MBConv到搜索空间中;引入渐进式学习策略、自适应正则强度调整机制使得训练更快;进一…

深入了解 OkHttp 协议:优雅的网络请求框架

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想…

Spring Boot项目的搭建和运行

✨Spring Boot项目的搭建和运行 🍑Spring Boot概述🍊🍊传统框架技术存在的问题🍊🍊主要特点🍊🍊环境要求 🍑聚合工程/父子模块🍑第一个Spring Boot项目🍑目录…

《UNUX环境高级编程》(1)UNIX基础

1、引言 2、UNIX体系结构 操作系统 一种软件,控制计算机硬件资源,提供程序运行环境。操作系统包含了内核和一些其他软件(如shell、公用函数库、应用程序等)。例如Linux就是GNU操作系统的内核,因此也称为GNU/Linux操作…

Netty实战(十五)

UDP广播事件(一)UDP简介和示例程序 一、UDP基础1.2 UDP介绍1.2.1 UDP和TCP的区别 1.3 UDP广播1.3.1 单播模式1.3.2 UDP的传输模式 二、UDP示例程序三、消息 POJO: LogEvent 一、UDP基础 到目前为止,我们已经见过的绝大多数的例子都使用了基于…

Android系统中最重要的一个组件【Framework】

Android Framework是Android系统中最重要的一个组件,它为Android应用开发者提供了一套完整而稳定的API框架,可以方便地实现各种应用功能。Android市场对Framework的需求量非常大,尤其在当前移动互联网时代,Android应用的市场需求也…

SpringCloud Alibaba-Nacos

SpringCloud Alibaba-Nacos 1. Nacos安装1.1 Nacos概要1.2 Nacos架构1.3 Nacos安装1.3.1 单机模式 Derby安装1.3.2 单机模式 MySQL安装1.3.3 Docker 安装Nacos 2 Nacos功能应用2.1 Nacos服务注册与发现2.2 负载均衡2.3 配置中心2.3.1 配置管理2.3.2 多环境切换2.3.3 共享/扩展 …

Spark集群部署和启动与关闭

上一篇我们讲了Hadoop集群部署和启动与关闭,今天我们讲一下Spark集群部署和启动与关闭。首先我们先来了解一下Spark集群部署模式,分别有以下三种: Standalone   Standalone(独立模式)是Spark一种简单的集群部署模式&…

随着用户体验质量的不断追求,性能优化成了Android开发中的重要一方面

在移动互联网时代,Android系统的使用越来越广泛,而随着用户对体验质量的不断追求,性能优化已经成为了Android应用开发中的重要方面。以下是对Android市场对性能优化的需求量及应用广度进行详细分析的几个方面。 1. 用户需求 随着Android系统…

DataLeap的全链路智能监控报警实践(三): 系统实现

系统实现 整体架构 基线 管理模块:负责基线创建、更新、删除等操作,管理基线元信息,包括保障任务,承诺时间,余量及报警配置等); 基线 实例生成:系统每天定时触发生成基线实例&#x…

2023 年最新互联网 Java 面试八股文出炉(附大厂 P5-P8 技术栈)

为什么感觉 Java 面试变难了? 几年前,你只需要简单的 ssm 框架,就能轻松找到一份 Java 的工作,但现在不一样了,随着涌入这个行业的人越来越多,同一个岗位需要筛选掉更多人,要求自然水涨船高&am…