是否有特定的标准可以遵循以将某物称为 a"Microservices Architecture"?

Is there a specific standard to follow to therefore call something a"Microservices Architecture"?

过去我使用的是我认为的“微服务”。我们有一个服务发现,应用程序通过 REST 同步调用相互通信,我认为这称为请求/响应。


现在我们正在开发一个应用程序,它被简单地分解为多个小应用程序,这些小应用程序通过使用 Kafka 的发布/订阅一起工作,它们之间没有直接通信,也没有服务发现。

可以说这些也是“微服务”吗?或者我应该怎么称呼它们?

正如一位评论者指出的那样 - 答案总是自以为是(Whosebug 通常不是基于意见的问题的最佳去处),但我不怕给出我的帮助。

我的观点与 Martin Fowler 和其他人在过去十年中教给我们的思路一致,以及亚马逊 Werner Vogels 开创性工作的见解。他们的定义是,微服务不是一个定义明确的单一标准,而是一种架构风格,可以包含分布式计算中一系列不同的方法。他们的共同点是提供许多不同维度的可扩展性的目标,但主要是系统复杂性、组织生产力、吞吐量和弹性——所有这些都是负担得起的。为实现这一目标,设计应围绕:

  1. 根据业务目标划分服务边界(一种领域驱动设计)。
  2. 限制规模/服务范围(著名的 two-pizza 团队规模理念)。
  3. 在组织职责和维护方面明确分离。这包括每个服务的独立团队和发布/维护周期。
  4. 拥抱所有层的自动化(云虚拟化、devops、CICD、基础架构即代码等如何成为流行的工具)。
  5. 设计侧重于 failure-resilient 操作,例如避免级联故障、定义的故障状态、回退等

这些目标的结果还包括采用分布式系统架构和水平可扩展性设计(无状态、计算和存储分离等)。

因此,如果您觉得自己的设计符合这些思路,那么在我看来,您已经成功应用了微服务架构风格。

如果你想更多地了解这个思想流派,我推荐 this read