【问题标题】:How does it connect various microservices with Docker?它如何将各种微服务与 Docker 连接起来?
【发布时间】:2018-06-08 20:08:25
【问题描述】:
我在 Docker 中有两个微服务,我想将一个与另一个连接起来,但我不知道该怎么做。这两个(以及未来的应用程序)是带有 Spring-boot 的 API Rest,我正在搜索信息、教程……但我什么也没看到。我的想法是有一个主应用程序,它能够与其他微服务连接,它们是 API Rest,然后这个主应用程序发布,所有这些我都希望将它放在容器 (Docker) 中。
有可能吗?
谁知道任何解释这个的教程?
非常感谢!
【问题讨论】:
标签:
rest
docker
spring-boot
microservices
【解决方案1】:
只给你最简单的答案:
一般来说,容器可以通过任何协议(http、ftp、tcp、udp)相互通信,而不仅限于rest(http/s)
- 使用内部/外部 IP 和端口
- 使用内部/外部名称 (dns):
- 你的微服务在多主机的同一个集群中->你应该可以在你的Springboot中编写程序来调用http://{{container service name}},这是内置的功能容器
- 如果您在不同的集群或主机或互联网中有更多的微服务,您可以使用 APIM(API 管理)或反向代理(NGINX,HAProxy)来管理服务名称,例如。
microservice1.yourdomain.com —> container1 或 service1(cluster)
microservice2.yourdomain.com —> 容器 2 或服务 2(集群)
yourdomain.com/microservice1—> container2 或 service 2(cluster)
yourdomain.com/microservice2—> container1 或 service1(cluster)
PS 。那里有更复杂的技术,但它从根本上归结为上述方法。
【解决方案2】:
您所描述的可能是 API 网关。 Here 是一个很好的教程来解释这种模式。
实现一个 API 网关,它是所有客户端的单一入口点。 API 网关以两种方式之一处理请求。一些请求只是简单地代理/路由到适当的服务。它通过分散到多个服务来处理其他请求。
这种模式的一个变体是后端换前端模式。它为每种客户端定义了一个单独的 API 网关。
使用 API 网关有以下好处:
将客户端与应用程序划分为微服务的方式隔离开来
使客户端免于确定服务实例位置的问题
为每个客户端提供最佳 API
减少请求/往返次数。例如,API 网关使客户端能够通过单次往返从多个服务中检索数据。更少的请求也意味着更少的开销并改善了用户体验。 API 网关对于移动应用程序至关重要。
通过将调用多个服务的逻辑从客户端转移到 API 网关来简化客户端
从“标准”公共网络友好 API 协议转换为内部使用的任何协议
API 网关模式有一些缺点:
API网关如何实现?
如果必须扩展以处理高负载,事件驱动/反应式方法是最好的。在 JVM 上,Netty、Spring Reactor 等基于 NIO 的库是有意义的。 NodeJS 是另一种选择。