docker - 这是在多主机网络上的生产中部署 spring boot cloud netflix 的正确方法吗?

标签 docker spring-boot microservices spring-cloud-netflix docker-networking

我正在使用 netflix 云堆栈开发一个 Spring Boot 应用程序。并将每个模块(微服务)部署在单独的 docker 容器中。结构如下:

  • Eureka
  • 祖尔
  • 微服务中的业务逻辑
  • MySQL
  • Angular4 用户界面
  • Keycloak - 用户管理和认证
  • ELK - 用于日志维护
  • 海斯特里克斯
  • zipper

  • 好的,所以在面临很多问题并花费大量网络带宽在谷歌上搜索我以以下方式部署的问题之后,我需要知道的是,如果它是正确的方法吗?

    这里的限制是我已经获得了 2 台主机来测试此配置,并且还没有进一步的行动计划。

    所以这就是我所做的:我还没有使用我提到的全栈。

    服务器 1
  • Eureka
  • 祖尔
  • 麋鹿

  • 服务器2
  • key 斗篷
  • 业务逻辑微服务
  • MySQL
  • Anguar4 用户界面

  • 还没有配置和使用过 Hystrix 和 Zipkin。
    所以我在 Eureka 配置中给出了需要在 Eureka 上注册的所有微服务的 Server1 的 IP:PORT。 Zuul 也是如此(给定 IP:Eureka 的端口)。

    在 Angular4 UI 中我给出了 Zuul 部署的 URL:PORT,因为所有的服务都将通过 Zuul 调用。

    我理解这是正确的,因为服务需要知道 Eureka 所在的位置,并且可以通过 Eureka 管理其余部分。

    现在我的关键问题是,因为 MySQL、ELK 无法在 Eureka 上注册,所以在需要的地方提供 MySQL 和 ELK 的 IP:PORT 是否正确?

    ELK 的配置也是如此,对于 ELK,我的要求也是所有日志都位于公共(public)位置,为此我使用了 docker,卷挂载但我不知道如何在多主机环境中完成此操作,我只能让 dockers 将日志放在外部卷上,然后 ELK 可以通过 URL 访问这些日志,尚未测试此配置。

    如果是这样,那么如果我们认为它能够自我管理,这个配置不是那么独立吗?

    我已将我的 docker compose 配置为使用“network_mode”:主机,因此可以完成主机到主机的 docker 通信。

    同样,我需要知道的是,我的配置/架构是否适用于多主机环境以及将来适用于云环境?
    如果不是,请指导我正确的路径。

    谢谢!
    p.s.请原谅我的英语和语法,我已尽我所能使其易于理解,如果您需要我方面的更多输入,请指出并提出问题。

    最佳答案

    这类问题确实超出了 Stackoverflow 的范围,但听起来您确实还没有了解基础设施的各个部分。

    Netflix 堆栈(Eureka/Zuul 等)以及诸如 Zipkin、Hystrix 和整个 ELK 堆栈之类的东西只有在您在多站点中有许多服务的大规模部署时才开始有意义,其中许多主机“手动”管理成为一种真正的问题,在架构中有很多事件部件可能会损坏并且您的系统仍然需要继续运行,例如主机断开连接或数据库节点死亡。

    对于 2 个主机和几个服务,引入所有这些复杂性是没有意义的,它只会让你不知所措并让你感到困惑(它已经有了)。如果您的 2 个主机中的一个死了,即使您使用的是 Eureka 和 Zuul,它也不会拯救您。整个系统都会崩溃。

    扔掉所有那些最新的流行语库(你还不是 Netflix),只需考虑一个简单的架构,你将在一个主机上运行你的服务,在另一台主机上运行数据库(不需要 Eureka 或 Zuul)。为日志考虑一个共享位置,并组织一个漂亮、易于使用的文件夹结构来存储它们,以便使用比 Kibana 更好的简单命令行工具(查看日志非常糟糕)轻松找到和搜索它们。

    保持简单,仅在您觉得难以管理时才引入新作品。

    关于docker - 这是在多主机网络上的生产中部署 spring boot cloud netflix 的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44882977/

    相关文章:

    java - spring jpa onetomany关系@Query不起作用

    maven - 什么时候更新你的 pom 中的主要版本而不是次要版本?

    django - 来自Docker容器的Django loaddata命令

    docker - 如何在 github repo 中使用从 jfrog artifactory 到 Dockerfile 的 war 文件

    docker - 在Windows下登录时启动Docker容器

    spring-boot - Spring Boot 应用程序在 App Engine Flexible 上不断重启

    docker - 使用 Docker 安装 Perl 的问题

    java - 其余模板结果在 Spring Boot 中的 api 调用中获取 null

    spring-boot - 我如何配置gradle以启动和停止在构建完成后仍然有效的Spring Boot微服务?

    javascript - 在两个 NodeJS 微服务之间共享自定义代码