分布式系统架构设计之分布式数据管理

随着互联网时代的不断发展,分布式系统架构成为支撑大规模用户和高并发访问的基础。在构建分布式系统时,分布式系统有着一系列的要求以及对应的核心技术,涉及到数据管理、通信安全性、性能优化、可扩展性设计以及架构演进与版本管理等很多方面。

一、分布式数据管理:构建稳健数据基石

在信息技术迅猛发展的今天,大规模分布式系统在应对海量数据和高并发访问方面表现出了超强的优越性。在分布式系统架构中,数据管理是至关重要的一环。

数据一致性的重要性

随着业务规模和系统规模的不断增加和扩大,分布式系统逐渐成为解决大规模数据处理和高并发访问的首选方案。然后,在分布式系统中,数据一致性问题成为系统设计时的一大难题。

在分布式系统中,多个节点同时访问和修改数据,确保这些数据在不同节点上保持一致性变得至关重要,数据一致性直接关系到系统的正确性和可靠性,尤其是对于金融领域、交易领域、库存领域等业务场景尤为关键。

比如,TaoBao 平台,如果一个用户在 TaoBao App 上完成订单支付后,是需要更新对应商品的库存数量、订单状态、物流信息等。当前在 TaoBao 内部,像库存、订单、物流都是不同的团队在负责,部署在不同地域、不同节点、多个节点上,这时的数据更新操作其实是不能直接保证数据一致性的,可能会导致库存数量和实际数量不 Match、用户买家订单状态不准确、物流系统中物流状态不同步更改等问题,一旦出现会严重影响系统的可靠性,同时丧失口碑,造成用户的流失。

数据一致性的挑战

在分布式系统中,数据一致性的挑战主要包括以下三个方面:

  1. 节点故障:当系统中的某个节点发生不可快速恢复的故障时,可能会导致该节点上的数据与其他节点不一致。这会要求我们系统能够检测节点故障并采取响应的措施来保障数据的一致性
  2. 并发修改:多个节点同时对相同的数据进行修改,可能会导致数据冲突和不一致。系统需要设计合适的并发控制策略,以确保数据的正确性
  3. 网络延迟:在分布式系统中,节点之间通过网络通信进行数据同步。由于网络延迟的存在,可能会导致在不同节点之间的数据同步出现延迟,影响到数据的一致性

分布式事务解决方案

分布式事务的提出是为了解决数据一致性问题。分布式事务十一组事务操作的集合,要么全成功,要么全失败,确保数据在不同节点上都是一致的。

  1. 两阶段提交(2PC): 2PC 是一种经典的分布式事务协议,分为两个阶段:
    • 第一个阶段:协调者询问所有参与者是否可以执行事务
    • 第二个阶段:根据投票结果决定是否提交或回滚

尽管 2PC 保证了分布式系统的一致性问题,但是它的这种模式,其同步阻塞的特性会严重影响到性能

  1. 补偿事务:补偿事务是一种基于回滚操作的分布式事务协议。当事务发生错误时,系统会执行一系列的补偿操作,将数据恢复到正确的状态。这种方式能够降低同步阻塞的问题,但是需要设计合理有效的补偿方案
  2. 最终一致性:最终一致性是一种相对弱的一致性,允许系统在一段时间内出现不一致的状态,但最终会收敛到一致的状态,它通过异步复制和版本控制来实现,适用于一些对实时性要求不高的场景

分布式数据管理的核心技术

随着大数据时代的到来,分布式数据管理已成为企业应对海量数据的关键技术,一般包括:

数据分片

在分布式数据库中,数据分片是指将数据分成多个片段,每个片段被存储在不同的计算机上。数据分片技术可以提高数据的可扩展性和可用性,因为每个片段可以独立地存储在不同的计算上,从而避免了单点故障。

以 Hadoop HDFS 为例,它是分布式文件系统,将数据存储在多个节点上,实现了数据的分布式存储和管理。

在 Hadoop HDFS 中,文件被分成多个块,每个块存储在一个独立的节点上。当客户端需要读取文件时,会从 HDFS 的元数据服务器获取文件块的分布情况,然后从不同的节点上读取这些块。这种方式提高了数据可扩展性和可用性,因为文件块可以独立地存储在不同的节点上,从而避免单点故障。

数据复制

为了提高数据的可用性和容错性,分布式数据库通常会使用数据复制技术。是指将数据从一个节点复制到另一个节点,提供数据的冗余性和可用性。当一个节点发生故障时,另一个节点可以接管该节点的任务,从而保障数据的可用性和可靠性。

以 Cassandra 为例,它是开源的分布式数据库,采用了分布式数据复制技术。

在 Cassandra 中,每个节点都保存了整个数据库的副本,当一个节点发生故障是,Cassandra 会检测到并将其从集群中移除,其他节点将继续正常运行并提供服务,保证数据的可用性和可靠性。Cassandra 还支持动态地添加节点,从而实现数据的水平和垂直扩展。

事务处理

事务处理是分布式数据库中的核心技术质疑,可以保证数据的完整性和一致性,事务处理可以确保一系列的数据操作要么全部成功,要么全部失败,避免数据的不一致性。在分布式数据库中,事务可以跨越多个节点进行操作,因此需要采用分布式事务处理技术,确保数据的 ACID 特性。

以 HBas 为例,HBase 是一种分布式列式存储数据库,它支持多个节点的事务处理。

在 HBase 中,事务可以跨越多个节点进行操作,为了保证事务的原子性和一致性,HBase 采用了 Write-Ahead-Logging(WAL)机制:当事务开始时,HBase 会将所有操作记录到 WAL 中,当事务提交时,HBase 会将这些操作应用到实际的数据中,如果事务失败,HBase 可以根据 WAL 中的记录进行回滚操作,以保证数据的完整性和一致性。

查询处理

在分布式数据库中,查询可以跨越多个节点进行,因此需要采用查询优化技术,选择最有的查询路径,提高查询效率。查询优化技术可以根据查询条件和数据分布情况自动选择最有的查询路径,提高查询效率。

以 ES 为例,ES 是一种基于 Lucene 的分布式搜索和分析引擎,支持高效的查询和查询优化。

在 ES 中,查询可以跨越多个节点进行。为了提高查询效率,ES 采用了分布式查询优化技术:当用户发出查询请求是,ES 会根据查询条件和数据分布情况自动选择最有的查询路径,ES 还会对查询进行分片处理,将大查询拆分成多个小查询,并在各个节点上并行执行,从而提高查询效率。

数据安全与隐私保护

为了实现数据的安全和隐私保护,需要采取一系列的安全措施,包括加解密技术、访问控制和审计等。加解密技术可以保护数据的机密性和完整性,访问控制可以限制用户对数据的访问权限,审计可以记录用户对数据的操作行为,从而确保数据的可靠性。

以 Hive 为例,Hive 是 Hadoop 生态中的一种数据仓库工具,可以用于数据分析和查询,支持数据的安全和隐私保护功能。

在 Hive 中,用户可以设置不同的方位控制策略来限制用户对数据的访问权限。Hive 还支持加密存储数据,以保证数据的机密性。另外 Hive 还提供了审计功能,可以记录用户对数据的操作行为,从而便于监控和管理。

其他

除了以上介绍的核心技术以外,分布式数据管理还有一些其他相关的核心技术,比如:

  • 集群管理技术用于管理分布式系统中多个数据节点
  • 监控管理技术用于实时监控性能和状态
  • 备份恢复技术用于保证分布式系统的数据安全和可靠性

以 ZooKeeper 为例,它是一种分布式协调服务,可以用于管理分布式数据库中的多个节点。

在分布式数据库中,节点之间的通信和协调是非常重要的,ZooKeeper 可以提供一个可靠的分布式协调服务,帮助节点之间进行通信和同步,还可以用于管理节点的元数据信息、监控节点的状态和提供其他一些公共服务,从而为分布式数据库的正常运行提供保障。

分布式数据库

随着企业数据来的不断增加,传统的关系型数据库已经无法满足现代应用系统对性能和可扩展性的要求。因此,分布式数据库应运而生,为了企业提供更灵活、高效和可扩展的数据管理方案。

上面介绍了分布式数据库一般具备的核心技术,在这部分我们再来看看常见分布式数据库的介绍、分布式数据库的选型。

常见分布式数据库

Cassandra

是一个高度可扩展、分布式的 NoSQL 数据库系统,旨在处理大规模数据的写入和读取。

采用了分布式架构,通过分布式的数据存储和无中心节点的设计实现了高度的可用性。

适用于需要快速写入和读取、数据规模巨大的场景,比如日志存储、实践序列数据等。

MongoDB

是一个面向文档的分布式数据库。

支持丰富的查询语言和灵活的数据类型,使得开发者能够轻松地存储和查询复杂的数据结构。

适用于需要处理半结构化数据、快速迭代开发的场景。

HBase

是建立在 Hadoop 之上的分布式列式数据库,采用了 Bigtable 的设计理念。

HBase 的强一致性和高可用性成为处理大规模数据存储和查询的理想选择。

适用于需要实时读写大规模数据集的场景,比如实时分析、日志处理等。

TiDB

TiDB 是一个新兴的分布式 NewSQL 数据库,具备传统关系型数据库的 ACID 特性,同时拥有分布式数据库的横向扩展能力。

适用于需要关系型数据库事务支持和水平扩展的场景。

如何选择分布式数据库

在对分布式数据库进行技术选型时,一般考虑以下因素:

  • 数据模型和查询语言:这是在选型时的首要考虑点,要看数据模型和查询语言是否符合实际的需求,比如文档数据库适用于半结构化数据
  • 可扩展性:可扩展性是选择的关键考虑点,因为数据库的水平扩展能力决定了是否可以应对未来数据规模的增长
  • 一致性和可用性:根据实际应用场景对一致性和可用性的要求,来选择合适的分布式数据库
  • 社区和生态系统:在选型的同时,要考虑数据库的社区支持和生态系统,这对解决问题、获得技术支持以及与其他系统集成有很大帮助

选择合适的分布式数据库和采用合适的数据管理技术,成为分布式系统架构设计中直观重要的一个环节。通过充分了解分布式数据管理的特性、技术、挑战以及分布式数据库,结合实际应用场景的需求,可以为构建稳定、高效的分布式系统奠定基础。

在实际应用中,不同的数据库是很大可能需要组合使用的,形成多样化、弹性的数据存储解决方案。在我现在负责数据管理平台中,我就使用了 Polar & MongoDB & HBase & Redis & ES & Doris & ...的组合数据存储管理策略。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

N字形变换(麻烦的方法)

class Solution:def convert(self, s: str, numRows: int) -> str:#先判断z有多少隔开s_new""index_now0if len(s)<numRows or numRows1:return sfor i in range(numRows-1,-1,-1):exchange0index_exchangeindex_nows_news[index_now]#计算每一层的差距gap_but…

【零基础入门Python】Python参数

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门Pythonhttps://blog.csdn.net/arthas777/category_12455877.html 目录 print&#xff08;&#xff09;中的Python结束参数 print&#xff08;&#xff09;中的Python|sep参数 Python的格式转换规则 使用格式…

Vue如何请求接口——axios请求

1、安装axios 在cmd或powershell打开文件后&#xff0c;输入下面的命令 npm install axios 可在项目框架中的package.json中查看是否&#xff1a; 二、引用axios import axios from axios 在需要使用的页面中引用 三、get方式使用 get请求使用params传参,本文只列举常用参数…

java中线程相关的面试题

什么是线程安全&#xff0c;造成线程安全的本质是什么&#xff1f; 什么是线程安全呢&#xff1f; 咱们初步去理解话记住一句话就行&#xff1a;如果一个对象可以安全地被多个线程同时使用&#xff0c;那它就是线程安全的。 为什么并发编程会导致线程不安全&#xff1f; 可见…

用户认证篇

文章目录 1. 如何生成用户认证token令牌1.1 相关表1.2 生成令牌逻辑1.3 最终结果 2. 如何认证用户token令牌2.1 前端组件2.2 TokenAuthenticationFilter2.3 获得登陆用户 3. 如何刷新用户认证 Token 令牌3.1 前端组件3.2 刷新令牌接口 4. 如何模拟用户认证token令牌5. 如何实现…

php学习03-php注释

<?php //单行注释 echo ;//单行注释//单行注释嵌套 /*** 多行注释* 多行注释不允许嵌套*/ $c 12; # 这也是单行注释 #嵌套 /*** 文档注释*/ class Util{/*** 方法注释* param int $num* return int*/function add($num){return 11$num;} }echo 这样会出错的//不会看打到?…

linux的主线程提前子线程退出以及线程分离

主线程提前退出 如果主线程没有等待子线程提前退出&#xff0c;可能会发生以下情况&#xff1a; 子线程继续运行&#xff1a;如果主线程退出&#xff0c;但子线程仍在执行任务&#xff0c;子线程将继续独立运行。子线程的生命周期不受主线程控制&#xff0c;直到子线程自行完成…

基于Springboot的留守儿童爱心网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的留守儿童爱心网站(有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring…

蓝牙物联网在智能家居中的应用前景

物联网智能家居系统是应用物联网技术&#xff0c;在传统家居环境下将各种零散无序的电器整合成统一整体&#xff0c;实现家电的全程自动控制&#xff0c;满足用户高效管理需求的一种新型家居模式。 其主要的子系统有家居感知系统、家庭网络系统、智能家居控制管理系统等&#x…

LINUX 嵌入式应用开发层细节知识(入职体验)

1. 后台进程 一些辅助监测的工作&#xff08;日志系统&#xff0c;OTA升级&#xff0c;云-本地中转) 进程可以设置为守护进程 nohup nohub、&、setsid nohup 是可以忽略所有信号&#xff0c;让程序进入后台进程模式。‘ 2. IPCS -ipc_index 查询IPC目前的使用情况 3.…

微信小程序开发学习(上强度):从0开始写项目

前置知识 1、配置插件 微信小程序 基础模板引入sass的两种方法_微信小程序使用sass-CSDN博客 之后在对应页面里新建一个scss文件&#xff0c;写css 2、注册小程序&#xff0c;有个自己的appid&#xff0c;不用测试号了 5.1.注册小程序账号获取appid及个人和企业版差异_哔哩…

Python入门学习篇(六)——for循环while循环

1 for循环 1.1 常规for循环 1.1.1 语法结构 for 变量名 in 可迭代对象:# 遍历对象时执行的代码 else:# 当for循环全部正常运行完(没有报错和执行break)后执行的代码1.1.2 示例代码 print("----->学生检查系统<------") student_lists["张三",&qu…

vue3项目 - Eslint 配置代码风格

Eslint 自定义配置 总结&#xff1a; Prettier &#xff08;代码规范的插件&#xff0c;格式化 &#xff09;---> 美观 Eslint &#xff08;规范、纠错、检验错误 &#xff09;-----> 纠错 首先&#xff0c;禁用 Prettier 插件&#xff0c;安装 ESLint 插件&#x…

模式识别与机器学习(十一):Bagging

1.原理 Bagging [Breiman, 1996a] 是井行式集成学习方法最著名的代表.从名字即可看出&#xff0c;它直接基于自助采样法(bootstrap sampling)。给定包含m 个样本的数据集&#xff0c;我们先随机取出一个样本放入采样集中&#xff0c;再把该样本放回初始数据集&#xff0c;使得…

使用互斥锁(Mutex)管理共享资源

在Go中确保并发安全性 并发是Go中的一个强大功能&#xff0c;它允许多个Goroutines&#xff08;并发线程&#xff09;同时执行。然而&#xff0c;伴随着强大的功能也带来了大量的责任。当多个Goroutines并发地访问和修改共享资源时&#xff0c;可能会导致数据损坏、数据竞争&a…

【matlab】绘制竖状单组渐变柱状图

【matlab】绘制竖状单组渐变柱状图 % matlab绘制渐变柱状图 clear;clc;close all; x1:100; a[]; for i1:length(x) if mod(i,2)0 i-i; end a[a i]; end close all; b0.8; for nm3:69 cmapload([‘D:\m…

2023年Top5搭建帮助中心工具集锦

随着企业知识管理的不断深化&#xff0c;帮助中心成为了一个越来越重要的组成部分。帮助中心是一个集成了企业知识、FAQ、常见问题解答、教程、使用指南等内容的在线平台&#xff0c;旨在为用户提供快速、准确的问题解答和自助服务。那么在这一年&#xff0c;有哪些搭建帮助中心…

Shell三剑客:awk(模式(正则表达式)和动作)

一、运算符 - * / % ^ ** 赋值 ?: C条件表达式 || 逻辑或 && 逻辑与 ~ 和 !~ 匹配正则表达式和不匹配正则表达式 < < > > ! 关系运算符 空格 连接 - 加&#xff0c;减 * / % 乘&#xff0c;除与求余 - ! 一元加&#xff0c;减和逻辑非 ^ *…

Debezium系列之:Debezium JDBC 连接器支持批量同步数据

Debezium系列之&#xff1a;Debezium JDBC 连接器支持批量同步数据 一、设置批次二、配置消费者最大轮询记录三、性能测试结果四、结论 一、设置批次 由于我们之前的版本主要关注核心功能&#xff0c;因此我们的最新版本致力于解决与连接器相关的主要痛点&#xff1a;性能。 …

电脑组件整理(持续更新...)

1、*芯片 CPU(承担着负责的运算)&#xff1b; 量大阵营&#xff1a; AMD &#xff5c; Intel i5 12400F 6核12线 7nm -- 1189元 r7 5700x 8核16线 7 nm -- 1500元&#xff1b; ARM采用的是RISC精简指令集计算、 主要应用于移动终端之中&#xff0c;类如手机&#xff0c…