本地开发微服务、方法和工具以高效工作

local development of microservices, methods and tools to work efficiently

我和团队成员一起开发微服务架构,但我对工作方式有疑问。事实上,我有太多的微服务,当我在开发过程中 运行 它们时,即使有一个好的工作站,它也会消耗太多内存。所以我使用 docker compose 来构建和执行我的 MSA,但这需要很长时间。人们经常听说如何从技术上构建 MSA,但从未听说过如何有效地构建它。在这种情况下你会怎么做?你如何工作的 ?您是否使用工具或任何其他工具来改进和促进您的开发。我听说过 skaffold,但我看不出 docker compose 或集群环境中的简单 ci/cd 有什么区别。随时提供提示和您的意见。谢谢

我在微服务和本地开发方面有相当多的经验,以下是我见过的一些方法:

  1. 运行 docker 或 k8 上的所有内容。如果使用 k8,那么像 skaffolding 这样的工具可以更容易地 运行 并在 IDE 中本地调试服务,但将其放入本地 k8 以便它可以与其他 k8 服务通信。它工作正常,但 运行在 k8 或 docker 中本地提供超过 4 或 5 个完整服务需要投入大量 CPU 和内存。
  2. 构建所有服务的模拟版本。在本地使用它们并进行集成测试。模拟服务故意简单得多,因此更容易在本地 运行 大量使用。明显的缺点是您必须为每个服务构建模拟版本,并且您很容易错过由模拟服务导致的错误,这些错误与真实服务的行为不同。 Record/replay Hoveryfly 等工具可以帮助构建模拟服务。
  3. 给每个开发者自己的云环境。 运行 大多数服务都在云中,但使用像 Telepresence 这样的工具在本地交换 运行ning 服务进出云集群。这消除了 运行 在一台机器上设置太多服务的问题,但为每个开发人员维护单独的云沙箱可能会很花钱。当开发人员的云沙箱出现问题时,您还需要 DevOps 资源来帮助他们。
  4. 消除不必要的微服务复杂性并将您的所有服务整合到 1 或 2 个整体中。享受能够 运行 在本地将所有内容作为一项服务的乐趣。接受这样一个事实,即微服务架构对大多数公司来说都是矫枉过正的。太多的人在他们的需求需要之前就预先选择了微服务架构。或者他们这样做是因为担心将来会需要它。这不可避免地会导致猜测他们应该如何将系统分解为许多微服务,并弄错了边界和契约,这使得它在未来与单体相比同样难以或更难修复。而且他们在需要之前几年就承担了微服务的成本。微服务使从本地开发到部署的一切都变得更加昂贵和痛苦。对于像 Netflix 和亚马逊这样的公司来说,这是必要的。对于我们大多数人来说,事实并非如此。

如果可能的话,我更喜欢选项 4。否则按顺序选择选项 2 或 3。选项 1 在我看来应该避免,但它可能是每个人首先尝试的选项。

在 GKE 中并假设您有一个私有集群。您可以在通过 CLI 连接到 GKE 环境时使用端口转发。创建一个脚本,将您的本地端口转发到 GKE 环境。我相信在集群的服务选项卡上,您会找到“端口转发”按钮,该按钮将为您提供 CMD 命令。通过这种方式,您可以处理一个微服务,并将其所有流量路由到实际的 DEV 集群。这使您不必同时 运行 多个项目。