将整体拆分为微服务

Splitting monolith into microservices

我有一个支持排序的现有 Web 服务,它有多个操作(大约 20 个)。这是一个支持订购功能的单一网络服务。它与多个其他服务交互以提供订购功能。

由于此应用程序中有很多业务功能并且由 10 人团队支持,我认为它是一个整体(尽管我假设没有硬性规定来定义什么是整体) .

我们计划将应用程序部署在 Cloud Foundry 环境中,我们计划将应用程序拆分为 2-3 个微服务,主要是为了使它们能够独立扩展。

允许搜索产品的前几个 api 通常具有更多的点击次数,而支持实际提交订单的 api 获得的点击次数少于 5%。因此,与订单提交 api 相比,产品搜索 api 的实例数量应该大得多。

虽然我不确定我们是否可以基于子域拆分(我已经阅读过应该是基础),但我们正在考虑根据调用顺序拆分它们,如前所述。

我还读到微服务应该精心编排而不是编排。然而,为了确保我们现有的消费者不受影响,我认为我们应该公开一个 api 层来协调对这些微服务的调用。是否提供 api 网关,这是确保消费者不会最终调用多个微服务并提供抽象层所遵循的正常方法?

这似乎更像是编排而不是编排 - 虽然我没有挂在理论方面,但我想了解在企业世界中针对这个问题陈述所追求的不同解决方案。

微服务的好处

  • 独立部署和扩展
  • 更容易'Reason About'
  • 关注点分离
  • 单一职责
  • (微)面向服务的架构

我建议根据域拆分您的服务。这是一种合乎逻辑且有效的方法,使其成为一个简单的起点。您的整体包结构可能已经以这种方式组织,这进一步简化了重构。

API 网关

典型的 Spring 云方法是在您的网络边缘使用 Zuul 代理,它接收来自您的客户端(网络、移动等)的请求并将它们路由到微服务位于防火墙后面。客户端仅与单个域交互,它开箱即用地处理 CORS。

资源: