【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

微服务架构的设计模式

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

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

关注

评论 1 条评论

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

一个 fault injection 测试的三次演化

QE_LAB

硬件 测试环境

浅谈Kotlin编程01.初识Kotlin和入门示例

南巷羽

android kotin 11月月更

头一次见!阿里牛人上传的600页JVM垃圾优化笔记飙升GitHub榜首

程序知音

Java JVM 性能调优 java架构 后端技术

不只是负载均衡,活字格智能集群的架构与搭建方案

葡萄城技术团队

华为首发微存储新品,破解互联网海量数据高效存储难题

科技热闻

生于云,长于云,华为云推动开发者数字化创新

科技热闻

动态路由协议一

初学者

协议 路由 11月月更

Hexo框架+Github 搭建免费静态博客教程(一)

程序员余白

Hexo Github' 博客搭建 11月月更

完美避开,99%的PCB工程师都踩过的坑!

华秋PCB

工具 PCB PCB设计

啃透这份“高并发编程核心笔记”,跳槽阿里直接涨10K

小小怪下士

Java 编程 程序员 高并发 阿里

“基础-中级-高级”Java后端25个技术栈面试题集结

程序知音

Java java面试 后端技术 Java面试八股文

2022最全Java面试八股文,已经帮助512人进入大厂(备战明年春招必看)

程序知音

Java java面试 java架构 后端技术 Java面试八股文

复杂A/B实验如何设计?火山引擎DataTester帮你落地!

字节跳动数据平台

大数据 数据 火山引擎 A/B测试

如何开发一个标准的云原生应用?

阿里巴巴云原生

阿里云 微服务 云原生

深圳区块链DAPP程序开发未来发展简介

W13902449729

dapp开发

Java面试题解析:如何使用ReentrantLock的条件变量,让多个线程顺序执行?

千锋IT教育

大咖分享 | 如何构建 Alluxio 审计日志分析系统

Alluxio

分布式 Alluxio 大数据 开源 数据编排 审计日志

python的基本操作

乔乔

11月月更

14位资深大咖,11 场技术演讲!龙蜥云原生专场精彩回顾来了

OpenAnolis小助手

开源 技术分享 龙蜥社区 2022云栖大会 云原生专场

BI智慧工程行业应用方案丨文末获取三重资源包

葡萄城技术团队

Nacos 多语言体系再添新员:首个 Rust 语言版本正式发布!

阿里巴巴云原生

阿里云 云原生 nacos

断连?消息丟失?不用愁!教你快速在物联网平台上排查问题——设备管理运维类

阿里云AIoT

阿里云 物联网平台 设备上云

直播预告 | PolarDB for PostgreSQL - 共享存储在线扩容

阿里云数据库开源

数据库 postgresql 阿里云 开源 polarDB

记一次多个Java Agent同时使用的类增强冲突问题及分析

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

钉钉全栈化实践总结-前端篇

阿里技术

前端 钉钉 全栈

华为阅读年度会员4折,万元好礼抢先看

叶落便知秋

一站式工业边缘数据采集处理与设备反控实践

EMQ映云科技

物联网 IoT neuron 11月月更 eKuiper

动态路由协议

初学者

协议 路由 11月月更

大数据生态中的 RocketMQ 5.0

Apache RocketMQ

消息队列 Apache RocketMQ

探究多线程和异步

C++后台开发

多线程 后端开发 异步 linux开发 C++开发

5款宝藏办公软件,高质量打工人必备!

淋雨

OCR 办公软件 IDM

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