在开发或软件架构的过程中,经常会遇到一致性的问题。尤其是在微服务架构下,每个微服务都有自己的数据库,导致微服务架构的系统不能简单地满足 ACID,我们就需要寻找微服务架构下的数据一致性解决方案。

传统情况下,当一个事务要跨越多个分布式服务时,开发者想到的第一个方案就是两阶段提交——2PC。在这个过程中,事务协调者(事务管理器)给每个参与者(资源管理器)发送 Prepare 消息,如果参与者有可用资源,对数据加锁,如果所有参与者都返回成功,就执行第二阶段,否则,执行回滚操作。

由于数据库通常比业务服务更难扩容,而两阶段提交需要依赖于数据库实现,并且对数据加锁,所以性能较低,应用并不是十分广泛。

那么,如何保证微服务架构中的数据一致性?华为云 PaaS 团队架构师王启军老师提到了几个方面:

1. 可靠事件通知模式

该模式下,一种通知模式是同步事件,即主服务完成后将结果通过事件(以消息队列为主)传递给服务,进而完成业务流程,达到主服务与服务间的消息一致性。另一种是异步事件,即业务服务和事件服务解耦,需要将提交失败的事件进行重试,目前业界多数采用本地消息表 +MQ 的方式来进行重试,但也因此对数据库产生压力。

2. 使用 Saga 保证微服务的最终一致性

Saga 将一个跨服务的事务拆分成多个事务,每个子事务都需要定义一个对应的补偿操作。通过异步的模式来完成整个 Saga 流程。具体操作是将项目创建流程拆分成多个 Saga,并为 Saga 分配一个事务管理器。当服务启动时,会将服务中所有的 SagaTask 注册到管理器中。在业务执行时,执行状态可以通过事务管理器进行查看。

3. TCC/Try Confirm Cancel 模式

在 TCC 模式下,当一个服务提交失败时,可以做到完全补偿,且在补偿后不留下补偿记录。这样可以在业务层处理时,平衡数据库的压力。但其代价也在于增加了业务的复杂度,需要提供相应的 Try、Confirm、Cancel 接口等。

4. 华为云分布式事务服务—DTM

DTM 是华为云分布式事务管理中间件,它的具体步骤是,先由实物发起者向 DTM 集群申请注册一个全局事务的 ID,并透传到所调用的事务参与者中,事务参与者利用得到的 ID 向 DTM 集群注册申请一个分事务 ID,在事务参与者完成自身业务逻辑后,将结果上传至 DTM 集群,并示意分支事务结束,在后续完成 TCC 二阶段后,DTM 集群通稿事务发起者全局事务结束。具体流程如下图所示:

最后,王启军老师总结:不是所有的地方对一致性要求都这么高,要根据自己的业务需求来选择一致性的模型。一致性没有绝对的,更严格的一致性只是降低概率而已,更高的一致性需要更高的成本,需要企业综合考虑。

微服务架构下一致性最佳实践相关推荐

  1. 微服务架构下的软件测试实践

    随着企业开发模式逐渐从传统的整体式(Monolithic)产品交付,向快节奏的微服务架构迁移,软件测试人员也必须相应地调整自己的测试方法和工具,才能多快好省地提高测试覆盖率,尽早发现潜在的缺陷.在快速 ...

  2. 微服务架构10条最佳实践

    转载自公众号:SpringForAll社区 确保你在分布式系统中,努力实现这些微服务的最佳实践,例如监控和REST成熟度. 使用微服务架构可以解决所有的软件架构的问题,对吗?当然,这是不对的.但是,使 ...

  3. 在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践

    欢迎关注方志朋的博客,回复"666"获面试宝典 随着 Prometheus 逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于 Prometheus 构建一体 ...

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

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

  5. 微服务架构下的事务一致性保证

    [转]微服务架构下的数据一致性保证(一) 今天分享第一篇,主要内容包括: 1.传统使用本地事务和分布式事务保证一致性. 2.传统分布式事务不是微服务中一致性的最佳选择. 3.微服务架构中应满足数据最终 ...

  6. Spring Cloud Alibaba 一致性挑战:微服务架构下的数据一致性解决方案

    本讲咱们填之前埋下的一个坑,如何在微服务架构下有效保障数据一致性问题.本讲咱们涉及三方面内容: CAP 原则与 BASE 定理: TCC 一致性解决方案: Seata TCC 模式. 首先咱们了解什么 ...

  7. 51信用卡在微服务架构下的监控平台架构实践

    一.背景介绍 51信用卡的技术架构是基于Spring Cloud所打造的微服务体系,随着业务的飞速发展,不断增多的微服务以及指标给监控平台带来了极大的挑战.监控团队在开源vs自研,灵活vs稳定等问题上 ...

  8. 分布式 java 应用:基础与实践_单集群数据超1000亿,微服务架构下分布式数据库应用实践...

    如今,大型企业的应用平台正在向微服务架构进行转型.在微服务架构下,应用程序和数据库等底层平台的关系将会被重构. 作为新一代分布式数据库,其架构与功能特性需要保证在与传统数据库全兼容的基础上,拥抱微服务 ...

  9. 微服务架构下,大型银行数据库应用实践

    如今,大型企业的应用平台正在向微服务架构进行转型.在微服务架构下,应用程序和数据库等底层平台的关系将会被重构. 作为新一代分布式数据库,其架构与功能特性需要保证在与传统数据库全兼容的基础上,拥抱微服务 ...

最新文章

  1. oracle ocr组成员替换,Oracle RAC 迁移替换 OCR 盘
  2. 第四周项目四-程序分析(4)
  3. 实时摄像头数据传输丢包问题
  4. 【软考之路】关于上周参加的软考的几点感想
  5. TensorRT学习笔记6 - IPlugin
  6. php 接受 amp,php中amp;amp;和||的用法
  7. 话里话外:企业ERP实施的前前后后(二)
  8. 融合·生态·实践 中国卫生信息大会新华三再秀领航者实力
  9. 每日三道前端面试题--vue 第五弹
  10. 练习12——二叉树与表达式
  11. Halcon教程第一讲 读取多张图片
  12. c语言递归思想实践-整形数组求极值问题
  13. mendeley引用参考文献不显示_使用 Zotero 在 Markdown 中优雅处理参考文献
  14. Java解析多种文件输出字符串以及图片(ppt、odc、odcx、pptx、xls、xlsx、rtf)
  15. 大疆前端校招面试指北,各路英雄来相会!
  16. ClickHouse函数介绍
  17. htmltabl生成html表格并发送企业微信
  18. 【云和恩墨大讲堂】高凯 | Oracle 12c 新特性-多租户的维护管理
  19. Kafka分区分配策略以及重平衡过程总结
  20. 【算法-1】输出网格图形

热门文章

  1. Linux Shell脚本多循环语句练习题
  2. insert into select 主键自增_springboot2结合mybatis拦截器实现主键自动生成
  3. javaI/O之PushbackInputStream
  4. 索尼笔记本如何进Bios设置U盘启动
  5. Android 对话框(Dialog)大全 建立你自己的对话框
  6. C的无符号数据类型int,short,byte 转为 Java对应的数据long,char,short
  7. c语言获取按键痕迹,c语言获得键盘的按键
  8. Dws同步mysql数据_数据库技术丨GaussDB(DWS)数据同步状态查看方法
  9. 开发详细设计文档_郑州APP开发:开发前,进行详细设计有没有必要?
  10. windows和linux共同分区格式,Linux和Windows共存的模式下分区要小心