本篇主要总结第七章:在微服务架构中实现查询

  • 在微服务架构中查询数据的挑战
  • 何时以及如何使用API组合模式实现查询
  • 何时以及如何使用CQRS模式实现查询

微服务架构中,查询通常需要检索分散在多个服务所拥有的数据库中的数据,跨服务数据查询的两种模式:

  • API组合模式

    • 简单,应尽可能使用
  • CQRS:命令查询职责隔离模式
    • 强大但复杂
    • 维护一个或多个视图数据库

API组合模式

API组合模式:由API组合器和两个或多个服务提供方组成,API组合器通过查询每个服务的API并组合结果,实现从多个服务检索数据的查询。

  • API组合器:调用数据提供方API并组合查询结果
  • 数据提供方服务

API组合模式需要解决的两个设计问题:

  • 由谁来担任API组合器的角色

    • 客户端
    • API Gateway
    • API组合器独立为服务
  • 如何编写有效的聚合逻辑
    • 尽可能并行查询,使用响应式编程模型

API组合模式的好处和弊端

  • 好处

    • 简单
  • 弊端
    • 增加了额外的开销

      • 将一个查询变成了N个查询
    • 带来可用性降低的风险
      • 依赖于每个服务提供方都可用,总体可用性是各服务提供方可用性的乘积。
      • 需要专门的策略来提高可用性
        • 缓存数据
        • 返回不完整数据
    • 缺乏事务数据一致性
      • 查询操作可能返回不一致的数据

CQRS模式(命令查询职责隔离)

CQRS模式:使用事件来维护从多个服务复制数据的只读视图,借此实现对来自多个服务的数据的查询。它将持久化数据模型和使用数据的模块分为命令端和查询端,他们拥有各自的独立数据库。

  • 命令端

    • 增、删和改操作CUD
    • 不需要join,仅基于主键的查询操作
    • 发布领域事件
  • 查询端
    • 查询操作R
    • 数据库视图
    • 订阅并处理领域事件并更新数据库

CQRS模式的好处和弊端

  • 好处

    • 在微服务架构中高效地实现查询
    • 高效地实现多种不同的查询类型
    • 在基于事件溯源技术的应用程序中实现查询
    • 更进一步地实现问题隔离
  • 弊端
    • 更加复杂的架构
    • 处理数据复制导致的延迟
      • 在命令端发布事件和在查询端处理事件并更新视图之间存在延迟。

        • 命令端和查询端API提供数据的版本信息,使其能够判断查询端是否过时,查询API调用端可以轮询查询直到获得最新版本的数据。

设计CQRS视图

CQRS视图模型包括视图数据库和三个子模块:

  • 查询API
  • 事件处理程序
  • 数据访问模块
  • 视图数据库

设计CQRS视图需要考虑:

  • 选择视图数据库
  • 设计数据库访问模块
    • 并发处理:乐观锁
    • 幂等事件处理程序
  • 添加和更新CQRS视图
  • 使用归档事件构建CQRS视图
    • 增量式构建CQRS视图

      • 快照+后续事件

学习总结

本章主要讲跨服务查询的问题。主要是两个解决方案:

第一,使用一个API查询组合器,分别调用各个服务提供的API查询数据,再将结果组合起来。第二,使用CQRS,设计单独的命令端和查询端,命令端通过事件通知查询端更新数据视图,需要跨服查询时直接查数据视图。

在项目的初期或者在比较简单查询的情况下,可以多使用API查询组合器。在项目后期或者对于一些较复杂的查询,需要使用CQRS。

微服务的好处与弊端_《微服务架构设计模式》-学习总结07相关推荐

  1. 微服务的好处与弊端_在云原生时代,就一定要用微服务吗?

    微服务架构可谓是当前软件开发领域的技术热点,它在各种博客.知识媒体和业界知名会议演讲上的出镜率非常之高,无论是做基础架构还是做业务系统的工程师,对微服务都相当关注,而这个现象与热度已经持续了近 5 年 ...

  2. 微服务的好处与弊端_一文了解微服务的流程和组织

    导语:微服务架构最重要的好处是它可以实现大型的复杂应用程序的持续交付和持续部署.持续交付和持续部署是DevOps的一部分,DevOps是一套快速.频繁.可靠的软件交付实践.高效能的DevOps组织通常 ...

  3. 微服务跨数据库联合查询_微服务架构下,解决数据库跨库查询的一些思路

    加关注,不迷路! 前言 在服务做微服务改造后,原先单库join查询已经不能满足要求,每个拆分的微服务对应一个数据库实例,而且部署在不同的服务器上,那么解决"跨库查询"就势在必行了. ...

  4. c3p0 服务启动获取连接超时_微服务架构中的熔断、降级

    微服务架构中熔断和降级是保证服务高可用的一项重要功能点,微服务区别于一体化项目的最大区别也再于熔断和降级,很多微服务项目的开发人员对熔断的理解就是当服务不可用的时候,为了让整体服务可以正常运行,需要让 ...

  5. 微服务 注册中心的作用_微服务架构Dubbo之注册中心(Zookeeper)

    注册中心简介 在微服务架构中,注册中心是核心的基础服务之一.在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中.Dubbo是一个在国内比较流行的分布式框架,被大量的中小型互联网公司所采用 ...

  6. 民科微服务照片怎么上传_微服务 (为微信公众号提供服务)

    微服务 面向中小企业的微服务产品提供自动应答菜单.微网站生成与管理.微信CRM系统服务.微信公众平台客服服务等综合性的运营管理标准化服务,是多功能的微信运营管理平台. 微信管家是将企业微信公众账号通过 ...

  7. 微服务跨数据库联合查询_微服务架构中如何解决连表查询的问题?

    谢邀. 首先我说一个很实际的问题,不是任何公司都需要微服务,或者说,不要上来就搞微服务,我看过北京不少创业公司的项目,这么说吧,估值在2亿美金以下的创业公司,基本上没必要搞什么微服务,总共就二十几口程 ...

  8. 微服务架构设计模式学习笔记——六边形架构

    目录 一 软件架构的4+1模型 二 分层架构风格 三 六边型架构 四 代码示例 五 总结 一 软件架构的4+1模型 先上图,软件架构的4+1模型如图1.1所示: 图1.1 4+1模型 注:上图中的元素 ...

  9. 微专业数据分析师 数据资料_微数据:元数据的内容

    微专业数据分析师 数据资料 In HTML most tags are semantic: that is, they carry meaning, but there is no way to pr ...

最新文章

  1. java程序猿必读的学习书籍,良心推荐!
  2. BigData/Cloud Computing:购买并登录Windows弹性云服务器之详细攻略(图文教程)—更优惠、更贴心!
  3. 微软2014编程之美初赛第一场——题目3 : 活动中心
  4. java ee 下版本_将旧版本从Java EE 5减少到7
  5. java面试题44关于 Socket 通信编程,以下描述正确的是:( )
  6. 【代码源 Div1 - 101】#61. 二分答案(贪心)
  7. java 常量 类型_Java的常量及数据类型
  8. linux 自动ping脚本,ping自动报警shell脚本forlinux
  9. pathy和c语言表达式,python学习(2)–变量与表达式
  10. 精美Java 图书管理系统
  11. 博弈论的经典入门课程和资料
  12. 锂电池常规认证-各国认证大全
  13. 什么?你连个三色渐变圆角按钮都需要UI切图?
  14. 地理空间索引:线段与多边形的GeoHash编码
  15. 算法题c++刷题记录之数据结构部分
  16. 论文写作——韬ASMI29 introduction、related work两部分语句修改
  17. 导出excel表格遇到的坑
  18. Vmware ESXI 6.7升级版本
  19. Facebook CEO扎克伯格演讲实录
  20. 伪静态网站安全攻防如何理解

热门文章

  1. 如何成为一个优秀的高级C++程序员
  2. Hue添加RDBMS(关系型数据库)
  3. 阿里云峰会|数据库也能自动驾驶?DAS全天候给你保驾护航!
  4. 拿下 Gartner 容器产品第一,阿里云打赢云原生关键一战
  5. 理解卷积神经网络的利器:9篇重要的深度学习论文(下)
  6. PyODPS DataFrame:统一的数据查询语言
  7. 众安每秒3.2万张保单的背后,阿里云输出了什么能力?
  8. 首提 Database Plus 新理念,SphereEx 获数百万美元天使融资,接棒 ShardingSphere 打造新型分布式生态
  9. 常见的Hadoop十大应用误解
  10. linux从新手到高手,1.3 养成良好的Linux操作习惯免费阅读_循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用免费全文_百度阅读...