微服务异步通信->消息代理

使用消息代理
基于消息传递通常使用消息代理,即服务通信的基础设施。还可以使用无代理的消息传递架构,其中服务之间通信。两种方法(如下图所示)具有不同的利弊,但通常基于消息代理的架构是更好的一种方法。
在这里插入图片描述
无代理消息:

无代理架构中,服务可以直接交互消息。ZeroMQ是一种流行的无代理消息技术。它既是规范,也是一组适用于不同编程语言的库,支持各种传输协议,包括TCP、UNIX风格的套接字和多播。	

无代理架构的好处:

  1. 允许更轻的网络流量和更低的延迟,因为消息直接从发送方到接收方,而不是经过了一层消息代理
  2. 消除了消息代理可能成为性能瓶颈或单点故障的可能性
  3. 降低操作复杂性,不需要设置和维护消息代理

无代理的弊端:

  • 服务需要了解彼此的位置,必须使用服务发现机制
  • 会导致可用性降低,因为在交换消息时,消息的发送方和接收方都必须同时在线
  • 在实现 例如确保消息能够投递成功这些功能更复杂

基于代理的消息:

消息代理是所有消息的中介节点。发送方将消息写入消息代理,消息代理将消息发送给接收方。使用消息代理的一个重要好处是不需要知道接收方的网络位置。另一个好处是消息代理缓冲消息,直到接收方能够出来它们。

流行的开源消息代理包括:

  • Apache ActiveMQ
  • RabbitMQ
  • Apache Kafka

选择消息代理,需要考虑如下因素:

  • 支持的编程语言

     选择消息代理应该尽可能支持多种编程语言
    
  • 支持的消息标准

     消息代理是否支持多种消息标准,比如AMQP和STOMP,还是它仅支持专用的消息标准
    
  • 消息排序

     消息代理是否能够保留消息的排序
    
  • 投递保证

     消息代理提供什么样的消息投递保证
    
  • 持久性

     消息是否支持持久化保存到磁盘上并且能够在代理崩溃后恢复
    
  • 耐久性

     如果接收方重新连接到消息代理,它是否会收到断开连接时发送的消息
    
  • 可扩展性

     消息代理的扩展性如何
    
  • 延迟

     端到端是否有较大的延迟
    
  • 竞争性(并发)接收方

     消息代理是否支持竞争性接收方?
    

基于消息代理的好处

  • 松耦合

     客户端发起请求时只要发送给特定的消息通道即可。客户端不需要获取服务实例的情况,也不需要知道服务的网络位置
    
  • 消息缓存

     消息代理可以在消息被处理之前一直缓存消息
    
  • 灵活的通信

     消息机制支持很多交互方式,如HTTP REST GRPC
    
  • 明确的进程间通信

     基于RPC的机制总数企图让远程服务调用和本地调用看上去没有区别(客户端和服务同时使用远程调用代理)。
    

消息代理的弊端

  • 潜在的性能瓶颈

     消息代理可能存在性能瓶颈。但是许多消息代理都支持集群
    
  • 潜在的单点故障

     消息代理的高可用性至关重要,否则整个系统的可靠性将会受到影响。大多数现代消息代理都是高可用的
    
  • 操作的复杂性

     消息代理是一个必须独立安装、配置和运维的系统组件
    

在这里插入图片描述

### 1. 用户界面层(Presentation Layer) #### 与业务逻辑层的交互 - **uiInteraction 包 -> 业务逻辑层各微服务包** - **箭头类型**:实线箭头 - **标注**:“请求业务处理”。例如,`uiInteraction` 包中的 `QueryTicketUI` 类需要查询车票信息时,会向 `ticketService` 微服务包发送请求,请求其处理车票查询业务。 - **业务逻辑层各微服务-> uiDisplay 包** - **箭头类型**:实线箭头 - **标注**:“返回业务结果”。比如 `ticketService` 微服务包处理完车票查询业务后,将查询结果返回给 `uiDisplay` 包中的 `TicketInfoDisplay` 类进行展示。 - **业务逻辑层各微服务-> uiNotification 包** - **箭头类型**:实线箭头 - **标注**:“触发通知”。当 `orderService` 微服务包处理订单成功后,会触发 `uiNotification` 包中的 `OrderSuccessNotification` 类向用户发送订单成功通知。 ### 2. 业务逻辑层(Business Logic Layer) -微服务形式组织 #### 微服务之间的交互 - **ticketService 微服务包 <-> orderService 微服务包** - **箭头类型**:实线双向箭头 - **标注**:“订单关联车票信息”。在创建订单时,`orderService` 需要从 `ticketService` 获取车票信息;而在某些情况下,如车票库存更新可能会影响订单状态,`ticketService` 也需要与 `orderService` 交互。 - **paymentService 微服务包 <-> orderService 微服务包** - **箭头类型**:实线双向箭头 - **标注**:“支付与订单状态同步”。`orderService` 在创建订单后会请求 `paymentService` 进行支付操作,支付完成后 `paymentService` 会将支付结果反馈给 `order
最新发布
04-13
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值