我有大约4个微服务,一个Keycloak和一个我想通过Docker部署的RabbitMQ服务器。每个微服务都必须能够与Keycloak对话,而某些微服务必须与RabbitMQ对话。
为了保持整洁,我想为Keycloak创建一个docker-compose文件,为RabbitMQ创建一个,每个微服务创建一个。这是正确的方法吗? (每个微服务都有自己的数据库。)
MS A,B,C,D必须能够呼叫Keycloak; MS C,D必须能够与RabbitMQ通话。
将所有微服务与Keycloak / RabbitMQ服务器连接的最佳方法是什么?一些微服务也需要能够彼此通信。
答案 0 :(得分:3)
是的,可以通过为每个服务创建一个组合文件来按照您所说的进行操作,但是如果要保持文件的清洁,可以将它们放在一个文件中,如下所示:
version: '2'
services:
rabbitmq:
image: rabbitmqImg
networks:
- rabbitmq
keycloak:
image: keycloakImg
networks:
- keycloak
MS-A:
image: MSImg
networks:
- keycloak
MS-B:
image: MSImg
networks:
- keycloak
MS-C:
image: MSImg
networks:
- keycloak
- rabbitmq
MS-D:
image: MSImg
networks:
- keycloak
- rabbitmq
networks:
rabbitmq:
external:
name: rabbitmq
keycloak:
external:
name: keycloak
使用此Yaml微服务可以通过keycloak网络相互通信,所有微服务都可以使用keycloak网络与keycloak服务器通信,并且MS-C,MS-D可以通过Rabbitmq网络与Rabbitmq通信。 但是,如果有或将有其他不需要与Rabbitmq或Keycloak对话的微服务,则应创建另一个网络,然后将微服务放入其中,然后根据需要将其放入其他网络中。
正如Anunay所说的,您可以使用群体模式或kubernetes,但如果您是初学者,请坚持使用docker-compose,之后再进行扩展和编排,则可以使用这些框架。
编辑: 对于数据库,有多种方法取决于您拥有的数据库体系结构。例如,如果每个MS都有一个数据库容器,则应该为每个MS创建一个网络,如下所示:
version: '2'
services:
# General Services
rabbitmq:
image: rabbitmqImg
networks:
- rabbitmq
keycloak:
image: keycloakImg
networks:
- keycloak
# Micro Services
MS-A:
image: MSImg
networks:
- ms-a-net
- keycloak
MS-B:
image: MSImg
networks:
- ms-b-net
- keycloak
MS-C:
image: MSImg
networks:
- ms-c-net
- keycloak
- rabbitmq
MS-D:
image: MSImg
networks:
- ms-d-net
- keycloak
- rabbitmq
# Database Services
DB-A:
image: DBImg
networks:
- ms-a-net
DB-B:
image: DBImg
networks:
- ms-b-net
DB-C:
image: DBImg
networks:
- ms-c-net
DB-D:
image: DBImg
networks:
- ms-d-net
networks:
rabbitmq:
external:
name: rabbitmq
keycloak:
external:
name: keycloak
# Services Network
ms-a-net:
external:
name: ms-a-net
ms-b-net:
external:
name: ms-b-net
ms-c-net:
external:
name: ms-c-net
ms-d-net:
external:
name: ms-d-net
答案 1 :(得分:2)
您可以通过docker进行操作,但是您需要考虑以下事项,
如果答案是开发人员或测试人员,则可以使用docker compose。它可以帮助您从一个位置启动所有容器,并且可以将它们配置在一个文件中。 您可以通过docker compose将keycloak,rmq数据库和服务都设置在同一主机上,并且它们可以彼此通信
如果您想使用prod或env这样的产品,那么我们可以研究docker swarms。这是docker compose的增量更新,可让您在多个主机上部署容器。
如果只有四个服务,则可以使用它,但是如果有更多服务,或者您需要更好地控制服务的部署方式,运行并需要更多指标和接触点,请使用kubernetes。
如果您想将数据库保存在容器中,则我不确定。容器易变,但总的来说它们可以为您提供高可用性,但对于数据库和rmq,我个人不会将其保留在用于生产产品的容器中,但是您可以环顾四周,并根据需要决定。
Docker集群和kubernetes也可以用于开发和测试环境。它们始终可以在单个主机上运行。