跳至主要內容
Aggregator Microservices

意图

用户对聚合器服务进行一次调用,然后聚合器将调用每个相关的微服务。

解释

真实世界例子

我们的网络市场需要有关产品及其当前库存的信息。 它调用聚合服务,聚合服务依次调用产品信息微服务和产品库存微服务,返回组合信息。

通俗地说

聚合器微服务从各种微服务中收集数据,并返回一个聚合数据以进行处理。

Stack Overflow上说

聚合器微服务调用多个服务以实现应用程序所需的功能。


iluwatar大约 2 分钟ArchitecturalCloud distributedDecouplingMicroservices
Ambassador

目的

在客户端上提供帮助程序服务实例,并从共享资源上转移常用功能。

解释

真实世界例子

远程服务有许多客户端访问它提供的功能。 该服务是旧版应用程序,无法更新。 用户的大量请求导致连接问题。新的请求频率规则需要同时实现延迟检测和客户端日志功能。

通俗的说

使用“大使”模式,我们可以实现来自客户端的频率较低的轮询以及延迟检查和日志记录。

微软文档做了如下阐述

可以将大使服务视为与客户端位于同一位置的进程外代理。 此模式对于以语言不可知的方式减轻常见的客户端连接任务(例如监视,日志记录,路由,安全性(如TLS)和弹性模式)的工作很有用。 它通常与旧版应用程序或其他难以修改的应用程序一起使用,以扩展其网络功能。 它还可以使专业团队实现这些功能。


iluwatar大约 3 分钟StructuralDecouplingCloud distributed
API Gateway

目的

API网关将所有对微服务的调用聚合到一起。用户对API网关进行一次调用,然后API网关调用每个相关的微服务。

解释

使用微服务模式,客户端可能需要来自多个不同微服务的数据。 如果客户端直接调用每个微服务,则可能会导致更长的加载时间,因为客户端将不得不为每个调用的微服务发出网络请求。此外,让客户端调用每个微服务会直接将客户端与该微服务相关联-如果微服务的内部实现发生了变化(例如,如果将来某个时候合并了两个微服务),或者微服务的位置(主机和端口) 更改,则必须更新使用这些微服务的每个客户端。

API网关模式的目的是缓解其中的一些问题。 在API网关模式中,在客户端和微服务之间放置了一个附加实体(API网关)。API网关的工作是将对微服务的调用进行聚合。 客户端不是一次单独调用每个微服务,而是一次调用API网关。 然后,API网关调用客户端所需的每个微服务。


iluwatar大约 3 分钟ArchitecturalCloud distributedDecouplingMicroservices
Balking

意图

止步模式用于防止对象在不完整或不合适的状态下执行某些代码。

解释

真实世界例子

洗衣机中有一个开始按钮,用于启动衣物洗涤。当洗衣机处于非活动状态时,按钮将按预期工作,但是如果已经在洗涤,则按钮将不起任何作用。

通俗地说

使用止步模式,仅当对象处于特定状态时才执行特定代码。

维基百科说

禁止模式是一种软件设计模式,仅当对象处于特定状态时才对对象执行操作。例如,一个对象读取zip压缩文件并在压缩文件没打开的时候调用get方法,对象将在请求的时候”止步“。


iluwatar大约 2 分钟ConcurrencyDecoupling
Business Delegate

意图

业务委托模式在表示层和业务层之间添加了一个抽象层。 通过使用该模式,我们获得了各层之间的松散耦合,并封装了有关如何定位,连接到组成应用程序的业务对象以及与之交互的逻辑。

解释

真实世界例子

手机应用程序承诺将现有的任何电影流式传输到您的手机。它捕获用户的搜索字符串,并将其传递给业务委托层。业务委托层选择最合适的视频流服务,然后从那里播放视频。

通俗的说

业务委托模式在表示层和业务层之间添加了一个抽象层。


iluwatar大约 2 分钟StructuralDecoupling
Circuit Breaker

意图

以这样一种方式处理昂贵的远程服务调用,即单个服务/组件的故障不会导致整个应用程序宕机,我们可以尽快重新连接到服务。

解释

真实世界例子

想象一个 Web 应用程序,它同时具有用于获取数据的本地文件/图像和远程服务。 这些远程服务有时可能健康且响应迅速,或者由于各种原因可能在某 个时间点变得缓慢和无响应。因此,如果其中一个远程服务缓慢或未成功响应,我们的应用程序将尝试使用多个线程/进程从远程服务获取响应,很快它们都会挂起(也称为 [线程饥饿]thread starvation)导致我们的整个 Web 应用程序崩溃。我们应该能够检测到这种情况并向用户显示适当的消息,以便他/她可以探索不受远程服务故障影响的应用程序的其他部分。 同时,其他正常工作的服务应保持正常运行,不受此故障的影响。


iluwatar大约 6 分钟BehavioralPerformanceDecouplingCloud distributed
Converter

目的

转换器模式的目的是提供相应类型之间双向转换的通用方法,允许进行干净的实现,而类型之间无需相互了解。此外,Converter模式引入了双向集合映射,从而将样板代码减少到最少。

解释

真实世界例子

在真实的应用中经常有这种情况,数据库层包含需要被转换成业务逻辑层DTO来使用的实体。对于潜在的大量类进行类似的映射,我们需要一种通用的方法来实现这一点。

通俗的说

转换器模式让一个类的实例映射成另一个类的实例变得简单


iluwatar大约 2 分钟CreationalDecoupling
Data Bus

含义

数据总线模式(译者:实际上,就是 Event-Bus 消息总线模式)允许在一个应用程序的组件之间收发消息/事件,而不需要这些组件相互感知,它们只需要知道所发送/接收的消息/事件的类型即可。

类图

Data Bus pattern

适用场景

可以在以下场景使用数据总线模式:

  • 你希望由你的组件自己决定要接收哪些信息/事件
  • 你希望实现多对多的通信
  • 你希望你的组件不需要感知彼此

iluwatar小于 1 分钟ArchitecturalDecoupling
Data Mapper

含义

一个用于在持久化对象和数据库之间传输数据的映射器,同时保持它们之间和映射器本身的独立性。

类图

Data Mapper

适用场景

数据映射器适用于以下场景:

  • 当你想把数据对象从数据库访问层解耦时时
  • 当你想编写多个数据查询/持久化实现时

引用


iluwatar小于 1 分钟ArchitecturalDecoupling
Delegation

或称

代理模式

目的

它是一种让对象将某种行为向外部表达,但实际上将实现该行为的责任委托给关联对象的技术。

类图

Delegate

适用性

使用委托模式以实现以下目的

  • 降低类的耦合性
  • 组件的行为相同,但是意识到这种情况将来可能会改变。

鸣谢


iluwatar小于 1 分钟StructuralDecoupling