? 微服务分布式一致性模式_CQITer_重庆IT人之家 yabo10.com亚博体育,亚博娱乐在线网站,亚博国际娱乐7171 ?

微服务分布式一致性模式

微服务拆分后遇到的一个麻烦是分布后的一致性问题。单体架构的业务处理和数据都在一个进程里面,一致性保障很成熟,开发人员基本上不用关心。当把业务系统拆分到不同进程时,就遇到了技术性一致性问题。这带来了纠结,我们希望有一颗银弹,一把解决问题。但由于分布式一致性在(CAP)理论上没有完美的解决方案,我们所能选择的方案是在特定业务场景下的选择。

我们这里讨论的分布是指业务逻辑上做了拆分导致的分布,而不是数据量特别大导致的分布。

如果业务上不拆分,数据量特别大需要做分布,可以选择支持大数据的分布式数据库。可以选择Cassandra, MongoDB等NoSQL,或者TiDB这类支持SQL的分布式方案。

如果业务上进行了拆分,不论选什么数据库都不能解决分布式一致性问题。把数据库或者分布式数据库看成是一个系统,能处理一个外部请求在数据库内部的分布式问题,但不能处理多个外部请求的一致性问题。

分布式强一致的数据库不能解决业务逻辑拆分带来的分布式一致性问题,我们还得继续纠结如何解决业务分布式一致性的问题。

首先我把微服务分布式一致性问题分为数据共享一致性和业务交易一致性问题。

一、数据共享一致性

在单体架构的时候用同一个数据库,不存在数据共享问题。微服务强调要独立数据库,引起数据如何共享的问题。

数据共享分为拉和推两种模式,拉指消费者去供应商那边拉数据,推指供应商主动把数据推到消费者面前。

1. 拉-视图共享

对于一般的企业信息系统,数据量不大,并发需求也不大,我建议所有的微服务用同一个数据库实例,但是拆分在不同的Schema。这样的好处是在业务逻辑上数据库是独立的,也可以独立演进。然后数据库又可以集中管理。这个方案对于大型遗留系统拆分尤其适用,因为原本就是在一个库里面,为了业务更好的独立演进进行数据库Schema拆分,又能延续原有的数据库实例管理技术。由于不同的微服务实际运行在同一个数据库实例上,可以简单地建视图进行数据共享。

需要注意的是,不要拉整个表出去,根据需要选择几个字段。这种模式技术上简单,坏处有两个:一是由于视图同步的数据是实时的,应用可能基于实时同步数据的假设进行设计,会导致以后做分布式扩展的时候特别困难;二是视图很容易暴露出表结构,这需要特别加强对视图的设计和结构管理,让暴露出去的视图不要直接绑定在现有的表结构上。视图所需的字段是外部需要,而不是表上面有什么。这样视图就是接口,只不过是强耦合在特定的数据库实例上。

2. 拉-API获取

微服务最推荐的方式是服务方提供数据API,消费者需要的时候去拉取。好处是消费者和供应方技术上完全解耦,坏处是提高了开发成本。如果消费者使用API方式获取所需数据,建议使用异步Stream方式进行编程。 如果一次业务请求需要拉取多个数据源,不建议用同步的方式调用,因为会延长处理时间。建议使用reactiveX模式进行异步拉取和组装 。

3. 推-事件消息

发生事件时发送消息是DDD CQRS模式,即解决了消费者要拥有数据用的爽快的问题(根据需要建立本地数据结构、获取性能和方式), 也解决了数据库技术异构的问题。带来的问题是需要一个消息平台,并且消费者或者供应方都要耦合在一个消息平台技术上。对于大型遗留系统改造不是很友好,一方面遗留系统的消息平台往往不符合高并发大数据量的性能要求,另一方面对于新的微服务也不想依赖老的消息平台,而想要用Kafka这样的亚博娱乐在线网站高并发轻量的消息平台。

微服务分布式一致性模式

4. 数据共享一致性选择总结:

对于遗留系统改造和数据量不大(日交易量不超过百万)的应用,建议使用不同微服务创建不同Schema,但用同一个数据库实例,然后通过视图的方式进行数据共享。

如果有些业务数据量非常大又需要共享,使用API共享,利用异步Stream编程进行数据共享。

如果微服务平台技术设施成熟,可以使用推送事件消息模式, 既解决共享数据消费便利性问题,又解决数据结构解耦,并且使用轻量消息平台(Kafka)只是有轻度的技术耦合。

二、业务交易分布式一致性

业务交易分布式一致性指一次请求,但分布在不同的微服务系统处理,引发一致性协调的问题。

交易分布式一致性分为补偿模式,二次提交模式和Saga模式。

1. 补偿模式

补偿模式主要是通过重试达到最后的成功,仅适用于交易请求在业务上必须没有失败的场景。

补偿模式用的最普遍的是消息投递,假设给A发消息,如果没有收到A确认消息已收到,就继续发送,直到A确认收到消息为止。

相关推荐
新闻聚焦
猜你喜欢
热门推荐
  • 微软AI面试题有多难?这里有一份样卷

      究竟什么样的AI人才能被微软这样的巨头聘用呢?今天,文摘君就淘来了几道微软AI 面试题,同时给出了最基本的解答......

    06-25????来源:澎湃新闻网

    分享
  • 腾讯吐个槽“讲产品故事拿大奖”活动:

      每一个产品故事都值得被聆听, 每一位奋斗者的历程都值得被肯定! 今天,「吐个槽」X「腾讯课堂产品学院」发起讲产品故......

    09-02????来源:未知

    分享
  • 全球最聪明的大脑怎么看AI?他们预测了

      2017年AI领域取得了诸多成果。2018年AI又将何去何从?以下是来自世界顶级研究人员和行业领军人物对2018年AI领域发展作......

    02-20????来源:虎嗅网

    分享
  • 2017JavaScript框架战报 - React分战场

      我们来看看与React有关的软件包的生态系统。当Facebook构建React时,就有许多来自开源社区的第三方软件包。为提供完......

    02-27????来源:湖北新闻网

    分享
  • 小白学数据:教你用Python实现简单监督学

      监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近......

    03-05????来源:今日头条

    分享
  • 现代编程语言Swift、Kotlin等十大有趣功能

      最近学习了一些现代编程语言,比如Reason,Swift,Kotlin和Dart。这些编程语言提供了许多新功能,本文主要分享了我认......

    04-29????来源:祁东新闻网

    分享
  • 领域场景分析的6W模型

      组成场景的要素常常被称之为6W模型,即描写场景的过程必须包含Who,What,Why,Where,When与hoW这六个要素。......

    04-30????来源:砍柴网

    分享
  • 开源应用服务器WildFly 12发新季度交付模式

      WildFly 12 Final版本现在已经可以下载了,WildFly是一款灵活的开源应用服务器,支持开发人员构建轻量级应用程序。支持......

    05-10????来源:青岛新闻网

    分享
  • 基于Spring Cloud的微服务落地

      微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,......

    06-04????来源:广西新闻网

    分享
  • 为什么阿里工程师纷纷在内网晒代码?

      前阵子,在阿里一个小黑屋里,5名对代码有着极致追求的工程师参与阿里代码领域最高荣誉“多隆奖”的最终角逐。......

    06-08????来源:四川新闻网

    分享
返回列表
Ctrl+D?将本页面保存为书签,全面了解最新资讯,方便快捷。