AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

  • 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:534634

评论

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

干货 | 带你了解 EMC—— 什么是 EMC?

元器件秋姐

电磁兼容 元器件电商 华秋商城 电子工程师 电子科普

Baklib|如何做好知识库网页?

Baklib

敏捷开发四个会议如何正确召开?

PingCode研发中心

敏捷开发

web服务器

我叫于豆豆吖.

11月月更

helm部署mysql

程序员欣宸

Helm 11月月更 kuernetes

防患未然 | AIRIOT城市管廊智能运维解决方案

AIRIOT

低代码 物联网 智慧管廊

传统客服中心向“互联网+”转型的关键点——帮助中心

Baklib

C++特殊类的设计

可口也可樂

c++ 11月月更 特殊类的设计

如何搭建 SaaS 产品的客户服务体系

产品海豚湾

SaaS平台 B端产品 SaaS 产品 11月月更 客户成功

终于有阿里大牛把困扰我多年的计算机组成原理:网络通信讲明白了

小二,上酒上酒

计算机 计算机原理 TCP协议

年薪120W的架构师简历你见过吗?java程序员该如何达到?

小二,上酒上酒

学习 架构 简历规划

解读 K8s Pod 的 13 种异常

阿里巴巴云原生

阿里云 Kubernetes 云原生

python的标准库与扩展库中对象的导入与使用

乔乔

11月月更

完全解析分布式存储,带你了解HDFS的块

好程序员IT教育

hdfs 分布式

【CSPO认证】12月17-18日在线周末班 | 全国招生

ShineScrum

产品负责人 CSPO认证 CSPO

母亲斗情敌,羞得儿子无地容!一瓶“醉三皇”,圆了多少孝亲梦!

联营汇聚

寒冬之下,年销售增速不降反增,这家国企做对了什么?

用友BIP

The camera application scenrios on Wallys DR40X9 ipq4019/ipq4029 industrial 5g router

wallysSK

IPQ4019 ipq4029

WOS新商业操作系统:中国头部SaaS的一次进阶

ToB行业头条

Baklib帮助中心|如何设置好客户服务帮助您的客户?

Baklib

项目重构演进之路

杨充

从发现问题到创造价值 数据智能如何助力商家双11高质量增长?

阿里技术

数据分析 智能数据

OpenSergo & ShardingSphere 社区共建微服务视角的数据库治理标准

阿里巴巴云原生

阿里云 云原生 开源微服务 OpenSergo

一文熟悉 Go 的基础语法和基本数据类型

陈明勇

Go golang 11月月更

视效剧情口碑双爆棚!Netflix 现象级剧集《怪奇物语》第四季神级视效专访大揭秘!

Renderbus瑞云渲染农场

Renderbus瑞云渲染 CG动画电影 CG特效制作

CentOS7安装MySQL-5.7.36

蜗牛也是牛

第二章 TCP/IP-IOS七层模型

我叫于豆豆吖.

11月月更

Gartner 2023 年十大技术趋势,资料汇总(官方PDF & 直播实况)

填空时光

Gartner Gartner预测 gartner电子书 咨询

第一章 TCP/IP协议

我叫于豆豆吖.

11月月更

week6作业 - 拆分电商系统为微服务

in9

【愚公系列】2022年11月 微信小程序-页面间通信

愚公搬代码

11月月更

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