【SpringCloud】设计原则之数据一致性与设计模式

一、设计原则之数据一致性

数据一致性分以下几种情况。 

  • 强一致性

当更新操作完成之后,任何多个后续进程或线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性。

  • 弱一致性

系统并不保证后续进程或线程的访问都护II返回最新的更新过的值。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体地承诺多久之后可以读到。

  • 最终一致性 

弱一致性的特定形式。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间只要受通信延迟、系统负载和复制副本的个数影响。DNS 是一个典型的最终一致性系统。

在工程实践上,为了保障系统的可用性,系统大多将强一致性需求转换成最终一致性的需求,并通过系统执行幂等性来保证数据的最终一致性。 

微服务架构下,完整交易跨越多个系统运行,事务一致性是一个极具挑战的话题。依据 CAP 理论,必须在可用性和一致性之间做出选择。我们认为在微服务架构下应选择可用性,然后保证数据的最终一致性。

在实践中有三种模式: 

  • 可靠事件模式

可靠事件模式属于事件驱动架构,当某件重要事情发生时,例如,更新一个业务实体,微服务会向消息代理发布一个事件,消息代理向订阅事件的微服务推送事件,当订阅这些事件的微服务接收此事件时,就可以完成自己的业务,可能会引发更多的事件发布。

  • 业务补偿模式

补偿模式使用一个额外的协调服务来协调各个需要保证一致性的工作服务,协调服务按顺序调用各个工作服务,如果某个工作服务调用失败,则撤销之前所有已经完成的工作服务。要求需要保证一致性的工作服务提供补偿操作。

  • TCC 模式 

一个完整的 TCC 业务由一个主业务服务和若干个从业务服务组成,主业务服务发起并完成整个业务活动,TCC 模式要求从服务提供三个接口 —— Try(负责资源检测)、Confirm(真正执行业务)和 Cancel(释放 Try 阶段预留的资源)。 

二、设计原则之设计模式

微服务设计模式主要有以下几种:

  • 链式设计模式

链式设计模式是最常见的一种设计模式,用于微服务之间的调用,应该请求通过网关到达第一个微服务,微服务经过基础业务处理,发现不能满足要求,继续调用第二个服务,然后将多个服务的结果统一返回到请求中,如图所示。

  • 聚合器设计模式

聚合器设计模式是将请求统一由网关路由到聚合器,聚合器向下路由到指定的微服务中获取结果,并且完全聚合,如图所示。首页展示、分类搜索和个人中心等通常都使用这种设计。

  • 数据共享模式 

数据共享模式也是微服务设计模式的一种。应用通过网关调用多个服务,微服务之间的数据共享通过同一个数据库,这样能有效的减少请求次数,并且对于某些数据量小的情况非常适用,如图所示。

  • 异步消息设计模式

异步消息设计模式乍看起来跟聚合器设计模式很像,唯一的区别就是网关和微服务之间的通信是通过消息队列而不是聚合器的方式来进行的,采用的是异步交互的方式,如图所示。 

参考资料:《微服务架构实战》—— 张锋 

一  叶  知  秋,奥  妙  玄  心 

 

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

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

相关文章

代码随想录算法训练营第五十八天|739. 每日温度、496.下一个更大元素I

代码随想录 (programmercarl.com) 739. 每日温度 栈里面存放的是元素的下标,确保栈里面的下标对应的元素是单调递增的。 如果栈里面存放的是元素的话,就没有办法定位到下标值,无法计算出距离,所以直接就存入下标。 class Solut…

COCO Dataset Format

COCO (Common Objects in Context) dataset数据集是一个广泛应用于目标检测、语义分割的数据集,包含330K 图片数据 与 2.5 million 个目标实体。 1.数据集下载 !wget http://images.cocodataset.org/zips/train2017.zip -O coco_train2017.zip !wget http://image…

【JAVA】深入了解 Java 中的 DelayQueue

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 Java中的DelayQueue是一个强大的工具,常用于处理需要延迟执行的任务或具有过期时间的元素。通过实现Delayed接口&#x…

​三子棋(c语言)

前言: 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小,三子棋在很多时候会出现和…

HCIP-端口隔离、arp代理、聚合vlan、QinQ

目录 一,端口隔离(同vlan间同交换机下的端口隔离技术) 端口隔离原理: 双向隔离配置 4,端口隔离特殊使用:单向隔离 6,ARP代理 6.1 路由式代理 6.2 VLAN内ARP代理 6.3 VLAN间ARP代理 6.3…

js逆向第8例:猿人学第1题-js 混淆-源码乱码

题目1:抓取所有(5页)机票的价格,并计算所有机票价格的平均值,填入答案。 老规矩打开控制台调试,出现debugger 过掉这个很简单了,右键点击“一律不在此处暂停” 这样就可以查看具体的网络请求如下: m是加密值,熟悉的大佬能发现这串加密字符非常像md5,|后面的就是时…

三分钟弄清数据传输方式

数据传输方式是指在计算机网络和通信系统中,数据如何在发送端和接收端之间进行传输和交换的方法和技术。不同的数据传输方式可以影响到数据传输的效率、安全性和可靠性,因此在实际应用中选择合适的数据传输方式至关重要。本文将从数据传输方式的基本概念…

初学编程,到底选Java还是C++?

初学编程,到底选Java还是C? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&#x…

Excel 读写

using System.Collections; using System.Collections.Generic; using OfficeOpenXml; using System.IO; using UnityEngine; using System.Text;public class ExcelTest : MonoBehaviour {void Start(){string _filePath Application.streamingAssetsPath "/学生信息.x…

yolov5目标检测神经网络——损失函数计算原理

前面已经写了4篇关于yolov5的文章,链接如下: 1、基于libtorch的yolov5目标检测网络实现——COCO数据集json标签文件解析 2、基于libtorch的yolov5目标检测网络实现(2)——网络结构实现 3、基于libtorch的yolov5目标检测网络实现(3)——Kmeans聚类获取anc…

AcWing 861. 二分图的最大匹配—匈牙利算法

题目链接:AcWing 861. 二分图的最大匹配 问题描述 分析 该题是一道典型的二分图匹配模板题,求解最大匹配数,可以用匈牙利算法来解决,下面举一个例子来说明匈牙利算法是如何运行的 以该图为例,其中 1可以匹配a,c 2可以匹配a,b 3…

面试算法90:环形房屋偷盗

题目 一条环形街道上有若干房屋。输入一个数组表示该条街道上的房屋内财产的数量。如果这条街道上相邻的两幢房屋被盗就会自动触发报警系统。请计算小偷在这条街道上最多能偷取的财产的数量。例如,街道上5家的财产用数组[2,3,4,5…

亚马逊店铺遇到账号申诉模版分享

1.表达诚意,先认错再说:我知道,最近我们在Amazon.com上作为卖家的表现已经低于亚马逊和我们自己的质量标准。 2.清楚分明的格式:我们库存管理的混乱导致了延迟发货,更糟糕的是,物品无法使用。当延迟发货和…

T527 Android 13 编译步骤

步骤1: cd longan./build.sh config (0 2 1) 选择 Android 平台: 步骤2:选择IC为t527: 步骤3:板子类型选为demo_car: 步骤4:选择 flash,默认选择 default 则可: 步骤5&…

性能优化-OpenMP基础教程(四)-Android上运行OpenMP

本文主要介绍如何在一个常规的Android手机上调试OpenMP程序,包括Android NDK的环境配置和使用JNI编写一个OpenMP程序运行在Android手机中。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能&#…

stable diffusion 人物高级提示词(三)动作、表情、眼神

一、动作 中文英文站立Standing走路Walking身体前倾Leaning Forward鞠躬Bowing战斗姿势Fighting Stance单腿站立Standing on One Leg坐在椅子上Sitting on a Chair手叉腰Hand on Hip手插兜Hand in Pocket双臂交叉Crossed Arms翘二郎腿Crossed Legs跪地Kneeling双手举起来Hands…

C# .Net学习笔记—— 异步和多线程(异常处理)

一、异常处理 1、下面for循环20个线程&#xff0c;到11&#xff0c;12号的时候执行失败&#xff0c;这里我也用了try catch来捕获异常。 private void button11_Click(object sender, EventArgs e){TaskFactory taskFactory new TaskFactory();List<Task> taskList ne…

湖仓架构的演进

1.数据仓库架构的历史演进 起初&#xff0c;业界数据处理首选方式是数仓架构。通常数据处理的流程是把一些业务数据库&#xff0c;通过ETL的方式加载到Data Warehouse中&#xff0c;再在前端接入一些报表或者BI的工具去展示。 数据仓库概念是 Inmon 于 1990 年提出并给出了完…

文献综述方法论|全文翻译

最常见的错误是文献综述往往未能为该领域提供真正有价值的贡献。无论综述文章多么优秀和严谨&#xff0c;如果它没有提供足够的新内容&#xff0c;就不会被发表。太常见的情况是&#xff0c;文献综述只是对特定年份之间进行的研究进行描述性总结&#xff0c;描述了诸如发表的文…

聚会小游戏+摇色子+愤怒的大叔+真心话太冒险微信小程序源码系统:活跃气氛神器 带完整的安装包以及搭建教程

在现代社交活动中&#xff0c;如何快速破冰并调动气氛一直是人们关注的焦点。微信小程序以其便捷性、互动性和多样性成为了解决这一问题的理想工具。今天&#xff0c;小编将为大家介绍一款集聚会小游戏、摇色子、真心话大冒险等功能于一身的微信小程序源码系统——“活跃气氛神…