系统架构设计(十七):微服务数据一致性和高可用策略

数据一致性问题

问题本质

由于每个微服务拥有独立数据库跨服务操作不能用传统的数据库事务,面临“分布式事务”一致性挑战。

数据一致性策略

策略核心思想应用场景优缺点
强一致性(Strong Consistency)所有操作实时同步成功,用户总是看到最新数据金融、电商扣款等高安全场景实现复杂,性能下降
最终一致性(Eventual Consistency)不保证实时一致,但最终会一致大多数业务场景,如电商订单、库存易扩展,性能好,但用户短时间可能看到“旧数据”
分布式事务协议:2PC/3PC通过协调器两阶段提交实现原子性事务级别操作,如账户转账实现难,性能差,可能阻塞
本地事务 + 异步消息补偿(推荐)本地操作成功后发送消息,由对方服务异步处理,失败可重试或补偿大多数微服务场景实用性强,但需自行处理幂等、消息丢失等问题
TCC 模式(Try-Confirm-Cancel)三阶段事务模型,预留资源后确认/取消操作资源型操作(预订、库存等)设计复杂,适用于少数场景
Saga 模式(编排式/事务链)业务分为多个本地事务,失败时按顺序回滚订单、支付、发货流程灵活,适合复杂业务流程

高可用性设计策略

服务高可用(服务不挂)

策略说明
服务注册与发现使用 Nacos/Consul 等注册中心实现服务发现与自动切换
负载均衡使用 Nginx 或 Ribbon/Gateway 等分流到多实例
服务熔断/限流/降级使用 Sentinel、Hystrix 避免雪崩效应
无状态设计使服务可任意扩缩容,实现快速替换
容器化部署 + 自动恢复K8s/Pod 自动拉起故障实例

数据高可用(数据不丢)

策略说明
数据库主从复制/读写分离实现高并发读写与故障切换
分布式缓存(如 Redis Sentinel、Cluster)降低数据库压力,容错性强
消息队列持久化机制Kafka/RabbitMQ 持久化,保证消息不丢
定期快照 + 增量备份数据恢复能力

网络/基础设施高可用:

策略说明
多机房/跨区域部署容灾设计,机房故障不影响服务
负载均衡器(如 SLB)+ 自动切换实现自动流量调度

示例

某系统采用微服务架构,请说明如何保证其数据一致性和高可用性?

解答:

数据一致性策略

  • 采用“本地事务 + 消息队列”方案实现最终一致性;
  • 各服务完成本地事务后,通过 MQ 异步通知其他服务处理;
  • 使用幂等机制和失败重试/补偿机制保障一致性;
  • 对于复杂业务,采用 Saga 模式或 TCC 模式。

高可用性策略

  • 服务层使用注册中心 + 网关 + 负载均衡;
  • 数据层采用主从复制、缓存降级和数据库读写分离;
  • 引入服务熔断、限流、降级机制防止系统雪崩;
  • 基础设施层采用容器化 + 自动化部署,提升可用性。

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

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

相关文章

os agent智能体软件 - 第三弹 - 纯语音交互

前两期期我们发布了产品的初级形态,那时候还只能是“软件开发者”在本地配置使用,或者运行起来有个大黑框,使用起来美观度太差。 到今天大概20天,我们的第3版已经出来了,不仅做成了电脑端的exe软件(任何人…

链表原理与实现:从单链表到LinkedList

1.链表的概念及结构 链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 可以形象的理解,在逻辑上来看,链表就像是一节节火车车厢。 链表的分类:链表的结构有很多种,单向…

替换word中的excel

PostMapping("/make/report/target/performance/first") public AjaxResult makeTargetReportFirst(RequestBody MakeReportDTO makeReportDTO) {Map<String, String> textReplaceMap new HashMap<>();// 替换日期LocalDateTime nowData LocalDateTime…

深入探索百度智能云千帆AppBuilder:从零开始构建AI应用

在数字化转型的浪潮中&#xff0c;企业对高效、智能的应用开发平台的需求日益增长。百度智能云千帆AppBuilder&#xff08;以下简称AppBuilder&#xff09;凭借其强大的功能和灵活的开发方式&#xff0c;成为企业级大模型应用开发的理想选择。本文将详细介绍如何使用AppBuilder…

测试工程师要如何开展单元测试

单元测试是软件开发过程中至关重要的环节&#xff0c;它通过验证代码的最小可测试单元(如函数、方法或类)是否按预期工作&#xff0c;帮助开发团队在早期发现和修复缺陷&#xff0c;提升代码质量和可维护性。以下是测试工程师开展单元测试的详细步骤和方法&#xff1a; 一、理…

NODE-I916 I721模块化电脑发布,AI算力与超低功耗的完美平衡

在智能工业与边缘计算蓬勃发展的今天&#xff0c;企业对计算设备的性能与能效需求日益严苛。全新推出NODE-I916与NODE-I721模块化电脑&#xff0c;分别搭载英特尔 酷睿™ Ultra 平台与Alder Lake-N平台&#xff0c;以差异化CPU配置为核心&#xff0c;为AI推理、工业自动化及嵌入…

采集需要登录网站的教程

有些网站需要用户登录才能显示相关信息&#xff0c;如果要采集这类网站&#xff0c;有以下几个方法&#xff1a; 1. 写发布模块来抓包获取post的数据&#xff1b; 2. 有些采集器内置浏览器获取这些信息&#xff0c;但是经常获取的不准确&#xff0c;可靠性太低&#xff1b; 3. …

六足连杆爬行机器人的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序 4.系统原理简介 5.完整工程文件 1.课题概述 六足连杆爬行机器人的simulink建模与仿真。通过simulink&#xff0c;对六足机器人的六足以及机身进行simulink建模&#xff0c;模拟其行走&#xff0c;仿真输出机器人行走时六足的坐…

什么是物联网 (IoT):2024 年物联网概述

物联网&#xff08;IoT&#xff09;是一个有望彻底改变我们生活、工作以及与环境互动方式的概念。如今&#xff0c;越来越多的新兴企业和老牌企业都在利用物联网的力量创造创新产品与服务。正因为这一转变&#xff0c;互联互通已成为我们生活中不可或缺的一部分&#xff0c;科技…

MVC入门(5)-- HttpMessageConverter 消息转换器

概念 HttpMessageConverter 是 Spring 框架中用于处理 HTTP 请求和响应数据的核心接口&#xff0c;负责在 Java 对象与 HTTP 消息体&#xff08;请求体或响应体&#xff09;之间进行双向转换。简单来说&#xff0c;它是 Spring 用来将 HTTP 请求中的原始数据&#xff08;如 JS…

Spark,连接MySQL数据库,添加数据,读取数据

以下是使用Spark连接MySQL数据库、添加数据和读取数据的步骤&#xff08;基于Scala API&#xff09;&#xff1a; 1. 准备工作 - 添加MySQL驱动依赖 在Spark项目中引入MySQL Connector JAR包&#xff08;如 mysql-connector-java-8.0.33.jar &#xff09;&#xff0c;或通过Sp…

关于 APK 反编译与重构工具集

一、apktool — APK 解包 / 重打包 apktool 是一款开源的 Android APK 工具&#xff0c;用于&#xff1a; 反编译 APK 查看资源和布局文件 生成 smali 文件&#xff08;DEX 的反汇编&#xff09; 对 APK 进行修改后重新打包 它不能还原 Java 源码&#xff0c;只能将 D…

[解决方案] Word转PDF

背景&#xff1a; 之前做过一些pdf导出&#xff0c; 客户提了一个特别急的需求&#xff0c; 要求根据一个模版跟一个csv的数据源&#xff0c; 批量生成PDF&#xff0c; 因为之前用过FOP&#xff0c; 知道调整样式需要特别长的时间&#xff0c; 这个需求又特别急&#xff0c; 所…

01 基本介绍及Pod基础

01 查看各种资源 01-1 查看K8s集群的内置资源 [rootmaster01 ~]# kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 …

19 C 语言位运算、赋值、条件、逗号运算符详解:涵盖运算符优先级与复杂表达式计算过程分析

1 位运算符 位运算符是对整数的二进制表示&#xff08;补码形式&#xff09;进行逐位操作的运算符。以下是主要的位运算符及其功能描述&#xff1a; 运算符描述操作数个数副作用&按位与2无|按位或2无^按位异或2无~按位取反1无<<按位左移2无>>按位右移2无 1.1…

哈希查找方法

已知哈希表长度为11&#xff0c;哈希函数为H&#xff08;key&#xff09;&#xff1d;key&#xff05;11&#xff0c;随机产生待散列的小于50的8个元素&#xff0c;同时采用线性探测再散列的方法处理冲突。任意输入要查找的数据&#xff0c;无论是否找到均给出提示信息。 int f…

JavaScript性能优化实战(10):前端框架性能优化深度解析

引言 React、Vue、Angular等框架虽然提供了强大的抽象和开发效率,但不恰当的使用方式会导致严重的性能问题,针对这些问题,本文将深入探讨前端框架性能优化的核心技术和最佳实践。 React性能优化核心技术 React通过虚拟DOM和高效的渲染机制提供了出色的性能,但当应用规模…

类和对象------2

目录 一. C面向对象模型初探1 .成员变量和函数的存储 二 this指针1 &#xff09;this指针工作原理2 &#xff09;this指针的使用3&#xff09; const修饰成员函数4 &#xff09;const修饰对象(常对象) 3.友元1 )友元语法2) 课堂练习 4 强化训练(数组类封装) 四 运算符重载&…

量子计算在金融科技中的应用前景

随着量子计算技术的飞速发展&#xff0c;其在各行业的应用潜力逐渐显现&#xff0c;金融科技领域更是备受关注。量子计算的强大计算能力有望为金融行业带来前所未有的变革&#xff0c;从风险评估到投资组合优化&#xff0c;从高频交易到加密技术&#xff0c;量子计算都可能成为…

Redisson 四大核心机制实现原理详解

一、可重入锁&#xff08;Reentrant Lock&#xff09; 可重入锁是什么&#xff1f; 通俗定义 可重入锁类似于一把“智能锁”&#xff0c;它能识别当前的锁持有者是否是当前线程&#xff1a; 如果是&#xff0c;则允许线程重复获取锁&#xff08;重入&#xff09;&#xff0c;并…