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

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

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

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

数据一致性的重要性

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

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

比如,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 & ...的组合数据存储管理策略。

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

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

相关文章

Shell 脚本基础

Shell脚本 脚本以#!/bin/bash开头 执行方式 直接使用文件名执行:文件需要执行权限 以bash xxx.sh来执行, 本质上是bash解析器去执行, 文件作为一个输入, 因此可以不需要执行权限 变量 系统变量 自定义变量 定义变量 # 定义一个变量username, 注意不能有多余…

实战 9 权限菜单管理

目录 1、权限菜单后端接口 2、查询权限菜单列表 2.1 设计效果图 2.2 menuList.vue 3、 新增权限菜单 3.1 新增权限菜单窗口代码 3.2 选择所属菜单代码 3.3 封装图标选择器 3.4 新增、编辑和删除权限菜单 1、权限菜单后端接口 package com.cizhu.service;import com.ci…

C# WPF上位机开发(子窗口通知父窗口更新进度)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 这两天在编写代码的时候,正好遇到一个棘手的问题,解决之后感觉挺有意义的,所以先用blog记录一下,后…

基于flask和echarts的新冠疫情实时监控系统源码+数据库,后端基于python的flask框架,前端主要是echarts

介绍 基于flask和echarts的新冠疫情实时监控系统 软件架构 后端基于python的flask框架,前端主要是echarts 安装教程 下载到本地,在python相应环境下运行app.py,flask项目部署请自行完成 使用说明 flaskProject文件夹中 app.py是flask项目主运行文…

Android Studio解决:Connect time out问题

目录 前言 一、错误信息 二、解决方法 三、更多资源 前言 当您尝试建立网络连接时,如果连接的建立时间超过了预设的时间限制,就会出现"Connect time out"的错误提示。这通常是由于网络连接问题、服务器故障或网络延迟等原因导致的。 一、…

ARM Cortex-A学习(1):GIC(通用中断控制器)详解

文章目录 1 Cortex-A核中断1.1 处理器模式1.2 IRQ模式 2 GIC的操作2.1 CPU Interface2.2 Distributor GIC(通用中断控制器, Generic Interrupt Controller)是一种用于处理中断的硬件组件,它的主要功能是协调和管理系统中的中断请求,确保它们被正确地传递…

VD6283TX环境光传感器(1)----获取光强和色温

VD6283TX环境光传感器.1--获取光强和色温 概述视频教学样品申请完整代码下载主要特点硬件准备技术规格系统框图生成STM32CUBEMX串口配置IIC配置X-CUBE-ALS演示结果光强测试表 概述 为了充分利用VD6283TX传感器的特性和功能,本章节重点介绍了如何捕获光强度和相关色…

QT foreach

原型:foreach(variable, container) container:容器,即被遍历的对象 variable:当前元素,即遍历container过程中,当前的那个元素 代码: QStringList container { "1", "2&quo…

JVM 类加载子系统

1. 前言 ​ 虚拟机就是一款用来执行虚拟计算机指令的计算机软件。它相当于一台虚拟计算机。大体上,虚拟机分为系统虚拟机和程序虚拟机。系统虚拟机就相当于一台物理电脑,里面可以安装操作系统;程序虚拟机是为了执行单个计算机程序而设计出来…

Linux文件编程

目录 1、Linux系统提供的文件编程API 1.1打开文件:open 1.2创建文件creat函数 1.3写入文件write函数 1.4读取文件read函数 1.5文件光标位置lseek函数 2、另外一组文件编程API 2.1文件打开函数fopen 2.2读文件函数fread 2.3写文件函数fwrite 2.4文件光标位…

vscode中使用GitHub Copilot Chat

文章目录 一、什么是Github Copilot Chat二、安装使用三、如何使用1. 聊天功能2. 内联功能 一、什么是Github Copilot Chat GitHub Copilot Chat 由 OpenAI 的 GPT-4 大型多模态模型提供支持,能带来更准确的代码建议、解释和指导。GitHub Copilot Chat 的内联功能可…

计算机毕业设计 基于SpringBoot的高校宣讲会管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

关于Python里xlwings库对Excel表格的操作(十九)

这篇小笔记主要记录如何【取消合并单元格】。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库; (2)如何在Wps下使用xlwi…

vscode括号颜色突然变成白色的了,怎么解决

更新版本后发现vscode的各种括号都变成了白色,由于分色括号已经使用习惯,突然变成白色非常不舒服,尝试多次后,为大家提供一下几种解决方式,希望能帮到同样受到此种困惑的你: 第一种: 首先打开…

WebGL开发建筑和设计教育应用

使用 WebGL 开发建筑和设计教育应用可以为学生提供沉浸式的三维体验,使他们能够在虚拟环境中探索建筑结构、材料和设计理念。以下是开发建筑和设计教育应用的一般步骤,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司&…

计算机视觉基础(13)——深度估计

前言 本节是计算机视觉的最后一节,我们将学习深度估计。从深度的概念和度量入手,依次学习单目深度估计和双目/多目深度估计,需要知道深度估计的经典方法,掌握深度估计的评价标准,注意结合对极几何进行分析和思考。 一、…

【LeetCode刷题笔记】动态规划(四)

背包问题 0-1 背包问题 有一个背包,它的容量为 C现在有 n 种不同的物品,他们的编号分别是 0...n-1。每一种物品只有一个。在这 n 种物品中,第 i 个物品的重量是 w[i],它的价值为 v[i]问题是:可以向这个背包中放哪些物品,使得在不超过背包容量的基础上,背包中物品的总价…

【SpringCloud笔记】(10)消息总线之Bus

Bus 前言 戳我了解Config 学习Config中我们遇到了一个问题: 当我们修改了GitHub上配置文件内容,微服务需要配置动态刷新并且需要手动向客户端发送post请求刷新微服务之后才能获取到GitHub修改过后的内容 假如有多个微服务客户端3355/3366/3377…等等…

Android 手机对于Arduino蓝牙控制解决方案

1、Android系统概述 ​ Android 系统是 Google 公司基于 Linux 内核开发的移动端操作系统,适用于智能手机智能手表平板电脑等设备,最新的版本为 7.1。Android系统具有免费开源的优势,任何企业与个人都可以查阅公开的 API 文档,并在自己开发的应用中通过调…

xlua源码分析(四) lua访问C#的值类型

xlua源码分析(四) lua访问C#的值类型 上一节我们主要探讨了C#是如何使用interface和delegate访问lua层的table和function的,本节我们跟着Examples 05_NoGc,来看看xlua是如何实现lua层无gc访问C#的值类型的。 首先例子中用到的lua…