微服务集成:技术、挑战与解决方案
1. 服务即状态机
在微服务架构中,将服务视为状态机是一个强大的核心概念。无论你选择成为 REST 专家,还是坚持使用基于 RPC 的机制(如 SOAP),这种理念都非常实用。我们的服务通常围绕有界上下文构建,例如客户微服务拥有与该上下文中行为相关的所有逻辑。
当消费者想要更改客户信息时,会向客户服务发送相应请求。客户服务依据自身逻辑决定是否接受该请求,它控制着与客户相关的所有生命周期事件。我们应避免创建仅仅是 CRUD 包装器的“哑”服务,因为如果关于客户允许进行哪些更改的决策从客户服务中泄露出去,就会失去内聚性。
将关键领域概念的生命周期明确建模有诸多好处。一方面,我们有一个地方来处理状态冲突(例如,有人试图更新已被删除的客户信息);另一方面,我们可以根据这些状态变化附加相应的行为。虽然基于 HTTP 的 REST 是一种比许多其他技术更合理的集成技术,但无论选择哪种技术,都应牢记这个理念。
2. 响应式扩展(Reactive Extensions)
响应式扩展(通常简称为 Rx)是一种将多个调用结果组合在一起并对其执行操作的机制。这些调用可以是阻塞调用或非阻塞调用。Rx 的核心是反转传统的数据流。与先请求数据,然后对其执行操作不同,你观察一个操作(或一组操作)的结果,并在某些事情发生变化时做出反应。
一些 Rx 实现允许你对这些可观察对象执行函数,例如 RxJava 允许使用像 map 或 filter 这样的传统函数。各种 Rx 实现在分布式系统中找到了用武之地,它们让我们能够抽象出调用的具体细节,更轻松地进行推理。我们只需观察下游服务调用的结果,而不必关心它是阻塞调用还是非