写点什么

微服务架构的设计模式

  • 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:5841793
用户头像

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

关注

评论 1 条评论

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

Go- for循环

HelloBug

for Go 语言

Go- break和continue

HelloBug

Go 语言 break continue

Socket 通信原理

一个大红包

8月日更

Tron波场链智能合约系统开发案例|波场链源码搭建

Geek_23f0c3

TRONex波场智能合约 DAPP智能合约交易系统开发 波场DAPP

英特尔CEO帕特·基辛格:面向未来的数字化需求,推进未来计算创新、探索与颠覆

科技新消息

Agora 教程丨一个典型案例,教你如何使用水晶球“数据洞察”

声网

Agora 教程 水晶球

适女化科技(一):伪需求,真消费

脑极体

BuildPacks 打包

Zhang

Docker image CNB OCI

跨团队项目的集成测试实践分享

PingCode研发中心

软件测试 测试

Go- switch-case结构

HelloBug

Go 语言 switch case

ipfs矿机公司哪家好?ipfs矿机公司实力排行?

分布式存储 Filecoin ipfs挖矿 ipfs矿机 ipfs矿商排名

亚信数据库AIDB通过统信UOS认证,国产自主可控项目新选择

亚信AntDB数据库

国产化 国产数据库 亚信数据库AIDB

Go- goto和label

HelloBug

Go 语言 goto label

探索技术与应用融合的区块链 实现产业良性发展

CECBC

Vue进阶(五十九):ES数组操作:splice() 实现数组删除、替换、增加指定元素

No Silver Bullet

Vue 8月日更 splice

Go- 函数返回值

HelloBug

函数 返回值 Go 语言

量化策略APP系统开发,马丁策略交易平台

13530558032

InnoDB 表空间

leonsh

MySQL innodb 表空间

最好用的 Angular 甘特图组件 ngx-gantt

PingCode研发中心

软件 工具 甘特图 ngx-gantt

docker概念很乱?俺来替你理一下!

Java Docker 架构 后端

BI软件漫谈

格林海文

BI Tableau 帆软

项目进度经常超时怎么办?项目经理如何有效管理项目进度?

优秀

项目管理工具

Python代码阅读(第16篇):列表求差集

Felix

Python 编程 Code Programing 阅读代码

云与AI真的能互相成就?还是最好各自独立行走?

脑极体

模块五:微博评论模块高性能高可用计算架构设计

kk

架构实战营

上游思维:凭一己之力能做些什么?

石云升

读书笔记 8月日更 上游思维

干货!DataPipeline2021数据管理与创新大会全篇划重点

DataPipeline数见科技

大数据 数据融合 数据管理

火爆 GitHub!这个图像分割神器开源了

百度开发者中心

人工智能 开源 最佳实践 图像

再也不怕 JavaScript 报错了,怎么看怎么处理都在这

前端依依

学习 技术 大前端 js

快手基于 Flink 构建实时数仓场景化实践

阿里云大数据AI技术

做正确的事情,而不是把事情做正确

非著名程序员

个人成长 提升认知 认知提升 8月日更

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