将Node.js应用程序扩展到1000个同时连接中的10个
Scaling a Node.js application to 10s of 1000s of simultaneous connections
我们开发了一款应用程序,让人们可以在互联网上发射棒球。
它完全生活在亚马逊的AWS生态系统中,我们正在为一个新项目构建它。堆栈包括:
-专用MongoDB和Redis服务器-三组不同的nodejs服务器-此外,我们正在使用亚马逊的API进行服务器配置和自动缩放
我们面临的问题是,我们无法模拟每个实例超过15000个并发用户(websocket连接)。我们应该得到更多;我们认为成千上万。服务器CPU使用率仅为40%。
关于如何扩展node.js应用程序,使其能够同时连接到单个服务器,有什么想法吗?
每个tcp连接都有一个在文件操作系统中打开的文件描述符。重要的是要将限制设置为高于所需的数字。
例如,在ubuntu中,你可以通过命令看到这个限制:
$ulimit -a
$ulimit -n
要在Ubuntu中永久设置此限制,您需要更改文件/etc/security/limits.conf,并添加以下行所需的编号:
* soft nofile 100000
* hard nofile 100000
然后重新启动:
$sudo reboot
网络套接字是TCP连接,不是吗?您的客户会将您的连接保持多久?
服务器将限制您可以拥有的打开TCP连接的数量。您的操作系统还将限制进程在任何时候可能具有的打开文件句柄的数量。
因此:
- 服务器上的TCP开放套接字限制是多少,以及
- 服务器上的打开文件句柄限制是多少
我假设您开始在tcp堆栈/文件描述符上达到内核的一些默认限制。您尝试过任何系统级优化吗?如果是,哪个?
-
Redis是否正在复制运行?Redis可能有问题——确实如此单螺纹。引用他们的文档:Redis使用的大多是单个螺纹设计。这意味着一个单独的过程服务于所有客户端请求,使用一种称为多路复用的技术。这意味着Redis可以在每个给定的时刻提供一个请求,因此所有请求都按顺序提供。因此进程可以在Redis队列中等待轮到它们的
-
mongodb端是否使用了锁?我在使用mysql锁的代码中观察到了这种性能问题:进程正在等待锁。
- 在Qualtrics中,介绍如何动态连接两个滑块
- JavaScript连接多个下拉选择
- 如何jQuery-Add按钮最多插入10个新输入
- 正在加载+10个帖子
- 如何在输入文本字段中输入10个字符时自动提交表单
- 如何在Javascript中连接两个结构不同的对象
- 使用包含过滤器在环回中连接两个模型
- 如何使用 href 连接两个参数
- 骨干.js集合筛选前 10 个模型
- jsPlumb 无法连接多个点
- Strophe.js MUC:创建一个房间并连接多个房间
- '对象不是函数'当使用angular连接两个json数组时
- 使用jQuery在p-tag中查找给定字符串的前10个单词和下10个单词
- ajax请求每秒返回10个响应
- 当一次加载所有文件时,是否有来自阵列的10个随机闪存文件显示在页面上?(在javascript中)
- 连接4个Javascript游戏-推到列中最低的圆圈
- 当至少有20个搜索结果时,只呈现10个搜索结果?使用Google Places API
- 连接两个变量
- Redux Saga连接多个发电机进行存储
- 将Node.js应用程序扩展到1000个同时连接中的10个