事务一致性

首先,我们来回顾一下ACID原则:

  • Atomicity:原子性,改变数据状态要么是一起完成,要么一起失败
  • Consistency:一致性,数据的状态是完整一致的
  • Isolation:隔离线,即使有并发事务,互相之间也不影响
  • Durability:持久性, 一旦事务提交,不可撤销

在单体应用中,我们可以利用关系型数据库的特性去完成事务一致性,但是一旦应用往微服务发展,根据业务拆分成不用的模块,而且每个模块的数据库已经分离开了,这时候,我们要面对的就是分布式事务了,需要自己在代码里头完成ACID了。比较流行的解决方案有:两阶段提交、补偿机制、本地消息表(利用本地事务和MQ)、MQ的事务消息(RocketMQ)。

CAP定理

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。

  • Consistency:一致性
  • Availability:可用性
  • Partition tolerance:分区容错

Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

微服务中,不同模块之间使用的数据库是不同的,不同模块之间部署的服务去也有可能是不用的,那么分区容错是无法避免的,因为服务之间的调用不能保证百分百的没问题,所以系统设计必须考虑这种情况。因此,我们可以认为CAP的P总是成立的,剩下的C和A无法同时做到。

实际上根据分布式系统中CAP原则,当P(分区容忍)发生的时候,强行追求C(一致性),会导致(A)可用性、吞吐量下降,此时我们一般用最终一致性来保证我们系统的AP能力。当然不是放弃C,而是放弃强一致性,而且在一般情况下CAP都能保证,只是在发生分区容错的情况下,我们可以通过最终一致性来保证数据一致。

事件驱动实现最终一致性

事件驱动架构在领域对象之间通过异步的消息来同步状态,有些消息也可以同时发布给多个服务,在消息引起了一个服务的同步后可能会引起另外消息,事件会扩散开。严格意义上的事件驱动是没有同步调用的。

例子:

在电商里面,用户下单必须根据库存来确定订单是否成交。

项目架构:SpringBoot2+Mybatis+tk-Mybatis+ActiveMQ【因为小例子,不做成Spring Cloud架构】

首先,我们来看看正常的服务之间调用:

代码:

@Override@Transactional(rollbackFor = Exception.class)public Result placeOrder(OrderQuery query) { Result result = new Result(); // 先远程调用Stock-Service去减少库存 RestTemplate restTemplate = new RestTemplate(); //请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); //封装成一个请求对象 HttpEntity entity = new HttpEntity(query, headers); // 同步调用库存服务的接口 Result stockResult = restTemplate.postForObject("http://127.0.0.1:8081/stock/reduceStock

数据同步一致性_微服务架构:利用事件驱动实现最终一致性相关推荐

  1. mysql 排名_微服务架构下,如何利用Mysql的limit配合orderby进行排名统计

    欢迎关注我的头条号:Wooola,10年Java软件开发及架构设计经验,专注于Java.Golang.微服务架构,致力于每天分享原创文章.快乐编码和开源技术. 前言 我们常用Mysql数据库的limi ...

  2. svn如何取消某个文件的版本管理_微服务架构如何统一管理工程配置文件

    面临的问题 在分布式微服务架构系统中,业务和系统功能被拆分成了几十甚至上百个服务实例.每个服务实例就是以往单体应用时代的一个独立部署的工程.每个工程都需要自己独立的启动加载和运行时配置文件. 在项目开 ...

  3. 微服务 注册中心的作用_微服务架构Dubbo之注册中心(Zookeeper)

    注册中心简介 在微服务架构中,注册中心是核心的基础服务之一.在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中.Dubbo是一个在国内比较流行的分布式框架,被大量的中小型互联网公司所采用 ...

  4. 一行代码,保障分布式事务一致性—GTS:微服务架构下分布式事务解决方案

    摘要: 虽然微服务现在如火如荼,但对其实践其实仍处于初级阶段.即使互联网巨头的实践也大多是试验层面,鲜有核心业务系统微服务化的案例.GTS是目前业界第一款,也是唯一的一款通用的解决微服务分布式事务问题 ...

  5. spring.profiles.active配置了没生效_微服务架构之「 配置中心 」

    在微服务架构的系列文章中,前面已经通过文章<微服务架构之「服务网关 」>介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」.后面 ...

  6. c3p0 服务启动获取连接超时_微服务架构中的熔断、降级

    微服务架构中熔断和降级是保证服务高可用的一项重要功能点,微服务区别于一体化项目的最大区别也再于熔断和降级,很多微服务项目的开发人员对熔断的理解就是当服务不可用的时候,为了让整体服务可以正常运行,需要让 ...

  7. re.containerbase.startinternal 子容器启动失败_微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)...

    走过路过不要错过 点击蓝字关注我们 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程.平台提供基础设施.中间件 ...

  8. 微服务架构的优缺点_微服务架构DNS服务注册与发现实现原理

    微服务架构已经成为中小型企业必备的项目支撑能力,尤其互联网BATJ企业在04年已经非常成熟,在大规模的核心业务实战中总结了很多大规模服务调度与大数据集的处理方案.微服务架构中涉及到很多模块,本文以微服 ...

  9. 异构服务器 微服务_微服务架构是什么?

    如果你懂或者不理解,希望你看到这篇文章之后就能搞懂. 以下: 正文 看到最近"微服务架构"这个概念这么火,作为一个积极上进的程序猿,成小胖忍不住想要学习学习.而架构师老王(不是隔壁 ...

  10. python微服务架构设计模式_微服务架构设计模式 PDF 电子书 百度云 网盘下载

    你还没有注册,无法下载本站所有资源,请立即注册! 您需要 登录 才可以下载或查看,没有帐号?立即注册 x java自学网(http://www.137zw.com)-java论坛,java电子书推荐: ...

最新文章

  1. Dockerfile实战之部署python网站
  2. Windows最经典应用大变脸:学生爽翻!
  3. solor mysql_solr 同步 mysql
  4. 【转】英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析
  5. kodi刮削器 中文_教你PLEX插件播放4K不能使用KODI解码导致卡顿的解决办法
  6. 智慧工厂平台整体结局方案
  7. 自学python到什么程度就可以工作-零基础学到什么程度可以找一份python工作?Python学习路线规划...
  8. Arduino学习笔记23
  9. MarkDown思维导图
  10. CodeForces 愚人节题目
  11. win7托盘区没有蓝牙图标
  12. javascript 模拟退格键_js按钮模拟键盘退格键定位删除问题
  13. 二叉树任意两点间最短路径(利用栈-找公共祖先,不需要建立二叉树)
  14. warning C4819 的解决方法
  15. Python 之嵌套列表
  16. 如何入侵目标的网络DIY指南
  17. c语言gotoxy函数是什么意思,写了个小程序,一直会闪屏,用的gotoxy函数,求大神教...
  18. 软件工程的经验分享(来自一位前辈的经验)
  19. 你在找人吗?亦或是被找?让Cocos君来帮忙!
  20. KMP算法关键点解释

热门文章

  1. 强大命令——Ping命令总结
  2. javascript 自建立对象
  3. 6.从Paxos到Zookeeper分布式一致性原理与实践---Zookeeper 的典型应用场景
  4. 3.excel 生成 sql
  5. KETTLE集群搭建
  6. ESXi主机性能问题
  7. Burpsuit结合SQLMapAPI产生的批量注入插件
  8. MySQL数据库(7)_MySQL 数据备份与还原
  9. hdu 6155 - Subsequence Count
  10. MySQL防止重复插入记录SQL