您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

分布式架构中数据一致性常见的几个问题

时间:2020-05-09 12:13:52  来源:  作者:
分布式架构中数据一致性常见的几个问题

 

转载本文需注明出处:微信公众号EAWorld,违者必究。

针对分布式架构下的数据一致性,大家也许会问这样的问题:跨系统间分布式事务如何解决?系统内多个服务的分布式事务如何解决?一个服务内多个数据源/数据库的分布式事务如何解决?……这些问题大家是很容易理解的,但是由于术语不准确,所以解释起来会有二义性,所以先要统一语言或者术语,也就是统一概念:

分布式架构中数据一致性常见的几个问题

 

域是一个虚拟的分类,几个系统属于某一个域,例如网上银行和手机银行都属于电子渠道领域;

传统的单体应用,指的就是系统,在微服务架构下,单体应用采用前后端分离模式,前端一般使用 Nginx,Ngnix 进程间采用主备模式,系统的后端可以分为多个应用,每个应用有一组对等的应用进程(也称为应用实例)提供服务,每个应用对应一个数据库,实际上在分库的情况下,有可能一个应用对应多个数据库。复杂一点的是网关,网关由一组对等的网关实例组成,如果多个系统共享一个网关,网关和系统就是1对多的关系,也可以一个系统独享一个网关,就是一对一情况,下图是一个概念的示例,使用的是系统独享网关模式。

分布式架构中数据一致性常见的几个问题

 

这里,我们看看经常问的一些问题:跨系统间分布式事务、系统内多个服务的分布式事务、一个服务内多个数据源/数据库的分布式事务,这些问题完全是从技术的角度做归纳,用上述概念应该改为:系统间的数据一致性、系统内应用间的数据一致性、应用内部对应多数据库的数据一致性,另外可以增加一个数据库对应多个应用的数据一致性(技术上存在可能,但从上述概念上看应该是在架构上避免的)。

这四个情况如何处理呢?需要我们总结归纳,我在做总结归纳的时候,往往希望首先确定原则,这里的原则是从业务的角度进行分析,而不是考虑技术的可能性,因为技术的可能性无穷无尽,是一个无限组合,理论上任何情况都能发生,考虑所有情况就是胡扯了,必须根据业务的特征进行归纳。这里,我不叫分布式事务而是数据一致性就是这个道理,从业务角度目标是解决分布式情况下的数据一致性,而不是技术角度看的分布式事务。

有了这个原则,就可以分别分析这四种情况了:

1、系统间的数据一致性

需要服务实现 TCC或者业务补偿模式,由框架(业务协调器)自动调用,减少人工参与,或者实现幂等服务,反复投递。这两种方式都没法做到数据的 100% 一致,在失败的时候都需要有重试的机制,例如补偿失败要重试(这就是框架的好处),多次重试还是失败,记录失败历史,业务上人工处理。不要害怕人工处理,只要减少人工处理的机会就好了,在工行时就是提出人工干预比例降低若干个百分点作为目标。

2、系统内应用间的数据一致性

这个可以使用华为 SAGA 的模式,也就是建立一个共享的事务协调器模式(虽然我对这个共享方式不喜欢,不是分布式吗,为啥还搞出一堆集中式的东西,既然如此,为啥应用间调用不能走网关,要直连,说共享不好,到这里就是共享好了),好了,括号里是吐槽,简单的方式是用共享的事务协调器模式,记录服务调用的事件,在合适的时机调用TCC和补偿服务。

3、应用内部对应多数据库的数据一致性,是个反模式,不要做通用方案

一般来说,一个应用对应一个数据库,不允许一个应用对应多个数据库,多个数据库的情况应该分成多个应用,通过服务调用方式解决,这是一个基本原则,否则就是一个反模式设计。但是,就是有很多人较真,一定问有这个情况你怎么解决,我的回答是架构设计解决这个问题,在技术上不支持这种方式,让设计者必须在架构解决,而不是利用技术手段解决不合理的架构设计,否则后患无穷(这一点还是需要勇气和坚持的)。空口无凭,实例为证,一般我会举抢红包的例子。大家知道,抢红包的并发非常高,又有数据一致性的要求,无论哪个互联网公司,都是根据红包 ID,把数据路由到一个数据库中,用数据库事务保证数据一致性,在银行互联网账务系统(2类 3类户)的情况,也是把同一账务的数据路由到不同的数据库中(见下图)。还会提到一种情况,在分库分表的时候,如果恰好数据分到了不同库中,恰好要做一个批量的调整,恰好在一个事务中,如何解决。我认为这种情况的发生,恰恰说明设计有问题,分库的原则也是按业务拆分,不是用技术手段随机分解,既然按业务拆分,批量处理的时候就应该不是一个业务上的事务,在技术上不提供这样的实现,才可以在架构设计考虑问题。不排除在某个系统中可以做一些框架,解决上述问题,但是,这一定不是个通用的方案。

分布式架构中数据一致性常见的几个问题

 

根据上图,我们的概念模型是由调整的,要多一个应用分区的情况:

分布式架构中数据一致性常见的几个问题

 


分布式架构中数据一致性常见的几个问题

 

4、一个数据库对应多个应用的数据一致性

这种情况经常也是一个反模式,既然是共享一个数据库,把应用放在一起就好了。如果真的有需要(例如一个模块部署过于频繁,单独拆出来做一个应用),那也应该和多应用多数据库一样处理。

以上,即是我分析的分布式架构下几种不同情况的数据一致性控制方式。

分布式架构中数据一致性常见的几个问题

 

关于作者:焦烈焱,普元信息CTO,致力于技术创新和金融创新解决方案研究。专注于企业技术架构领域,对分布式环境的企业计算、 企业信息架构的规划与实践有着丰厚经验,带领普元技术团队相继在云计算、大数据及移动开发领域取得多项突破,并主持中国工商银行、中国建设银行等多家大型企业技术平台的规划与研发。

关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享。



Tags:分布式架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一个软件系统随着功能越来越多,调用量急剧增长,整个系统逐渐碎片化,越来越无序,最终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来越无序。架构的本质就...【详细内容】
2021-09-24  Tags: 分布式架构  点击:(48)  评论:(0)  加入收藏
大约一年前,我在一致性模型上写了这篇文章的第一个版本,但我从来没有对它感到满意,因为它写得很匆忙,而且这个主题足够重要,需要得到更彻底的处理。ACM Queue要求我修改它以便在...【详细内容】
2020-12-22  Tags: 分布式架构  点击:(146)  评论:(0)  加入收藏
引言随着越来越多的人参与到互联网的浪潮来,曾经的单体应用架构越来越无法满足需求,所以,分布式集群架构出现,也因此,分布式搭建开发成为了Web开发者必掌握的技能之一。那什么是...【详细内容】
2020-10-14  Tags: 分布式架构  点击:(70)  评论:(0)  加入收藏
围绕Database、Bigdata、AiOps的企业级专业社群。顶级大咖、技术干货,每天精品原创文章推送,每周线上技术分享,每月线下技术沙龙,受众20W+。...【详细内容】
2020-08-10  Tags: 分布式架构  点击:(60)  评论:(0)  加入收藏
近年来,随着银行业务量的快速增长,一些大型商业银行早已布局分布式架构转型,这不仅是国家安全战略的要求,也是随着互联网发展,商业银行提升自身金融服务能力的需要。商业银行系...【详细内容】
2020-08-04  Tags: 分布式架构  点击:(67)  评论:(0)  加入收藏
一为什么要做分布式数据库架构改造?云计算大数据时代,传统的数据库架构已经无法支撑企业高容量的数据增长,满足高并发的业务需求。对企业数据库进行分布式架构设计,打破了数据库...【详细内容】
2020-06-10  Tags: 分布式架构  点击:(52)  评论:(0)  加入收藏
开发排查系统问题用得最多的手段就是查看系统日志,在分布式环境中一般使用ELK来统一收集日志,但是在并发大时使用日志定位问题还是比较麻烦,我们来看下面的图 上图一个用户请...【详细内容】
2020-06-09  Tags: 分布式架构  点击:(39)  评论:(0)  加入收藏
一、前言​  随着社会的发展,技术的进步,以前的大型机架构很显然由于高成本、难维护等原因渐渐地变得不再那么主流了,替代它的就是当下最火的分布式架构,从大型机到分布式,经历...【详细内容】
2020-05-21  Tags: 分布式架构  点击:(56)  评论:(0)  加入收藏
转载本文需注明出处:微信公众号EAWorld,违者必究。针对分布式架构下的数据一致性,大家也许会问这样的问题:跨系统间分布式事务如何解决?系统内多个服务的分布式事务如何解决?一个...【详细内容】
2020-05-09  Tags: 分布式架构  点击:(49)  评论:(0)  加入收藏
基于springboot+dubbo分布式架构,提供分布式缓存、分布式锁、分布式Session、读写分离等统一组件及RBAC权限管理等模块。前言以分布式基础架构为依托,包含但不仅限于分布式架...【详细内容】
2020-03-16  Tags: 分布式架构  点击:(153)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条