赶紧收藏!2024 年最常见 20道分布式、微服务面试题(五)
上一篇地址:赶紧收藏!2024 年最常见 20道分布式、微服务面试题(四)-CSDN博客
九、在分布式系统中,如何保证数据一致性?
在分布式系统中保证数据一致性是一个复杂的问题,因为分布式系统由多个独立的节点组成,这些节点可能分布在不同的地理位置,通过网络进行通信。以下是一些常见的策略和技术,用于在分布式系统中确保数据一致性:
-
强一致性模型:
- 强一致性要求系统在任何时候都能保证所有节点上的数据是一致的。这通常通过同步复制实现,即在数据被写入一个节点后,必须同步到所有其他节点。
-
最终一致性模型:
- 最终一致性是一种更灵活的一致性模型,它允许在写操作后短时间内出现数据不一致的情况,但保证数据最终会达到一致状态。这种模型通常通过异步复制实现。
-
分布式事务:
- 分布式事务允许跨多个节点执行一系列操作,这些操作要么全部成功,要么全部失败,以保持数据的一致性。两阶段提交(2PC)和三阶段提交(3PC)是实现分布式事务的常见协议。
-
一致性哈希:
- 一致性哈希是一种分布式哈希技术,它在增加或删除节点时,只影响一小部分数据的映射关系,从而减少数据重新分布的开销。
-
数据版本控制:
- 通过为数据项添加版本号或时间戳,可以跟踪数据的变化,并解决更新冲突。
-
向量时钟:
- 向量时钟是一种用于检测和解决分布式系统中因果关系的机制,它可以帮助确定不同事件的顺序。
-
冲突解决策略:
- 在最终一致性模型中,当检测到数据冲突时,需要定义冲突解决策略,如“最后写入胜出”、“客户端合并”或“服务器端合并”。
-
事件驱动架构:
- 事件驱动架构通过发布/订阅模式来异步地传播状态变化,从而实现不同节点之间的数据同步。
-
分布式锁:
- 分布式锁可以确保在分布式系统中,对于共享资源的访问是互斥的,防止并发写入导致的数据不一致。
-
CAP定理:
- CAP定理指出,在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)三个属性中,最多只能同时满足两个。根据CAP定理,系统设计者需要在一致性和可用性之间做出权衡。
-
Raft和Paxos算法:
- Raft和Paxos是两种用于在分布式系统中达成共识的算法,它们可以用于实现数据复制和一致性。
-
数据备份和恢复:
- 定期备份数据并在必要时进行恢复,是保证数据一致性的另一种方法。
-
监控和警报:
- 监控系统的状态,并在检测到不一致时发出警报,可以帮助快速响应和解决问题。
在设计分布式系统时,需要根据具体的业务需求和系统特性选择合适的一致性模型和策略。通常,没有一种通用的解决方案能够适用于所有场景,因此需要综合考虑性能、可用性、复杂性和业务需求等因素。
十、什么是CQRS(命令查询责任分离)模式?
CQRS(命令查询责任分离)是一种软件架构模式,它将应用程序中的读(查询)操作和写(命令)操作分离开来处理。这种分离可以提高应用程序的可扩展性、性能和复杂性管理。以下是CQRS模式的一些关键概念和特点:
-
分离读写模型:CQRS模式的核心思想是将数据的读取(查询)和写入(命令)操作分离到不同的模型中。这意味着查询和命令可能使用不同的数据存储、不同的数据结构,甚至可能在不同的数据库中。
-
命令模型:命令模型负责处理所有改变系统状态的操作,如创建、更新或删除数据。这些操作通常以命令的形式表达,例如“创建订单”或“更新用户信息”。
-
查询模型:查询模型专注于提供数据读取操作,如检索数据记录或执行搜索。查询模型可以针对读取操作进行优化,例如使用缓存、索引或特定的查询语言。
-
事件溯源(Event Sourcing):CQRS模式经常与事件溯源结合使用。在事件溯源中,每个命令执行的结果都被记录为事件,这些事件随后可以用来重建系统状态或更新查询模型。
-
异步更新:在CQRS中,查询模型的更新可能是异步的。当命令模型接收到命令并执行后,它会产生事件,这些事件随后被用来更新查询模型,但这个过程可能不是即时的。
-
数据一致性:CQRS模式通常与最终一致性模型一起使用。这意味着系统可能在命令执行后的短时间内处于不一致状态,但最终会达到一致性。
-
可扩展性:由于读写操作分离,系统可以根据需求独立扩展读写资源。例如,如果一个系统读操作远多于写操作,可以扩展更多的查询模型实例来处理读请求。
-
职责明确:CQRS模式使得开发人员可以更清晰地定义和实现应用程序的不同部分。命令处理逻辑和查询逻辑可以独立开发和维护。
-
复杂性管理:虽然CQRS模式增加了架构的复杂性,但它也使得复杂性更加可控。开发人员可以专注于优化命令或查询的处理,而不是试图在一个模型中同时优化两者。
-
领域驱动设计(DDD):CQRS模式与DDD紧密相关,DDD强调根据业务领域来设计软件,而CQRS允许更清晰地分离和实现领域模型中的不同职责。
CQRS模式适用于需要高可扩展性和高性能的应用程序,尤其是在读操作远多于写操作的场景中。然而,它也带来了一些挑战,如数据一致性管理、事件处理的复杂性以及可能的架构复杂性增加。因此,在决定是否采用CQRS模式时,需要仔细考虑其优缺点以及对特定应用程序的适用性。
相关文章:
赶紧收藏!2024 年最常见 20道分布式、微服务面试题(五)
上一篇地址:赶紧收藏!2024 年最常见 20道分布式、微服务面试题(四)-CSDN博客 九、在分布式系统中,如何保证数据一致性? 在分布式系统中保证数据一致性是一个复杂的问题,因为分布式系统由多个独…...

为什么Kubernetes(K8S)弃用Docker:深度解析与未来展望
为什么Kubernetes弃用Docker:深度解析与未来展望 🚀 为什么Kubernetes弃用Docker:深度解析与未来展望摘要引言正文内容(详细介绍)什么是 Kubernetes?什么是 Docker?Kubernetes 和 Docker 的关系…...

软件游戏提示msvcp120.dll丢失的解决方法,总结多种靠谱的解决方法
在电脑使用过程中,我们可能会遇到一些错误提示,其中之一就是“找不到msvcp120.dll”。那么,msvcp120.dll是什么?它对电脑有什么影响?有哪些解决方法?本文将从以下几个方面进行探讨。 一,了解msv…...

使用kafka tools工具连接带有用户名密码的kafka
使用kafka tools工具连接带有用户名密码的kafka 创建kafka连接,配置zookeeper 在Security选择Type类型为SASL Plaintext 在Advanced页面添加如下图红框框住的内容 在JAAS_Config加上如下配置 需要加的配置: org.apache.kafka.common.security.plain.Pla…...

[个人感悟] Java基础问题应该考察哪些问题?
前言 “一切代码无非是数据结构和算法流程的结合体.” 忘了最初是在何处看见这句话了, 这句话, 对于Java基础的考察也是一样. 正如这句话所说, 我们对于基础的考察主要考察, 数据结构, 集合类型结构, 异常类型, 已经代码的调用和语法关键字. 其中数据结构和集合类型结构是重点…...

MySQL-主从复制
1、主从复制的理解 在工作用常见Redis作为缓存与MySQL一起使用。当有请求时,首先会从缓存中进行查找,如果存在就直接取出,否则访问数据库,这样 提升了读取的效率,也减少了对后台数据库的访问压力。Redis的缓存架构时高…...

开发没有尽头,尽力既是完美
最近遇到了一些难题,开发系统总有一些地方没有考虑周全,偏偏用户使用的时候“完美复现”了这个隐藏的Bug...... 讲道理创业一年之久为了生存,我一直都有在做复盘,复盘的核心就是:如何提升营收、把控开发质量࿰…...

【手推公式】如何求SDE的解(附录B)
【手推公式】如何求SDE的解(附录B) 核心思路:不直接求VE和VP的SDE的解xt,而是求xt的期望和方差,从而写出x0到xt的条件分布形式(附录B) 论文:Score-Based Generative Modeling throug…...

STM32F103单片机工程移植到航顺单片机HK32F103注意事项
一、简介 作为国内MCU厂商中前三阵营之一的航顺芯片,建立了世界首创超低功耗7nA物联网、万物互联核心处理器浩瀚天际10X系列平台,接受代理商/设计企业/方案商定制低于自主研发十倍以上成本,接近零风险自主品牌产品,芯片设计完成只…...

Llama模型家族之Stanford NLP ReFT源代码探索 (四)Pyvene论文学习
LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…...
rapidjson 打包过程插入对象
开发过程中遇到一种情况,在打包过程中插入一个字符串(里面是json对象), 官方文档 没看到相关例子,不知道是不是自己粗心没找到。方法RawValue其实是一个通用打包方法,一般情况我们都调用的是String()、Int(…...

NVeloDocx一个基于NVelocity的word模版引擎
NVeloDocx是一个基于NVelocity的Word模版引擎,目前主要是用于E6低代码开发平台供用户轻松制作各种Word报告模版。 有以下优点: 1、完全的NVelocity语法; 2、直接在Word中写NVelocity脚本,使用非常非常方便; 3、完全兼…...

【JavaEE】Spring IoCDI详解
一.基本概念 1.Ioc基本概念 Ioc: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器. 什么是控制反转呢? 也就是控制权反转. 什么的控制权发发了反转? 获得依赖对象的过程被反转了也就是说, 当需要某个对象时, 传统开发模式中需要自己通…...
Bean的作用域
singleton : 单例,IOC 容器中只有唯一的 bean 实例。Spring 中的 bean 默认都是单例的,是对单例设计模式的应用。 prototype : 原型,每次获取都会创建一个新的 bean 实例。也就是说,连续 getBean() 两次,得到的是不同…...

卡尔曼滤波器例子
卡尔曼滤波器 卡尔曼滤波器(Kalman Filter)是一种用于线性系统状态估计的递归算法,可以有效地融合传感器数据和系统模型来估计系统的状态。它在机器人学中广泛应用,尤其是位置和速度等状态的估计。通过卡尔曼滤波器,可以有效地估计机器人在二维平面内的真实位置,并减小测…...
Web前端发展路线:深度解析与未来展望
Web前端发展路线:深度解析与未来展望 在数字化时代的浪潮中,Web前端技术日新月异,成为推动互联网行业发展的重要引擎。本文将从四个方面、五个方面、六个方面和七个方面,深入探讨Web前端的发展路线,为您揭示这一领域的…...

Unity3D入门基础知识汇总
1. unity界面 右上边可以切换布局。 左边选择Shaded wireframe,可以看到3D物体的都是由三角形组成的。 2. 物体显示 网格(三角形构成) 材质 3. 资源商店 Windows -> Asset Store 挑出喜欢的资源之后,点击”添加至我的…...

Triton学习笔记
b站链接:合集Triton 从入门到精通 文章目录 算法名词解释:scheduler 任务调度器model instance、inference和requestbatching 一、Triton Inference Server原理1. Overview of Trition2. Design Basics of Trition3. Auxiliary Features of Trition4. A…...

办理公司诉讼记录删除行政处罚记录删除
企业行政处罚记录是可以做到撤销消除的,一直被大多数企业忽略,如果相关诉讼记录得不到及时删除,不仅影响企业招投标,还影响企业的贷款申请,严重的让企业资金链断裂,影响企业长远发展和企业形象。行政处罚是…...

IO流字符流(FileReader与FileWriter)
目录 FileReader 空参read方法 带参read方法👇 FileWriter void write(intc) 写出一个字符 void write(string str) 写出一个字符串 void write(string str,int off,int len) 写出一个字符串的一部分 void write(char[] cbuf) …...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...