写点什么

微服务设计模式(上)

  • 2019-11-20
  • 本文字数:2197 字

    阅读完需:约 7 分钟

微服务设计模式(上)

微服务体系结构已经成为现代应用程序开发的实际选择。虽然它解决了某些问题,但它不是一颗银弹。它也有一些缺点,在使用这种体系结构时,有许多问题必须解决。这就需要学习这些问题中的通用模式,并使用可重用的解决方案来解决它们。因此,需要讨论微服务的设计模式。在深入研究设计模式之前,我们需要了解微服务体系结构的构建原则:


1.可伸缩性


2.可用性


3.弹性


4.独立的,自主的


5.分散治理


6.故障隔离


7.自动预配


8.通过 DevOps 持续交付


应用所有这些原则带来了一些挑战和问题。让我们讨论这些问题和它们的解决方案。

1 分解模式

a、根据业务能力分解

问题

微服务就是让服务松散耦合,应用单一职责原则。然而,将应用程序分解成更小的部分必须逻辑地完成。如何将应用程序分解为小型服务?

解决方案

一种策略是根据业务能力分解。业务能力是企业为了产生价值而做的事情。给定业务的功能集取决于业务类型。例如,保险公司的能力通常包括销售、营销、承保、理赔处理、开票、合规等。每个业务能力都可以被看作是一种服务,只是它是面向业务的,而非技术性的。

b、根据子域分解

问题

使用业务功能分解应用程序可能是一个很好的开始,但是您会遇到所谓的“上帝类”,它们不容易分解。这些类在多个服务中很常见。例如,Order 类将用于 Order 管理、Order 收入、Order 交货等等。我们如何分解它们?

解决方案

对于“上帝类”问题,DDD(领域-驱动 设计)起到了拯救作用。它使用子域和有界上下文概念来解决这个问题。DDD 将为企业创建的整个领域模型分解为子领域。每个子域都有一个模型,该模型的作用域称为有界上下文。每个微服务都将围绕有界上下文开发。


备注:识别子域并不是一项简单的任务。这需要对业务有所了解。与业务功能一样,子领域是通过分析业务及其组织结构以及识别不同的专业领域来识别的。

c、扼杀者模式

问题

到目前为止,我们讨论的设计模式是对 greenfield 的应用程序进行分解,但是我们所做的 80%的工作是对 brownfield 应用程序进行分解,brownfield 应用程序是大型的、单一的应用程序。将上面所有的设计模式应用到它们上是很困难的,因为将它们分解成更小的部分同时使用是一个很大的任务。

解决方案

勒死人的模式来了。勒死人的模式是基于一种藤蔓的类比,藤蔓缠绕着一棵树。这个解决方案很适合 web 应用程序,在 web 应用程序中,一个调用来回进行,对于每个 URI 调用,可以将服务分解为不同的域并作为独立的服务托管。我们的想法是一次做一个领域。这将创建两个独立的应用程序,它们并排放在同一个 URI 空间中。最终,新重构的应用程序将“扼杀”或替换原始应用程序,直到您最终可以关闭单片应用程序为止。

2 集成模式

a、API 网关模式

问题

当应用程序分解为更小的微服务时,有几个问题需要解决:


1.如何调用多个微型服务来提取生产者信息。


2.在不同的通道(如桌面、移动设备和平板电脑)上,应用程序需要不同的数据来响应相同的后端服务,因为 UI 可能不同。


3.不同的使用者可能需要不同格式的可重用微服务的响应。谁将进行数据转换或字段操作?


4.如何处理不同类型的协议,有些协议可能不受生产者微服务的支持。

解决方案

API 网关有助于解决微服务实现引起的许多问题,而不仅仅局限于上述问题。


1.API 网关是任何微服务调用的单一入口点。


2.它可以作为代理服务将请求路由到相关的微服务,抽象生产者的详细信息。


3.它可以将请求分散到多个服务,并聚合结果发送回消费者。


4.一刀切的 api 不能解决所有用户的需求;该解决方案可以为每种特定类型的客户机创建细粒度的 API。


5.它还可以将协议请求(例如 AMQP)转换为另一个协议(例如 HTTP),反之亦然,以便生产者和消费者能够处理它。


6.它还可以减轻微服务的身份验证/授权责任。

b、聚合器模式

问题

我们已经讨论了如何解决 API 网关模式中的聚合数据问题。然而,我们将在这里整体地讨论它。在将业务功能分解为几个较小的逻辑代码片段时,有必要考虑如何协作每个服务返回的数据。这种责任不能留给消费者,因为那时它可能需要了解生产者应用程序的内部实现。

解决方案

聚合器模式有助于解决这个问题。它讨论了我们如何聚合来自不同服务的数据,然后将最终的响应发送给消费者。这可以通过两种方式实现:


  • 复合微服务将调用所有所需的微服务,合并数据,并在发送回之前转换数据。

  • API 网关还可以将请求划分为多个微服务,并在将数据发送给使用者之前聚合数据。


如果要应用任何业务逻辑,建议选择组合微服务。否则,API 网关就是已建立的解决方案。

c、客户端 UI 组合模式

问题

当通过分解业务功能/子域来开发服务时,负责用户体验的服务必须从多个微服务中提取数据。在单片世界中,从 UI 到后端服务只有一个调用来检索所有数据并刷新/提交 UI 页面。然而,现在情况就不一样了。我们需要知道怎么做。

解决方案

使用微服务,UI 必须被设计成具有屏幕/页面的多个部分/区域的骨架。每个部分将调用单个后端微服务来提取数据。这被称为组合特定于服务的 UI 组件。像 AngularJS 和 ReactJS 这样的框架很容易做到。这些屏幕称为单页应用程序(SPA)。这使得应用程序能够刷新屏幕的特定区域,而不是整个页面。

总结

在本篇中,我们给大家介绍了分解模式和集成模式,在下篇文章中将会给大家带来数据库模式、可观测性模式和横切关注点的模式。希望对大家在理解微服务方面有所帮助。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/j1Abgg7kIrbSe5hi7W4c4Q


2019-11-20 11:371247

评论

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

PTGui Pro for Mac(全景图拼接制作工具)

Mac相关知识分享

智能座舱时代,吕布骑上了AI「赤兔马」

脑极体

AI

鸿蒙NEXT开发案例:二维码的生成与识别

zhongcx

鸿蒙

小公司该如何做好项目管理工作

爱吃小舅的鱼

项目管理

MacBook Air M3推荐什么硬盘? 为什么新买的硬盘MacBook Air不能读

阿拉灯神丁

MacBook 硬盘 Tuxera NTFS2023 NTFS 磁盘管理器 磁盘工具

Redis Desktop Manager for Mac(Redis可视化工具)中文版

Mac相关知识分享

ShardingSphere Proxy 适配 MySQL addBatch/executeBatch 数组结果实战

端小强

ShardingSphere

2024年最受欢迎的8款HR人事薪酬系统评测

易成研发中心

产品研发管理和研发项目管理的区别是什么

爱吃小舅的鱼

项目管理 研发管理

哪些电子合同系统最适合企业使用?7款平台对比分析

爱吃小舅的鱼

电子合同系统

提升项目执行效率:9款项目进度计划安排系统推荐

爱吃小舅的鱼

项目管理 项目管理软件 项目进度计划 项目进度计划安排系统

IM即时通讯平台哪家好?选择WorkPlus行业领先的解决方案

WorkPlus

别想消灭证据!U盘直接拔掉怎么恢复丢失的数据?超实用技巧一键恢复

阿拉灯神丁

U盘启动盘 EasyRecovery 数据恢复软件 EasyRecovery16 数据丢失

Pixelmator Pro for Mac(修图软件图像编辑工具)

Mac相关知识分享

WorkPlusIM即时通讯平台:构建生态化的全方位办公解决方案

WorkPlus

Go语言中json序列化的一个小坑,建议多留意一下

左诗右码

易未央-AI 風雲:16. 天干的暗示

因田木

AI 智能系統

WorkPlus:提升企业效率的im即时通讯平台解决方案

WorkPlus

为什么企业应该选择WorkPlus作为即时通讯平台?

WorkPlus

即时通讯平台-企业IM软件|WorkPlus专注于政企办公的im即时通讯平台

WorkPlus

怎样挑选适合的电子合同系统?6款免费方案推荐

爱吃小舅的鱼

电子合同系统

智能座舱时代,吕布骑上了AI「赤兔马」

白洞计划

AI 智能汽车

什么是真正的低代码?

codebee

低代码

精选9款项目计划进度系统,提升管理效率

爱吃小舅的鱼

项目计划 项目计划管理 项目计划进度系统

SecureCRT for mac(终端SSH仿真工具)

Mac相关知识分享

互联网 Java 面试八股文汇总(2024 最新整理,持续更新)

采菊东篱下

java面试

JetBrains IntelliJ IDEA 2024.3 (macOS, Linux, Windows) - 领先的 Java 和 Kotlin IDE

sysin

JetBrains IDEA

项目管理中,范围管理和需求管理的区别

易成研发中心

需求管理 需求管理软件

发现10款有效的项目进度计划系统:全面推荐

爱吃小舅的鱼

项目管理 项目计划 项目计划进度系统 项目计划进度

即时通讯平台-音视频即时通讯平台就选WorkPlus

WorkPlus

为什么对标准的要求会越来越低

Bruce Talk

系统思考 System Thinking

微服务设计模式(上)_文化 & 方法_360云计算_InfoQ精选文章