如何保证两个微服务之间的接口不被破坏?

Dan*_*sky 5 java microservices

假设我们有两个微服务:客户端和服务器。微服务架构最基本的特性之一是能够为每个微服务拥有单独的管道,这意味着我们必须能够将它们独立地部署到生产环境中。

这意味着不同的微服务可能由不同的团队开发,并且某些功能在一个微服务上的开发速度比在另一个上快。这通常以客户端和服务器之间的合同(接口)被破坏而告终,因此客户端发送到服务器的 JSON 不再有效。

问题是如何防止两个微服务之间的通信由于它们之间的合同破裂而中断的情况?处理此类问题的最佳策略是什么?

小智 2

问题是如何防止两个微服务之间的通信由于它们之间的合同被破坏而中断?

  1. 合同设计:当您设计合同时,服务器[也称为服务提供商或生产者]无法指定合同,只能说这是我提供的合同,然后开始使用服务。如果服务器有多个客户端(通常是这种情况),那么多个客户端将给出他们对合同的“需求”,然后服务器将实现最小的公共聚合作为服务提供。

  2. 合同变更:服务提供商应努力使合同在大多数情况下保持兼容。但是,如果合同需要重大更改,则可以通过启动新版本的端点来处理。在这种情况下,旧服务端点(例如 v1)的停用不会立即完成。服务消费者会收到此更改的通知,并有时间切换到新版本的合同。(例如说 v2)

您可以获取有关 Martin Fowler 的 bliki 的更多信息:https://martinfowler.com/articles/consumerDrivenContracts.html

处理此类问题的最佳策略是什么?

我想,我已经回答了上面的策略。然而,就工具而言,以下是一些可以促进该场景的工具:

  1. 契约: https: //docs.pact.io/
  2. Consul:这是服务发现工具,但是,如果您采用微服务,那么这对于处理大量服务将非常有用。https://www.consul.io/