低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

微软 AzureCAT 团队发布微服务的设计模式

2017 年 8 月 01 日

前不久,微软 AzureCAT 模式和实践团队在 Azure 架构中心发布了 9 个新的微服务设计模式,并给出了这些模式解决的问题、方案、使用场景、实现考量等。微软团队称这 9 个模式有助于更好的设计和实现微服务,同时看到业界对微服务的兴趣日渐增长,所以也特意将这些模式记录并发布。

下图是微软团队建议如何在微服务架构中使用这些模式:

文中提到的 9 个模式包括:外交官模式(Ambassador),防腐层(Anti-corruption layer),后端服务前端(Backends for Frontends),舱壁模式(Bulkhead),网关聚合(Gateway Aggregation),网关卸载(Gateway Offloading),网关路由(Gateway Routing),挎斗模式(Sidecar)和绞杀者模式(Strangler)。这些模式绝大多数也是目前业界比较常用的模式,如:

  • 外交官模式(Ambassador)可以用与语言无关的方式处理常见的客户端连接任务,如监视,日志记录,路由和安全性(如 TLS)。
  • 防腐层(Anti-corruption layer)介于新应用和遗留应用之间,用于确保新应用的设计不受遗留应用的限制。
  • 后端服务前端(Backends for Frontends)为不同类型的客户端(如桌面和移动设备)创建单独的后端服务。这样,单个后端服务就不需要处理各种客户端类型的冲突请求。这种模式可以通过分离客户端特定的关注来帮助保持每个微服务的简单性。
  • 舱壁模式(Bulkhead)隔离了每个工作负载或服务的关键资源,如连接池、内存和 CPU。使用舱壁避免了单个工作负载(或服务)消耗掉所有资源,从而导致其他服务出现故障的场景。这种模式主要是通过防止由一个服务引起的级联故障来增加系统的弹性。
  • 网关聚合(Gateway Aggregation)将对多个单独微服务的请求聚合成单个请求,从而减少消费者和服务之间过多的请求。
  • 挎斗模式(Sidecar)将应用程序的辅助组件部署为单独的容器或进程以提供隔离和封装。

设计模式是对针对某一问题域的解决方案,它的出现也代表了工程化的可能。随着微服务在业界的广泛实践,相信这个领域将会走向成熟和稳定,笔者期望会有更多的模式和实践出现,帮助促进这一技术的进一步发展。感兴趣的读者可以参考微软的微服务设计模式一文以及 Azure 架构中心的资料为自己的微服务选择合适的模式或者提出新的模式。

2017 年 8 月 01 日 19:001603

评论

发布
暂无评论
发现更多内容

35K成功上岸华为商城事业部,只因学透了这几个开源的商城项目

Java迁哥

Java 华为 源码 资料 商城项目

一条龙!CI / CD 、打造小团队前端工程化服务

久违

Vue 前端 jenkins React 前端工程化

Docker 网络模式详解及容器间网络通信

哈喽沃德先生

Docker 容器 微服务 容器技术 容器化

【API进阶之路】破圈,用一个API代替10人内容团队

华为云开发者社区

内容 编辑 API 华为云 文本摘要

Java中强、软、弱、虚四种引用详解

奈学教育

Java

Java创建对象的方法有哪些?

奈学教育

Java

区块链交易所开发源码,数字货币交易所app开发

13530558032

前阿里P8甩我一份内部SpringCloud笔记手册,真香

Java成神之路

Java 阿里巴巴 程序员 Spring Cloud 架构师

Java创建对象的方法有哪些?

古月木易

Java

LR.JAVA平台商业可视化大屏(BI)设计演示

力软.net/java开发平台

软件开发 BI 数据可视化 Java 分布式

高效程序员的45个习惯:敏捷开发修炼之道(7)

石云升

敏捷开发 晨会

花两个半月吃透这份Java手打面经,成功从外包上岸到京东

Java迁哥

Java 学习 腾讯 面试 资料

某Java程序员在外包公司每天读写删改几年后,发现跳不出来了

Java成神之路

Java spring 程序员 面试 架构师

ArCall远比你想象的要强大的多

anyRTC开发者

WebRTC 在线教育 直播 RTC 安卓

2019年我最喜欢的三款数码产品。

徐说科技

手机 苹果

为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我明白了

Java迁哥

Java 阿里巴巴 程序员 成长 笔记

鲲鹏迁移第一批吃螃蟹的人,践行技术国际化

华为云开发者社区

鲲鹏920 服务器 华为云 ARM芯片 X86

程序员如何获取一份高薪工作?阿里P8大牛给你一些中肯的建议

Java迁哥

Java 华为 程序员 面试 资料

区块链支付系统源码开发,USDT承兑支付平台

13530558032

Java中强、软、弱、虚四种引用详解

古月木易

Java

区块链钱包开发方案|多币种钱包搭建app

WX13823153201

区块链钱包开发

架构设计复杂度来源

escray

学习 从零开始学架构 架构师预科班

LeetCode题解:84. 柱状图中最大的矩形,双循环暴力,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

【运维探讨】RPA落地实践,提升IT运维工作效能!

嘉为蓝鲸

RPA 运维自动化 标准化 系统运维 流程

week12 homework

burner

usdt支付跑分系统开发|区块链跨境入金系统搭建

WX13823153201

usdt承兑支付系统开发|usdt跑分系统搭建

WX13823153201

USDT承兑支付系统开发

Mybatis进阶之基础CRUD

不才陈某

mybatis springboot

分析HiveQL 生成的MapReduce执行程序

任小龙

数字货币交易所系统搭建源码|交易所开发公司

WX13823153201

数字货币交易所系统搭建

9块钱,构建个私有网盘,关键不限速

华为云开发者社区

网站 OBS 在线网盘 华为云 云存储

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

微软AzureCAT团队发布微服务的设计模式-InfoQ