Microservices 需要澄清微服务吗

Microservices 需要澄清微服务吗,microservices,Microservices,我需要一些关于微服务的澄清。 1) 据我所知,只有编排需要事件源,在编排中我们使用发布/订阅模式。我们还使用RabbitMQ之类的程序来确保发布者和订阅者之间的通信 2) 业务流程不使用事件源。它使用观察者模式并直接与观察者通信。因此,它不需要总线/消息代理(如RabbitMQ)。为了协调编排中的所有流程,我们使用了中介模式 这是正确的吗?TLDR:Choreography是一种不需要持续保持流程状态的方法,编排需要将流程状态保持在某个地方 我认为这与实现细节有些混淆 编排之所以被称为这样,是因

我需要一些关于微服务的澄清。 1) 据我所知,只有编排需要事件源,在编排中我们使用发布/订阅模式。我们还使用RabbitMQ之类的程序来确保发布者和订阅者之间的通信

2) 业务流程不使用事件源。它使用观察者模式并直接与观察者通信。因此,它不需要总线/消息代理(如RabbitMQ)。为了协调编排中的所有流程,我们使用了中介模式


这是正确的吗?

TLDR:Choreography是一种不需要持续保持流程状态的方法,编排需要将流程状态保持在某个地方

我认为这与实现细节有些混淆

编排之所以被称为这样,是因为有一个中央流程管理器(有时被称为saga,错误地称为imho)指导(读取编排)跨其他服务的操作。在此模式中,流程经理将操作指示给BC,但需要保持以前操作的状态,以便撤销、回滚或采取任何必要的纠正或报告操作。例如,如果oubound请求是通过web请求完成的,则该状态可以保存在事件流、标准格式数据库中,甚至可以隐式地保存在内存中(例如,在一个接一个地执行请求并在错误时撤消以前的请求的方法中)。请注意,编排器可能使用同步的请求-响应通信(如发出web请求)。在这种情况下,orchestrator仍然保留一个状态,只是该状态要么是隐式的(操作顺序),要么是在mem中。不过,状态仍然存在,如果您希望实现恢复能力(能够从异常或任何灾难性故障中恢复),则需要再次在磁盘上保留该状态,以便能够恢复

编排之所以称为编排,是因为执行操作的业务逻辑片段相互观察和响应。因此,例如,当服务a做事情时,它会引发一个事件,B会观察到该事件来执行后续操作,等等,而不是让流程经理先问a,然后问B,等等。编排可能需要也可能不需要持久性。这实际上取决于不同服务需要执行的纠正措施


举个例子:作为一个实际的例子,假设您在购买商品时想要预订商品,接受付款,然后通过快递服务将货物报关,然后向收件人发送电子邮件

在这两种情况下,操作顺序都很重要(因为您希望能够在可能的情况下采取纠正措施),因此我们决定在快递公司展示后付款

使用编排,我们将有一个名为PM的流程管理器,该流程将执行以下操作:

  • 当用户尝试进行购买时调用PM
  • 调用
    Inventory
    服务以预订商品
  • 致电
    快递集成
    服务,向承运人申报货物
  • 致电
    Payments
    服务获取付款
  • 向用户发送电子邮件,告知他们正在接收商品
  • 如果PM在4上注意到错误,他们唯一的纠正措施是重试发送emai,然后报告。如果在付款过程中出现错误,PM将直接致电
    快递集成
    服务取消发货,然后致电
    库存
    取消预订货物

    通过编舞,将会发生的是:

  • 所有需要数据的服务都会引发并观察
    ordermake
    事件
  • Inventory
    处理
    OrderMade
    事件并引发
    OrderReserved
  • CourierIntegration
    处理
    OrderReserved
    事件并引发
    ShipmentExpressed
  • 付款
    服务处理
    发货
    并在成功后提高
    付款
  • 电子邮件服务处理
    PaymentMade
    并发送通知

  • 回滚将与上述过程相反。如果
    支付
    服务引发错误,
    快递集成
    将处理该错误并引发
    发货取消
    事件,然后由
    库存
    处理该事件以引发
    订单未保留
    ,电子邮件服务可依次处理这些信息以发送通知。

    在微服务编排中,在编排器的帮助下,采用集中的方法执行决策和控制。编排器必须直接与各自的服务通信,等待响应并根据来自的响应做出决定,因此它是紧密耦合的。它更像是一种同步方法,业务逻辑主要在orchestrator中,它拥有业务逻辑排序的所有权。编排方法通常遵循一种请求/响应类型模式,即服务之间存在点对点连接


    在微服务编排中,采用了一种分散的方法,这样就有了更多的自由,每个微服务都可以独立执行其功能,它们具有自我意识,并且不需要来自集中实体的任何指令。它更像是一种异步方法,业务逻辑分布在微服务中,每个微服务都应该监听其他服务事件,并自行决定是否执行某个操作。因此,编排方法依赖于消息代理(发布/订阅)在微服务之间进行通信,其中每个服务应观察系统中的事件并自动对事件进行操作。

    编排-可以使用简单的请求/响应。有一个管理器,它一步一步地控制过程和执行代码。如果出现错误,则反向处理。是