带有 Spring Boot、Netflix、Docker、Maven 的微服务。如何组织开发?

Microservices with Spring Boot, Netflix, Docker, Maven. How to organize development?

我是微服务的新手,我选择了以下堆栈作为练习。

  1. 我想用 Spring 引导、Netflix apis 和 Maven
  2. 构建一些 apis
  3. 对微服务进行 Docker 化,以便我可以在 Cloud Foundry 中部署,也可以在 Kubernetes 或 AWS 上部署
  4. 使用 javascript 框架构建 PWA 并调用这些 API

有点野心..

我知道微服务将单独部署。我知道网络应用程序将首先连接到网关,等等。

但是作为一个新的开发人员开始在开发搜索产品的团队中工作 api 例如,我会打开我的 STS,克隆微服务项目(包括网关、注册中心)的唯一存储库,配置服务器)或者我会克隆包含我需要处理的 spring 引导项目的存储库吗?在第一种情况下,拥有一个带有模块的父 pom 项目并可能共享一些 jars 似乎是有意义的..不知道..

我想我可能已经找到了我正在寻找的部分答案 Microservices: How to store source code of many microservices?

这些问题非常广泛。我想首先你应该做一些阅读...

  1. eric evans 的领域驱动设计
  2. 构建微服务作者:sam newman

接下来您应该了解一点架构设计模式。 查看事件源、CQRS、APi 网关、服务注册和通用云模式。此列表可能会更长,但这是一个好的开始。

那么基本上您的 api 网关应该是所有前端调用进入并通过安全、监控和路由的地方。

api 网关将联系 eureka 服务注册中心,并获取您路由到的服务的位置信息。

您所有的服务应用程序都将向 eureka 注册并从配置服务器中提取配置。

如果您将此构建为生产应用程序,您很可能会将所有这些应用程序放在不同的存储库中。为了促进架构堆栈的所有部分,大多数大型公司都会有监管和业务指导,这意味着在某些情况下,不同的团队将处理每个部分,或者他们将处理其他组织中的垂直部分。如果您处于启动环境中,您可能会被要求处理完整的架构。

想象一下,您是一家可能有数百名内部 API 的公司的一名员工,您会在 [=] 构建所有服务并管理监控、路由和安全吗? 43=] 网关可能不是。

我认为,如果您只是简单地学习模式和实现,那么将它放在一个项目中对于您作为单个开发人员来说会简单得多。

这些是我对此的看法。您可以轻松找到教程来解释如何构建这些模式和应用程序,但它们通常只向您展示如何开始。我建议如果你这样做是为了了解你选择了一些有趣的(虚假的)商业想法并开始 building/learning!

希望这对您有所帮助,祝您好运!

PS:查看用于分布式跟踪的 sleuth 和 zipkin

您问题的更实际答案

项目结构:

多模块 项目最适合高度耦合的微服务。意思是:将在它们之间专门使用,并且几乎将其余基础设施视为单一服务。

在现实世界中,您使用微服务架构,因此大多数(如果不是全部)应用程序都可以从基础架构中存在的任何微服务中受益。将其视为一个网络,其中每个节点都是一个公开服务的应用程序。我建议每个微服务有一个独立的 spring 引导项目。

Docker化微服务:

实现它的easiest/simplest方法是:

  1. 打包您的 spring 引导项目: 使用 maven(maven 目标包)。这将创建一个可执行的 jar 文件。
  2. 创建一个包含并运行您的 jar 文件的 Dockerfile:。类似于:
FROM jdk:latest
EXPOSE 8080
WORKDIR /srv
COPY ms.jar .
CMD java -jar ms.jar
  1. 创建 docker 图像: docker build -t ms:latest path/to/Dockerfile

考虑到对于生产环境,您可能需要添加应用的多个实例、使用更强大的应用服务器或调整 JVM 初始化参数。这只是您开始做某事的基本步骤。

我会把它留到这里,因为您的问题与如何构建项目以及如何使用 Maven 将 spring 启动应用程序打包到 docker 映像中有关。

部署到 Cloud Foundry 时,无需 "Dockerize",因为 Cloud Foundry 容器已经在管理它。 AWS 也一样。我相信这两个平台都允许您管理自己的容器,如果您真的想折磨自己的话。就整个项目而言,我建议从小处着手,逐步扩大范围。这将帮助您避免不知所措和放弃。从一个小的可交付成果开始,制定一个实施计划,您可以在积压工作中跟踪该计划,最终达到您的最终设计目标。我相信您会在处理积压工作时看到您最初的想法逐渐改变。