写点什么

微服务架构的设计模式

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

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

关注

评论 1 条评论

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

UITableView 手势延迟导致subview无法完成两次绘制

AlienJunX

详解iOS性能优化,安装包瘦身

Usama Bin Laden

ios 源码分析 性能优化 性能 原理

赚钱的6个层次

品牌运营|陆晓明

创业 技术人 赚钱思维 层次 商机

年轻人的世界

boyzcl

年轻人 系列

我也曾对架构师的力量一无所知

曲水流觞TechRill

瞎琢磨先生の好物推荐(软件/网站)

瞎琢磨先生

金融「中台」十宗罪

FinClip

中台 企业中台 业务中台

对你来说,阅读是另一种生活的方式吗?

叶小鍵

婚姻就是合伙开公司,各自做好自己的工作很重要

鼎玉谷

管理 婚姻 公司 付出 人情

读懂才会用 : Redis的多线程

小眼睛聊技术

Java redis 学习 程序员 编程语言 后端

Redis源码之常用数据结构和函数

心平气和

redis

如何利用数据异构实现多级缓存或者数据迁移

松花皮蛋me

缓存 分布式 分库分表

新人工作的时候遇到问题怎么办

波波

学习 编程 职场 新人

习惯与惯性

伯薇

个人成长 习惯 习惯养成 提升能力

系统的伸缩性以及扩展性设计

Janenesome

读书笔记 程序员 架构

信仰

小天同学

人生 个人成长 思考 读书感悟 信仰

在今天种下一棵树

陈医僧Ethan

感悟 育儿

关于「后浪」,ta 们在说什么?

boyzcl

年轻人 系列 后浪

Redis学习笔记(基础命令)

编程随想曲

redis

技术人赚钱的9个路线

品牌运营|陆晓明

副业 赚钱 技术人 码农 生财有术

瞎琢磨先生の常用的 linux 命令

瞎琢磨先生

Linux Shell

JAVA小抄-000-初始

NoNoGirl

Java

重新认识Go语言中的slice

麻瓜镇

Go 语言

如何对Code Review的评论进行分级

宝玉

代码审查 Code Review

开通InfoQ写作平台测试

ytl

关于沟通成本的一些认知

Geek_reg5m9

项目管理 软件开发

Hello World !

ATGU:阿宝哥

Java Hello World ! Info

关于CodeReview的一些思考

Yezhiwei

[读书随笔]从哲学上的问题分类看TDD

老狗

哲学 TDD

基于vue(element ui) + ssm + shiro 的权限框架

吴邪

准备重读测试驱动开发

escray

学习 CSD 认证实战营

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