我正在开发一个带有netflix云堆栈的Spring Boot应用程序。 并将每个模块(微服务(部署在单独的 Docker 容器中。结构如下:
- 尤里卡
- 祖尔
- 微服务中的业务逻辑
- MySQL
- 角度4用户界面
- Keycloak - 用户管理和身份验证
- ELK - 用于日志维护
- 海斯特瑞克斯
- 齐普金
好的,在遇到很多问题并花费大量网络带宽在谷歌上搜索我部署的问题之后,我需要知道的是,这是否是正确的方法?
这里的限制是我已经提供了 2 台主机来测试此配置,并且还没有进一步的行动计划。
所以这就是我所做的:我还没有使用我提到的全栈。
服务器 1
-
尤里卡
-
祖尔
-
麋鹿
服务器2
-
钥匙斗篷
-
业务逻辑微服务
-
MySQL
-
Anguar4 UI
尚未配置和使用Hystrix和Zipkin。 所以我在尤里卡配置中给出了Server1的IP:PORT,所有需要在尤里卡上注册的微服务。Zuul也是如此(给定Eureka的IP:PORT(。
在 Angular4 UI 中,我给出了 Zuul 部署的 URL:PORT,因为所有服务都将通过 Zuul 调用。
我理解这是正确的,因为服务需要知道尤里卡的位置,其余的可以通过尤里卡进行管理。
现在我的关键问题是,因为MySQL,ELK不能在Eureka上注册,所以在任何需要的地方提供MySQL和ELK的IP:PORT是否正确?
ELK 的配置也是如此,对于 ELK,我的要求也是所有日志都位于公共位置,我已经使用了 docker、卷挂载,但我不知道如何在多主机环境中完成此操作,我只能让 docker 将日志放在外部卷上,然后 ELK 可以通过 URL 访问这些日志, 尚未测试此配置。
如果是这样,那么如果我们认为它能够自我管理,那么这种配置不是那么独立吗?
我已经将我的 docker 撰写配置为使用"network_mode":主机,以便可以完成主机到主机的 docker 通信。
同样,我需要知道的是,我的配置/架构对于多主机环境以及将来的云环境是否正确? 如果没有,那么请引导我找到正确的道路。
谢谢! 附言对不起我的英语和语法,我已经尽力使它易于理解,如果您需要我这边的更多意见,请指出并提出问题。
这类问题确实超出了 Stackoverflow 的范围,但听起来您还没有了解基础架构的各个部分。
Netflix 堆栈(Eureka/Zuul 等(以及 Zipkin、Hystrix 和整个 ELK 堆栈只有在多站点中部署大量服务时才开始有意义,许多主机"手动"管理成为一个真正的问题,架构中有很多活动部件可能会损坏,而您的系统仍然需要保持运行, 就像主机断开连接或数据库节点死亡一样。
有2 台主机和几个服务,引入所有这些复杂性是没有意义的,它只会让您不知所措和困惑(它已经有(。如果你的 2 个主机中的一个死了,即使你正在使用尤里卡和 Zuul,它也不会救你。整个系统将崩溃。
扔掉所有那些最新的流行语库(你还不是Netflix(,只需考虑一个简单的架构,你将在一个主机上运行你的服务,在另一个主机上运行数据库(不需要Eureka或Zuul(。考虑日志的共享位置,并组织一个漂亮的、易于使用的文件夹结构来存储它们,以便使用比 Kibana 好得多的简单命令行工具轻松查找和搜索它们(查看日志很糟糕(。
保持简单,只在你觉得它变得难以管理时才推出新作品。