我计划为一个 Web 项目设置一个负载平衡器,但我脑子里有一个主要问题:
典型的负载均衡器是:(由 nginx 上游提供)服务器#1 接受所有请求并将它们转发到服务器#2 - 服务器#n,但是当服务器#1 的负载如此之重以致于无法正确处理请求并且可能崩溃或速度变慢时会发生什么?
如何防止这种情况发生?我可以想到也许基于 DNS 的负载平衡或类似的东西。
我不需要会话持久性或其他东西。这只是针对每个请求进行自我验证的 API。
你有什么想法吗?
感谢您的反馈意见
答案1
“当服务器 #1 负载过重以致无法正确处理请求时会发生什么情况”
客户端通常会收到“连接超时”错误消息。
不要担心负载均衡器:使用现代硬件,它们可以处理数千个请求,特别是如果您对静态内容使用缓存。
大多数时候,瓶颈是:
- 网络带宽
- 服务器#2 - 服务器#n 通常必须计算动态内容。
答案2
如何防止这种情况发生?
你不能。你只能为某些受支持的负载场景做计划。你的 nginx LB 可能比处理重负载部分的 API 服务器处理更多的连接尝试。而且坏人总是有可能测试你或对你进行 DDoS 攻击。
你的 LB 服务器也需要维护和重启,所以你最终可能会设置一些与已经解决了安全性和可扩展性问题的产品相竞争的东西,比如亚马逊 API 网关或者DigitalOceans 负载均衡器。