写点什么

微服务架构的设计模式

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

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

关注

评论 1 条评论

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

疫情下的人生百态

6979阿强

图计算 GraphScope 新冠

Tapdata Cloud 版本上新!率先支持数据校验、类型映射等6大新功能

tapdata

MySQL nosql schema

百分点感知智能实验室:语音识别技术发展阶段探究

百分点科技技术团队

语音识别 百分点科技 感知智能

区块链盲盒游戏app软件开发|盲盒游戏软件介绍

量化系统19942438797

区块链 智能合约 盲盒

跨越AI天堑时:行动代号“盘古大模型”

脑极体

读书笔记 -《数据密集型应用系统设计》- 数据编码

KayTin

游戏开发者的通关之旅,华为AGC for Games带来了什么?

叶落便知秋

致远互联2021年中报:扎根协同的广阔天地,撸起袖子加油干

海比研究院

FL Studio中钢琴卷帘窗的工具的使用

懒得勤快

ipfs矿机是什么?ipfs矿机挖出的币能交易吗?

区块链 分布式存储 ipfs挖矿 ipfs矿机 filecoin挖矿

算法毕业总结

Geek_Gu

AlphaFold2“登陆”北鲲云平台,云计算助力科研大放异彩

北鲲云

细思极恐!Alibaba新产SpringBoot深度历险(嵩山版)开源

Java 编程 架构 面试 架构师

深入了解RocketMQ之过滤器

邱学喆

bloomfilter TAG过滤 SQL92

微信开源C/C++ RPC框架PhxRPC

OpenIM

webrtc 即时带宽评估器(BitrateEstimator)

webrtc developer

WebRTC

融云 X-Live 系列直播启动,遇见通信的无限可能

融云 RongCloud

开发者 音视频 通信 融云 即时通信

The Data Way Vol.3|做到最后只能删库跑路?DBA 能做的还有很多

SphereEx

数据库 开源

GitHub获120w+star的JDK源码剖析手册,竟出自Alibaba高管之手?

Java 架构 面试 程序人生 Alibaba

AI加持数据管理服务DAS,让数据库运维更“聪明”,DBA更轻松

华为云数据库小助手

GaussDB dba 华为云DAS 华为云数据库

Google官方bazel构建工具的安装

Changing Lin

8月日更

新时代大视频产业的底座,视频云创变了什么?

阿里云CloudImagine

阿里云 直播技术 视频制作 视频流 视频云

我遇到的那些工长

escray

生活记录 8月日更

架构实战营模块1作业

^_^

架构实战营

程序员应该专注技术还是转管理?

石云升

职业规划 职场经验 8月日更

netty系列之:自建客户端和HTTP服务器交互

程序那些事

Java Netty 程序那些事

不用手机,如何让猫给你打视频电话丨日常小技

声网

物联网 目标检测 目标跟踪

项目中全局变量的灵活用法 12/100 发布文章

CodeNongXiaoW

分享 10 个高星的创意项目!

程序员鱼皮

Java Python 数据库 大前端 Go 语言

架构设计-模块一

逝水流

架构

百分点大数据技术团队:BI嵌入式分析实践

百分点科技技术团队

BI 百分点科技 嵌入式分析

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