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

Microservices 微服务api网关/反向代理设计模式,microservices,api-gateway,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 - grap

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

 - 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:

     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   
    
    
    注意:在选项2中,只有一个nginx实例在运行,对于选项1,每个微服务都有一个nginx实例在运行。哪种模式是正确的选项1或选项2

  • 将mongodb集装箱化并将其暴露在端口80上是否正确
  • 问题1: 如果只使用一个nginx,则会出现单点故障。这意味着,如果nginx由于某种原因失败,所有服务都将关闭

    如果您使用多个不同的nginx和不同的配置,将需要更多的维护、技术债务和资源

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

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