写点什么

微服务架构的设计模式

  • 2015-04-21
  • 本文字数:969 字

    阅读完需:约 3 分钟

前不久,Java Code Geeks 发表了一篇文章,分析单体应用与微服务的优缺点。近日,该网站又发表了一篇文章,提供了六种微服务架构的设计模式。

聚合器微服务设计模式

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

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

代理微服务设计模式

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

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

链式微服务设计模式

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

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

分支微服务设计模式

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

数据共享微服务设计模式

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

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

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

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

感兴趣的读者可以参考《微服务中的耦合与自治》一文为自己的微服务选择合适的消息传递模式。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流。

2015-04-21 05:5841738
用户头像

发布了 1008 篇内容, 共 437.3 次阅读, 收获喜欢 346 次。

关注

评论 1 条评论

发布
用户头像
无论国内还是国外,很多人都没原创,只是写一些自己的读后感。以后标题写清楚:读后感。不是什么垃圾都叫文章
2020-11-30 14:09
回复
没有更多了
发现更多内容

Hybrid app本地开发如何调用JSBridge

甜点cc

JavaScript 前端 Hybrid 10月月更

Jib构建镜像问题从定位到深入分析

程序员欣宸

Docker 10月月更 Jib

Centos7对外开放端口 | 运维 | Linux

Appleex

Linux Centos 7 运维、

Gartner发布2023年十大战略技术趋势播

雨果

Gartner

如何实现一个SQL解析器

vivo互联网技术

sql 解析 SQL解析

在线问题反馈模块实战(十八):实现excel台账文件记录批量导入功能

bug菌

springboot 项目实战 10月月更

如何实现图像人脸融合?

夏夜许游

人工智能 AI 融合 图像人脸

Vue_cli2和Vue_cli3

Studying_swz

前端 10月月更

测试覆盖率治不好你的精神内耗

光毅

测试 测试覆盖率

JNI中实现类似C++回调的方法(1)

中国好公民st

c++ jni 10月月更

八大排序(下)

lovevivi

c 数据结构 10月月更

“程”风破浪的开发者|我的js学习小技巧

言程序

JavaScript 学习方法 “程”风破浪的开发者

MySQL 中文分词原理

乌龟哥哥

10月月更

【C++】选择排序​

游坦之

10月月更

堆排序详解(含对时间复杂度的分析)

lovevivi

c 数据结构 10月月更

uniapp H5端精准定位

源字节1号

软件开发 小程序开发

Vue_Webpack详解

Studying_swz

前端 10月月更

【一Go到底】第二十四天---时间和日期函数

指剑

Go golang 10月月更

在线问题反馈模块实战(十七):实现excel模板在线下载功能

bug菌

springboot 项目实战 10月月更

SpringCloud-06 Zuul学习笔记

游坦之

10月月更

科兴未来:产业创新和人才服务为一体化的双创体系

科兴未来News

#双创赛事# #双招双引# #人才政策# #创业大赛#

浅析HTML页面的生命周期

CoderBin

html 前端 10月月更

“程”风破浪的开发者 | 踉踉跄跄的Java之路

游坦之

Java 学习方法 “程”风破浪的开发者

Python高阶语法---函数

木偶

Python 函数 10月月更

在线问题反馈模块实战(十六)​:实现查详情功能

bug菌

springboot 项目实战 10月月更

八大排序 (上)

lovevivi

c 数据结构 10月月更

你应该知道的数仓安全:都是同名Schema惹的祸

华为云开发者联盟

数据库 后端 华为云 企业号十月 PK 榜

CSS中px、rem与em的区别

木偶

CSS 前端 10月月更

JavaScript基础知识-JS数据类型

木偶

JavaScript 前端 10月月更

规律跑步,让生活更有掌控感

BY林子

跑步 掌控

数据湖(九):Iceberg特点详述和数据类型

Lansonli

数据湖 10月月更

微服务架构的设计模式_架构_谢丽_InfoQ精选文章