CAP的学习和应用

前言:用CAP有一段时间了,这里简单记录一下,这么好用的东西,小伙伴们赶紧上车吧

640?wx_fmt=jpeg

一.CAP使用场景?

平时工作中经常使用到MQ,如(kafka,rabbitmq...),用来简单的发布/订阅,经常会遇到以下几个问题

常用方案,把SQL放前面,MQ放后面,MQ执行失败了,我们把整个SQL进行回滚,这种方案在单应用下是可行的,它的回滚成本并不高

我们模拟一个简单的分布式场景:上游下单->中台分单->下游发货

我非要回滚

640?wx_fmt=jpeg

站在业务角度分析,客户满足下单条件,已经下单成功了,但是上游服务在给中台发送MQ的时候失败了,这种情况很明显是不允许回滚的

补救的办法,就是标记这个订单的状态,给客户一个假成功的状态,后台再写个任务调度去处理,每个发送消息的地方都得这样处理,非常的麻烦费事,而且业务跟MQ耦合在一起了

有没有更好的解决方案?

二.CAP是干什么用的?

CAP提供分布式事务的最终一致性解决方案

这里简单说下强一致性,与最终一致性

三.CAP是如何实现最终一致性的?

CAP具备传统EventBus的全部功能,简单的发布/订阅非常好理解,CAP在此基础上持久化了消息(就是把每条消息保存到了数据库),我们还是拿下单场景来说明

当上游向中台发送消息失败时,CAP还是会标注该业务执行成功,但是持久化在数据库里的消息状态是失败的,它会执行重试策略,重试策略执行完后,还是失败,就不会重试了

CAP是基于数据库的强一致性来实现最终一致性的,简单来说,就是执行业务的SQL,跟持久化消息的SQL在一个事务里

当中台接到上游订单后,执行分单的SQL错误了,怎么搞呢?

CAP 在发布/订阅的基础上新增了一个回调,中台会把任务的执行结果通知给上游, 回调相当于中台给上游发消息,上游根据回调的结果决定接下来怎么做

极端情况,中台的数据库挂了,至少上游缓存了所有发送的消息,我们也可以通过这些消息进行溯源,重新消费这些消息即可

作者原文博客地址(建议完整的看一遍,你品,你细品):

https://www.cnblogs.com/savorboard/p/cap-document.html

四.CAP简单入门?

做为一个萌新,怎么优(jian)雅(dan)的使用CAP呢

http://cap.dotnetcore.xyz/user-guide/zh/getting-started/quick-start/

五.CAP使用中遇到的问题?

640?wx_fmt=png

原文链接:https://www.cnblogs.com/tibos/p/11858095.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg

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

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

相关文章

darknet activate_array

void activate_array(float *x, const int n, const ACTIVATION a) { int i; for(i 0; i < n; i){ x[i] activate(x[i], a); } }

[功能发布]Excel催化剂地图可视化功能正式发布,欢迎使用!

地图可视化功能开发完成已过去1个多月&#xff0c;文章的阅读量与初定传播目标相差甚远。但因着热爱分享的缘故&#xff0c;在阅读量未及预期时&#xff0c;仍然破例对其功能进行发布。若真正喜爱Excel催化剂所开发的地图可视化&#xff0c;可通过完成小任务来获取使用资格。再…

WebAssembly生态将完善网络安全性

近日 Mozilla、Fastly、Intel 与 Red Hat 宣布成立联合组织 Bytecode Alliance&#xff08;字节码联盟&#xff09;&#xff0c;该联盟旨在通过协作实施标准和提出新标准&#xff0c;以完善 WebAssembly 在浏览器之外的生态。WebAssembly 也叫 Wasm&#xff0c;它是为基于栈的虚…

/usr/lib/sudo/sudoers.so must be only be writable by owner

https://askubuntu.com/questions/92556/how-do-i-boot-into-a-root-shell 如果你连 sudo su 都无法获取权限&#xff0c;那么只能&#xff1a; 在boot 之后立刻按 Esc or Shift&#xff0c;进入 Ubuntu Recovery Mode 然后 "Enable networking" -> "Dro…

我们终于可以把 bug 留给子孙后代了

“ 阅读本文大概需要 4 分钟。 ”今天在聊项目之前&#xff0c;我们先来聊一下历史。中学时候拿到的第一本历史书&#xff0c;上面是从智人的起源讲起的&#xff0c;他轻轻掠过尧舜禹&#xff0c;秦始皇统一六国&#xff0c;千古一相李斯。他喊二川溶溶&#xff0c;流入宫墙。五…

30分钟无坑部署K8S单Master集群

Jesse导读&#xff1a;11月9号&#xff0c;我在中国.NET开发者峰会&#xff08;.NET Conf China 2019)上分享了之前ASP.NET Core和Kubernetes做微服务的经验&#xff0c;在10号的时候又联合张善友、陈计节两位大佬一起做了一个6个小时的动手实践&#xff0c;得到了非常好的反馈…

pip 安装 imagecodecs 失败

很多类似问题都是需要 pip install --user --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple 再重新安装

亲自实践Blazor构建桌面应用程序

首先是安装.NET Core 3.0 与Node.js.Net Core 版本为&#xff1a;3.0.100Node.js安装版本为&#xff1a;v12.13.0用到的8个命令mkdir blazor-electron-democd blazor-electron-demodotnet new blazorserver --no-httpsdotnet add package ElectronNET.APIdotnet new tool-manif…

CUDA Eclipse Nsight 不能打开工程 an error has occurred see the log file

解决方法&#xff1a; 打开Linux终端&#xff0c;输入命令&#xff1a; echo export PATH/usr/local/cuda-10.0/bin/:$PATH>>~/.bashrc echo export LD_LIBRARY_PATH/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH>>/.bashrc source ~/.bashrc

行云万里,转型未来 | 行云创新受邀参加2019中国.NET开发者峰会

2019 年 11 月 9 日&#xff0c;中国 .NET 开发者峰会&#xff08;.NET Conf China 2019&#xff09;在上海拉开帷幕&#xff0c;这是中国 .NET 社区的年度盛会。行云创新受邀参加了此次峰会&#xff0c;为当前最热门的科技专题带来了精彩的演讲&#xff0c;与全国的 .NET 开发…

Ubuntu Anaconda 环境下删除 protobuf

sudo rm -rf /root/anaconda3/bin/protoc //执行文件 sudo rm -rf /root/anaconda3/include/google //头文件 sudo rm -rf /root/anaconda3/lib/libproto* //库文件

西安活动 | 云时代,享未来 .NET 线下沙龙

活动介绍:在云时代到来的今天&#xff0c;越来越多的应用已经依赖于云而构建&#xff0c;这正得益于云给软件开发带来的低成本&#xff0c;易扩展&#xff0c;可重用的便捷之处。.NET Core平台就是为云而诞生的&#xff0c;毫无疑问它是构建云应用的首要之选。已经磨练5年时间&…

.NET手撸绘制TypeScript类图——下篇

.NET手撸绘制TypeScript类图——下篇在上篇的文章中&#xff0c;我们介绍了如何使用 .NET解析 TypeScript&#xff0c;这篇将介绍如何使用代码将类图渲染出来。类型定义渲染不出意外&#xff0c;我们继续使用 FlysEngine。虽然文字排版没做过&#xff0c;但不试试怎么知道好不好…

.NET Core 对龙芯的支持情况和对 .NET Core 开发嵌入式的思考

一&#xff0c;遗憾的尝试Jexus Web Server 能够在龙芯服务器上跑&#xff0c;但是 ASP.NET 呢&#xff1f;.NET Core 呢&#xff1f;安装什么版本的 Mono &#xff1f;Jexus 作者的文章表达有点模糊呀~下面是宇内的回复&#xff1a;作者写得很实在&#xff0c;说的大实话。.NE…

China .NET Conf 2019-.NET技术架构下的混沌工程实践

这个月的8号、9号&#xff0c;个人很荣幸参加了China.NET Conf 2019 , 中国.NET开发者峰会&#xff0c;同时分享了技术专题《.NET技术架构下的混沌工程实践》&#xff0c;给广大的.NET开发小伙伴介绍混沌工程和高可用性改造实践。会后大家伙聚餐的时候&#xff0c;陈计节老师建…

分布式应用框架 Dapr

微服务架构已成为构建云原生应用程序的标准,微服务架构提供了令人信服的好处&#xff0c;包括可伸缩性&#xff0c;松散的服务耦合和独立部署&#xff0c;但是这种方法的成本很高&#xff0c;需要了解和熟练掌握分布式系统。为了使用所有开发人员能够使用任何语言和任何框架轻松…

使用ASP.NET Core 3.x 构建 RESTful API - 3.1 API资源命名

为了与RESTful API进行交互&#xff0c;API消费者需要使用到三个概念&#xff1a; 资源的标识。也就是可以找到资源的URI。 HTTP方法。例如GET&#xff0c;POST等等&#xff0c;这些方法是HTTP协议的一部分。 有效载荷&#xff08;可选&#xff09;&#xff0c;英文就是Payload…

HM编码架构

首先进入编码encmain.cpp里的int main 函数&#xff0c;主函数的入口&#xff0c;里面包含的重要函数是时间计数函数和encode()函数。 在encode函数中开始编码。encode函数中&#xff0c;首先输入YUV序列&#xff0c;初始化内部类和成员变量&#xff0c;转换色彩空间&#xff0…

你可能不知道的 docker 命令的奇淫怪巧

你可能不知道的 docker 命令的奇淫怪巧Intro分享一些可能会用到的一些简单实用却可能是你不知道的 docker 命令dangling imagesbuild 自己的 docker 镜像的时候&#xff0c;有时会遇到用一个甚至多个中间层镜像&#xff0c;这会一定程度上减少最终打包出来 docker 镜像的大小&a…