微服务API网关/反向代理设计模式

时间:2020-02-20 08:19:10

标签: microservices api-gateway

我有一个几乎没有微服务的应用程序,如下所示

 - python microservice   - runs as a Docker container on port 5001, 5002, 5003, 5004, 5005
 - nodejs microservice  - runs as a Docker container on runs on port 4000
 - mongodb  - runs as a Docker container on port 27017
 - graphql microservice - runs as a Docker container on port 4000

  1. 我需要澄清以下选项

选项1:

 Is it correct to configure nginx as a reverse proxy for each application so that I want to run each microservice on port 80

 i.e * python microservice docker container + nginx
     * nodejs microservice docker container + nginx
     * mongodb microservice docker container + nginx
     * graphql microservice docker container + nginx  

选项2:


 or should I configure a single nginx instance and setup upstream for python application, nodejs application and mongodb ?

 ie python + nodejs + mongodb + graphql + nginx   

注意:在OPTION 2中,只有一个nginx实例正在运行,而对于OPTION 1,每个微服务都在运行一个nginx实例。哪种模式是正确的选项1或选项2?

  1. 将mongodb容器化并在端口80上公开是否正确?

1 个答案:

答案 0 :(得分:1)

问题1: 如果仅使用一个Nginx,则将出现单点故障。这意味着如果nginx由于某种原因失败,则所有服务都将关闭。

如果您使用几种具有不同配置的不同nginx,则将需要更多维护,技术负担和资源。

这里的一种好方法是拥有同一nginx服务器的副本(例如2个),其中包含用于路由所有微服务的规则。

问题2: 一旦有了一些持久性存储,就可以在容器中部署mongoDB了。端口根本不是问题。