分布式系统架构设计之分布式数据存储的扩展方式、主从复制以及分布式一致性

news2025/1/21 22:08:07

a7e61a75377e47f8b183379776849f2b.jpeg

三、水平扩展和垂直扩展

在分布式系统中,数据存储的扩展是为了适应业务的增长和提高系统的性能。分为水平扩展和垂直扩展两种方式,这两种方式在架构设计和应用场景上有着不同的优势和局限性。

水平扩展

水平扩展是通过增加节点或服务器的数量来扩大整个系统的容量和性能。在数据存储领域,水平扩展通常表现为将数据分不到多个节点或副本上,每个节点负责存储一部分数据,先来看看水平扩展的一些关键特性:

  1. 数据分片:将数据按照某种规则分成多个片段,每个片段分配给不同的节点。这样可以降低单个节点的负载,提高系统整体的读写性能。
  2. 分布式存储系统:采用分布式数据库或存储系统,使得数据可以水平分布在不同的节点上,提高了系统的可扩展性。
  3. 负载均衡:通过负载均衡算法确保每个节点的负载均衡相对均衡,避免单一节点成为瓶颈。
  4. 弹性伸缩:可根据业务需求动态添加或移除节点,实现系统的弹性伸缩。

使用水平扩展之后,我们可以:

  • 提高系统的横向扩展性,适应大规模数据和高并发访问
  • 易于实现和操作,可以通过添加节点来线性扩展性能

但是以下挑战在使用水平扩展的时候需要关注:

  • 一些复杂业务场景难以进行水平分割,导致某些节点负载过重,比如具有强烈一致性需求的场景
  • 数据一致性和事务处理相对复杂度很高

垂直扩展

垂直扩展是通过提升单个节点或服务器的性能来提高整个系统的容量和性能。在数据存储方面,垂直扩展通常表现为增加节点的硬件资源,例如更大的内存、更强大的 CPU、更快的存储设备等。看看水平扩展的一些关键特性:

  1. 单节点资源增加:通过升级节点的硬件配置,增加处理能力、内容容量和存储速度。
  2. 数据库垂直分区:将不同的数据或表分布到不同的节点上,使每个节点专注于处理特定类型的数据。
  3. 缓存和索引优化:通过更高效的缓存机制和索引设计来提高单节点的读取性能。
  4. 数据库垂直划分:将数据库按照业务功能垂直划分,每个数据库负责不同的业务模块。

使用垂直扩展的优势:

  1. 针对一些单一业务模块压力较大的场景,提高了单节点的性能
  2. 相对简单,不涉及数据的分片和迁移

但是:

  1. 成本较高,硬件升级和维护可能导致较大的投入
  2. 不易应对业务的爆炸性增长,存在一定的性能瓶颈

在实际应用场景中,水平扩展和垂直扩展经常是组合使用,根据具体的业务场景和需求来综合考虑,选择何种扩展方式,需要架构师根据系统的特点、业务需求、性能要求和预算等多个方面来进行全面评估。

四、主从复制和分布式一致性

主从复制

主从复制是一种数据复制模型,其中一个数据节点的变更操作会被异步地复制到其他节点中,一般只主节点的变更操作到从节点上。这种模型通常用于提高系统的可用性、读取性能以及数据备份场景。

主从复制一般包括以下步骤:

  1. 主节点写入:所有应用的写入操作先发生在主节点上,对主节点的库表进行写入。
  2. 异步复制:主节点写入数据之后,将变更操作记录成日志,并将这些日志异步地传播到从节点,比如 MySQL 的 binlog。
  3. 从节点应用:从节点接收到日志推送后,将主节点的变更操作应用用本地数据,使得从节点的数据与主节点数据保持一致。

使用主动复制,可以:

  1. 提高读取性能:从节点可以专门处理读取请求,分担主节点的读取压力,提高整体读取性能,这也就是平时说的读写分离的实现模式
  2. 容灾备份:从节点在主节点发生故障时,可以转变成为主节点,提供容灾备份能力,保障系统在故障场景下的可用性
  3. 数据分发:从节点还可以设计成位于不同的地理位置,实现数据在多个地点的分发,一般异地多活和国际化场景多采用此种模式

但采用主从复制之后,也存在以下挑战:

  1. 数据延迟:由于异步复制的特性,从节点的数据可能存在一定的延迟,不过使用云原生技术时,有云原生产品来保障,该挑战基本上可以避免解决
  2. 写入压力:所有写入操作都在主节点,可能会造成主节点的写入压力过大,所以对于主节点的运维精力要投入更多

分布式一致性

分布式一致性是指在分布式系统中,各个节点对共享状态的变更达成一致的过程。保持一致性是分布式系统中的核心挑战,因为各个节点质检的通信可能存在延迟、故障、网络分区等问题。

CAP 原理

前面章节部分已经详细解释了 CAP 原理,这里不再赘述,知识点再次提醒:

  1. 一致性:所有节点看到的数据是一致的
  2. 可用性:每个非故障节点都能读写
  3. 分区容忍性:系统在遇到网络分区的情况下依旧可以保持一致性和可用性

一致性类型

  1. 强一致性:所有节点在同一时间看到的数据状态是相同的
  2. 弱一致性:允许节点在不同时间看到不同的数据状态,但最终会一致
  3. 最终一致性:最终所有节点都会达到一致状态,但是在中间阶段可能存在不一致

分布式协议

  1. 两阶段提交(2PC):保证事务的一致性,但可能存在阻塞和单点故障
  2. 三阶段提交(3PC):解决了 2PC 的一些问题,但依旧存在不足
  3. Paxos 和 Raft:分布式共识协议,用于解决分布式一致性问题

挑战

  1. 性能开销:一致性协议会带来额外的通信和计算开销
  2. 网络分区:可能导致节点之间无法达成一致,需要在一致性和可用性之间做出权衡

 

在分布式一致性中还有一个特别经典的内容,那就是分布式事务,这里不对分布式事务进行介绍,后面会有专门的章节来详细讲解分布式事务。

3e54fc6bfac9433da4eef327442048b7.jpeg

 

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

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

相关文章

【Vulnhub 靶场】【Looz: 1】【简单】【20210802】

1、环境介绍 靶场介绍:https://www.vulnhub.com/entry/looz-1,732/ 靶场下载:https://download.vulnhub.com/looz/Looz.zip 靶场难度:简单 发布日期:2021年08月02日 文件大小:2.1 GB 靶场作者:mhz_cyber &…

开发Python网络爬虫应用,爬取链家新房楼盘信息保存到mongodb中,并分析相关数据

这里写自定义目录标题 爬取代码分析数据问题 爬取代码 import requests import time from lxml import html from pymongo import MongoClient import randomBASEURL https://cq.fang.lianjia.com/loupan/# 获取某市区域的所有链接 def get_areas(url):print(获取区县列表)# …

QT上位机开发(抽奖软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 用抽奖软件抽奖,是一种很常见的抽奖方式。特别是写这篇文章的时候,正好处于2023年12月31日,也是一年中最后一天…

蓝牙物联网智能门控系统设计方案

随着电子信息技术的飞速发展,物联网技术提升到国家战略高度,研发和应用进程加速并不断取得实质性进展。物联网核心技术包括传感测试技术、网络通信技术、云计算等,具有广域覆盖、大容量、超低功耗和低成本等特点,目前在远程监控、…

win11 电脑睡眠功能失效了如何修复 win11 禁止鼠标唤醒

1、win11睡眠不管用怎么办,win11电脑睡眠功能失效了如何修复 在win11系统中拥有许多令人激动的新功能和改进,有些用户在使用win11电脑时可能会遇到一个问题:睡眠模式不起作用。当他们尝试将计算机置于睡眠状态时,却发现系统无法进…

学习SpringCloud微服务

SpringCloud 微服务单体框架微服务框架SpringCloud微服务拆分微服务差分原则拆分商品服务拆分购物车服务拆分用户服务拆分交易服务拆分支付服务服务调用RestTemplate远程调用 微服务拆分总结 服务治理注册中心Nacos注册中心服务注册服务发现 OpenFeign实现远程调用快速入门引入…

Plantuml之JSON数据语法介绍(二十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Spring Cloud + Vue前后端分离-第10章 基于阿里云OSS的文件上传

源代码在GitHub - 629y/course: Spring Cloud Vue前后端分离-在线课程 Spring Cloud Vue前后端分离-第10章 基于阿里云OSS的文件上传 前面介绍的文件上传是基于本地文件服务器的文件上传,但是自己搭文件服务器会有很多运维的问题,比如磁盘满了要扩容…

VMware虚拟机之文件夹共享jdk和tomcat安装防火墙设置

目录 一. 配置文件夹共享功能 1.1 为什么需要配置文件夹共享功能 1.2 配置文件共享功能 1.3 普通共享和高级共享的区别 1.3.1 普通共享 1.3.2 高级共享 1.3.3 总结 二. jdk的配置 2.1 安装jdk 2.2 配置jdk的环境配置jdk 2.3 配置成功 三. TomCat的配置 四. 防火墙设置 4.1…

【VMware】Windows安装MySQL(5.78版本)及网络配置---图文并茂详细介绍

一 安装MySQL准备工作 ① 连接虚拟机传输MySQL压缩包 先查看虚拟机中的地址 命令: ipconfig 主机连接 在主机连接虚拟机后,将mysql压缩包和Navicat安装包复制到虚拟机下即可 ②解压MySQL压缩包 ③ my文件拷贝mysql安装根目录下 如下图的第一步&…

云卷云舒:构建业务型电信智能运维方法

1 引言 智能运维(AIOps-Algorithmic IT Operations基于算法的IT运维)是人工智能技术在IT运维领域的运用,引用Gartner 的报告的一段话“未来几年,将近50%的企业将会在他们的业务和IT运维方面采用AIOps,远远高于今天的10…

windows怎么在cmd中通过命令关闭防火墙

windows怎么在cmd中通过命令关闭防火墙 1.打开终端(cmd) 2.关闭防火墙 输入命令: netsh advfirewall set allprofiles state off

2023 年四川省职业院校技能大赛(高职组)应用软件系统开发赛项样题

2023 年四川省职业院校技能大赛 (高职组)应用软件系统开发赛项样题 目录 竞赛说明 二、竞赛内容 三、竞赛成果物提交​编辑 四、文档及组件 五、竞赛注意事项 模块一:系统需求分析 二、任务要求 三、竞赛任务 任务 1:智造双碳—能…

Docker的一个简单例子(一)

文章目录 环境示例准备构建启动/停止容器更新应用分享应用 参考 环境 RHEL 9.3Docker Community 24.0.7 示例 准备 从github克隆 getting-started-app 项目: git clone https://github.com/docker/getting-started-app.git查看项目: ➜ getting-s…

C#编程-编写和执行C#程序2

C#编程-编写和执行C#程序 问题陈述 Dvid所在的团队正在为网球比赛开发自动排名软件。他负责创建一个程序来接受网球选手的以下详细信息并将其显示在屏幕上: 1.姓名 2.排名 您需要帮助David创建该程序。 要创建所需的程序,David需要执行以下步骤: 1.打开“记事本”。 2.在“…

2023-12-17 LeetCode每日一题(使用最小花费爬楼梯)

2023-12-17每日一题 一、题目编号 746. 使用最小花费爬楼梯二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你…

CCNP课程实验-05-Comprehensive_Experiment

目录 实验条件网络拓朴配置实现基础配置实现IGP需求:1. 根据拓扑所示,配置OSPF和EIGRP2. 在R3上增加一个网段:33.33.33.0/24 (用Loopback 1模拟) 宣告进EIGRP,并在R3上将EIGRP重分布进OSPF。要求重分布进OSPF后的路由Tag值设置为6…

使用STM32实现多设备UART通信指南

本文将介绍如何在STM32上实现多设备UART通信,包括配置多个UART接口、数据的发送和接收,以及如何有效地进行多设备通信。我们将使用STM32CubeMX和HAL库来演示配置过程,并给出相关的示例代码和技巧。UART(Universal Asynchronous Re…

【Java】JUC并发编程(重量锁、轻量锁、偏向锁)

JUC并发编程 预备: 创建一个maven工程,导入lombok和logback的依赖。 1、基础概念 1、进程与线程 **进程:**程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU ,数…

MongoDB的基本使用

MongoDB的引出 使用Redis技术可以有效的提高数据访问速度,但是由于Redis的数据格式单一性,无法操作结构化数据,当操作对象型的数据时,Redis就显得捉襟见肘。在保障访问速度的情况下,如果想操作结构化数据,…