产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

微服务架构下数据一致性最佳实践

  • 2019-10-29
  • 本文字数:1242 字

    阅读完需:约 4 分钟

微服务架构下数据一致性最佳实践

在开发或软件架构的过程中,经常会遇到数据一致性的问题。尤其是在微服务架构下,每个微服务都有自己的数据库,导致微服务架构的系统不能简单地满足 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 集群通稿事务发起者全局事务结束。具体流程如下图所示:



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


除了一致性话题之外,王老师将在 12 月 7 日北京 ArchSummit 全球架构师峰会上分享《反应式微服务框架 Apache ServiceComb 设计思想》的话题,介绍 Reactive 编程模型带来的好处,以及在微服务架构下,如何快速建立 Reactive 架构。



感兴趣可以点击 https://archsummit.infoq.cn/2019/beijing/track 查看官网了解更多议题内容。9 折倒计时 20 天,团购更优惠哦~详情联系票务经理灰灰:15600537884(同微信)


2019-10-29 15:534369

评论

发布
暂无评论
发现更多内容

TinyEngine 低代码引擎到底是什么?

英勇无比的消炎药

开源 前端 低代码

华为云耀云服务器L实例:带你探索轻量应用服务器的魅力

YG科技

苹果电脑专业图表绘制推荐OmniGraffle Pro 正式版激活中文

胖墩儿不胖y

Mac软件 绘图软件 绘图工具

一文了解常见的Python爬虫框架Scrapy

TiAmo

python 爬虫 Scrapy

别学提示词:42类法大师 - 万字精华浓缩

豆哥

ChatGPT 提示词

工业自动化:国内外常用工业组态软件

2D3D前端可视化开发

物联网 工业自动化 工业控制系统 工业组态软件 组态工具

华为云API Explorer重磅推出API编排,开发者0代码高效构建工作流(体验用户招募中)

华为云PaaS服务小智

云计算 软件开发 华为云

支持向量机(SVM)

小魏写代码

Python 中的数字类型与转换技巧

小万哥

Python 程序员 软件 后端 开发

华为智慧屏,吹尽狂沙始到金

脑极体

AI智慧屏

轻量应用服务器,助力个人开发者最低成本创业

YG科技

为什么自动化测试要分层

老张

自动化测试

“00后”整顿职场,终于轮到网安圈了

脑极体

数据湖

蓝易云:Linux 命令 - cat 和 tail

百度搜索:蓝易云

云计算 Linux 运维 cat tail

Mac版本After Effects 2023怎么切换中英文UI界面

展初云

教程 Mac软件 After Effects

人工智能核心基础 - 规划和概要

茶桁

人工智能 机器学习 深度学习 CNN RNN

数字中国下西洋,需要一支怎样的船队?

白洞计划

AI 网易 风控

蓝易云:linux搭建sftp服务器教程!

百度搜索:蓝易云

云计算 Linux 运维 云服务器 sftp

英文版Premiere Pro怎么切换成中文?「Mac篇」

展初云

教程分享 Mac软件 Premiere Pro

腾讯Java后端社招三面,差点就挂了!

程序员小毕

Java 程序员 面试 程序人生 架构师

close()关闭文件方法

梦笔生花

大道总是孤独的——查理芒格如是说

少油少糖八分饱

投资 长期主义 能力圈 查理芒格 股东大会

英伟达,不能只做孤独的胜利者

自象限

PDF 批量处理软件 BatchOutput PDF激活最新版

mac大玩家j

PDF Mac软件 pdf处理工具

私藏管理秘诀帮你打造高绩效团队

敏捷开发

团队管理 项目管理 Scrum 敏捷开发 高绩效团队

视频剪辑中生成花字特效的代码案例详述

阿里云视频云

云计算 阿里云 视频云

微服务架构下数据一致性最佳实践_架构_王启军_InfoQ精选文章