【问题标题】:Multiple nodejs workers in dockerdocker中的多个nodejs工作人员
【发布时间】:2016-01-10 09:03:50
【问题描述】:

我对 docker 和生产化 nodejs Web 应用程序非常陌生。但是,经过阅读后,我确定一个好的设置是:

  • nginx 容器提供静态文件、ssl、代理 nodejs 请求
  • nodejs 容器
  • postgesql 容器

但是,我现在正在尝试解决可扩展性问题。看到您可以在 nginx 配置中定义多个 proxy_pass 语句,您能否启动一个重复的 nodejs 容器(完全相同但暴露不同的端口)并有效地“负载平衡”您的 Web 应用程序?它是一个好的架构吗?

另外,这个效果数据库会如何写入?我需要专门针对竞争条件进行架构吗?任何指导将不胜感激。

【问题讨论】:

    标签: node.js nginx docker production-environment


    【解决方案1】:

    是的,可以使用 Nginx 在您的 Node.js 服务的不同实例之间负载平衡请求。每个 Node.js 实例都可以在不同的 Docker 容器中运行。增加配置的可扩展性就像启动另一个 Docker 容器并确保它已在 Nginx 配置中注册一样简单。 (根据您必须更新 Nginx 配置的频率,可以使用各种工具/框架来自动执行此最后一步。)

    例如,下面是一个 Nginx 配置,用于对不同 Node.js 服务的传入请求进行负载平衡。在我们的例子中,我们在同一台机器上运行了多个 Node.js 服务,但完全可以使用 Docker 容器来代替。

    文件/etc/nginx/sites-enabled/apps

    upstream apps-cluster {
      least_conn;
      server localhost:8081;
      server localhost:8082;
      server localhost:8083;
      keepalive 512;
    }
    
    server {
      listen 8080;
      location "/" {
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
        proxy_set_header Connection "";
        proxy_http_version 1.1;
        proxy_pass http://apps-cluster;
      }
    
      access_log off;
    }
    

    尽管运行多个 Node.js 服务实例,您的数据库不应受到负面影响。 PostgreSQL 数据库本身可以完美地处理多个打开的连接并自动解决任何竞争条件。从开发者的角度来看,运行 1 个 Node.js 服务的代码与运行 x 个 Node.js 服务的代码是一样的。

    【讨论】:

      【解决方案2】:

      您可以在用于连接RDS的功能上设置“功能级别并发执行限制”。这将包含 RDS 连接的数量。来自 Dynamo 的请求将被限制。

      另一种选择是将它们从这个 lambda 流式传输到 Kinesis 或 SQS,并让另一个工作 lambda 从那里读取它并将数据泵入 RDS。这是可扩展且可靠的,没有限制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-05
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-28
        相关资源
        最近更新 更多