当前位置: 首页 > news >正文

六种微服务架构的设计模式

聚合器微服务设计模式

这是一种最常用也最简单的设计模式,如下图所示:

聚合器调用多个服务实现应用程序所需的功能。它可以是一个简单的Web页面,将检索到的数据进行处理展示。它也可以是一个更高层次的组合微服务,对检索到的数据增加业务逻辑后进一步发布成一个新的微服务,这符合DRY原则。另外,每个服务都有自己的缓存和数据库。如果聚合器是一个组合服务,那么它也有自己的缓存和数据库。聚合器可以沿X轴和Z轴独立扩展。

代理微服务设计模式

这是聚合器模式的一个变种,如下图所示:

在这种情况下,客户端并不聚合数据,但会根据业务需求的差别调用不同的微服务。代理可以仅仅委派请求,也可以进行数据转换工作。

链式微服务设计模式

这种模式在接收到请求后会产生一个经过合并的响应,如下图所示:

在这种情况下,服务A接收到请求后会与服务B进行通信,类似地,服务B会同服务C进行通信。所有服务都使用同步消息传递。在整个链式调用完成之前,客户端会一直阻塞。因此,服务调用链不宜过长,以免客户端长时间等待。

分支微服务设计模式

这种模式是聚合器模式的扩展,允许同时调用两个微服务链,如下图所示:

数据共享微服务设计模式

自治是微服务的设计原则之一,就是说微服务是全栈式服务。但在重构现有的“单体应用(monolithic application)”时,SQL数据库反规范化可能会导致数据重复和不一致。因此,在单体应用到微服务架构的过渡阶段,可以使用这种设计模式,如下图所示:

在这种情况下,部分微服务可能会共享缓存和数据库存储。不过,这只有在两个服务之间存在强耦合关系时才可以。对于基于微服务的新建应用程序而言,这是一种反模式。

异步消息传递微服务设计模式

虽然REST设计模式非常流行,但它是同步的,会造成阻塞。因此部分基于微服务的架构可能会选择使用消息队列代替REST请求/响应,如下图所示:

相关文章:

  • 记录和保存日常文件的好处_无需整理
  • webpack 与 热编译webpack-dev-server
  • HDU1878 欧拉回路
  • 【整理】微信小程序开发须知
  • Unity Remote 5 使用
  • puppet自动化技术基础分析及实例部署详解
  • DSOframer的简单介绍和资源整理
  • swift开发多线程篇 - 多线程基础
  • 杭电2003——求绝对值
  • 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)...
  • linux 性能篇 -- ps的用法
  • Linux命令篇之du命令和read命令
  • Skynet 小试Debug_console...
  • 大数据~说说Hadoop
  • oracle获取clob调优
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • emacs初体验
  • GitUp, 你不可错过的秀外慧中的git工具
  • Git同步原始仓库到Fork仓库中
  • JavaScript 基础知识 - 入门篇(一)
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JSDuck 与 AngularJS 融合技巧
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Leetcode 27 Remove Element
  • Next.js之基础概念(二)
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Node + FFmpeg 实现Canvas动画导出视频
  • PermissionScope Swift4 兼容问题
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 订阅Forge Viewer所有的事件
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 后端_ThinkPHP5
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 前端
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 学习JavaScript数据结构与算法 — 树
  • 移动端 h5开发相关内容总结(三)
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • # include “ “ 和 # include < >两者的区别
  • (42)STM32——LCD显示屏实验笔记
  • (day 12)JavaScript学习笔记(数组3)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)c52学习之旅-点亮LED灯
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)linux文件内容查看
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (算法)Game
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • *** 2003
  • **PHP分步表单提交思路(分页表单提交)