问题描述
关于可扩展性和 node + Nginx 的一些问题。我对整个“环境设置”很陌生。 我的架构: 该公司有一个应用程序(android/playstore/site)和一个面向客户的仪表板(网络),
我在 Digital Ocean 上有一个运行这些应用程序 API 的 Droplet (Ubuntu 20.04):
配置为:
4 英特尔 Cpu 和 8Gb(基本共享 Cpu)
有 2 个用于仪表板的 API 实例和 2 个用于应用程序的 API 实例。
它在 Nginx 后面运行。
我在 Nginx 上做了负载平衡,它工作正常。
upstream apiv2.xxx.xxxx{
server localhost:5102;
server localhost:5103;
}
upstream apiv2-dash.xxx.xxxxxx{
server localhost:5100;
server localhost:5101;
}
我也设置了 Nginxconf 文件
worker_connections 65535;
worker_rlimit_nofile 65535;
本指南还将 ulimit 设为 65535 https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a
现在,我一直在尝试在服务器上进行一些压力测试,以供学习之用,也许将来它可能会派上用场。就目前而言,没有发生任何问题。
我测试的 Url 从内存中的静态数组返回 json 对象(该数组是一个列表,它会不时更新,例程会从数据库中提取它)。
所以对于这个场景,数据库是无关紧要的。
我如何测试它,运行这个:
teste();
export function teste() {
let i = 0;
setInterval(() => {
for (let index = 0; index < 100; index++) {
requestsApiProdutos(i++);
// requests2();
}
},1000);
}
function requestsApiProdutos(i) {
let start = moment();
Cloud.get("produtos/homev2",{},(res,error) => {
let fim = moment();
if (res) {
console.log(i + " - " + start.format("DD/MM/YYYY HH:mm:ss:SSS") + " / " + fim.format("DD/MM/YYYY HH:mm:ss:SSS"),"recebeu");
} else {
console.log(i + " - " + start.format("DD/MM/YYYY HH:mm:ss:SSS") + " / " + fim.format("DD/MM/YYYY HH:mm:ss:SSS"),error);
}
});
}
据我所知,这应该是每秒 100 个请求。
大约一分钟后,开始出现某些请求的连接超时。
Image Logs of timeout
http://prntscr.com/117ilw9
Nginx 日志上没有任何内容。
如果我增加请求,比方说 150 或 200,它们会更早出现等等。
Cpu 内核永远不会超过 35%,我使用 htop 进行监控。内存还可以,使用率低。
cpu利用率和它有什么关系?如果至少有 2 个内核接近 100%,我会理解超时。
在这些配置中是否会出现这些超时?
如果没有,
1 - 我还应该做什么?配置等
如果是,
1 - 在同一台机器上有更多的 cpu 核心和更多的实例会使每秒请求更高吗?
2 - 我什么时候应该使用另一个 Droplet 以获得更好的可扩展性?
3 - 如果我使用另一个液滴,我在这里添加:
{
upstream apiv2.xxx.xxxx{
server localhost:5102;
server localhost:5103;
server new droplet1
server new droplet2
server new droplet3
...etc
}
worker_connections/worker_rlimit_nofile 限制在这里是如何工作的?
可以说,使用我的两个本地主机,我达到了 65535 个连接的限制(不太可能,但只是假设)。
在上游添加新的液滴会解决问题吗?或者,如果达到限制应该怎么做?
如果可能,我想要“是”和“否”两种情况的答案。 感谢您抽出宝贵时间。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)