繁体   English   中英

Docker中的多个Node.js工人

[英]Multiple nodejs workers in docker

我对Docker和生产Node.js Web应用程序非常陌生。 但是,经过一番阅读后,我确定一个不错的设置是:

  • Nginx容器提供静态文件,SSL,代理Node.js请求
  • nodejs容器
  • postgesql容器

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

另外,这将如何影响数据库写入? 是否有我需要专门设计的竞赛条件? 任何指导将不胜感激。

是的,可以使用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服务的代码相同。

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

另一个选择是将它们从此Lambda流式传输到Kinesis或SQS,并让另一个worker Lambda从那里读取它,并将数据泵入RDS。 这是可伸缩且可靠的,没有任何限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM