知道我可以在 Nginx 配置中添加多少个服务器块吗?我需要将它用于具有多个子域的反向代理(每个客户端一个子域)。它能成功支持 10,000 个服务器块吗?有没有相关的基准研究?
这实际上不是你能拥有多少的问题,而是你有多少。能够妥善处理
你能有效处理多少个数据在很大程度上取决于你的硬件(不是为容器供电的硬件,而是运行 nginx 的实际机器),因为 Nginx 大多数时候会尝试将哈希表放入缓存中(最好是在 L1 缓存上,如尽管很小,但更快,或者如果不能的话,在二级缓存上)这是基本理论。
根据 nginx 文档,每个服务器块将占用 32/64/128 字节的哈希值,具体取决于您的配置,因此即使达到 1000 个服务器块标记,您也可能不再处于 L1 上,这意味着您可能正在移动从 1-2 纳秒寻道时间到 10-15 纳秒寻道时间或更多(不记得当前的确切数字......这些是大概的)。继续增长,您甚至可能会耗尽 L2 缓存(同样,这取决于您的实际硬件),因此您现在使用的是 L3 缓存,甚至是速度更慢的 RAM。尽管所有缓存都可以实现 99% 或更高的命中率,但随着流量增长,寻道时间将成为一个问题,因为更多的 CPU 将专门用于确定每个访问者打算前往的位置。这只是假设所有服务器块都有精确的域名,而不是通配符或正则表达式,这会进一步影响性能。
能做到吗?当然...只要拥有一个坚固的 CPU,具有最大的 L1 缓存和一个大的 L2 缓存即可。如果你绝对必须这样做,请远离通配符和正则表达式准备好调整server_names_hash_max_size
和server_names_hash_bucket_size
配置指令(你会知道在添加服务器块后需要这样做......Nginx 可能需要异常/不可接受的更长的时间来重新启动,或者可能根本不重新启动:这是您更改这些指令的提示,如下所述:
http://nginx.org/en/docs/hash.html
和这里:
http://nginx.org/en/docs/http/ngx_http_core_module.html#server_names_hash_bucket_size
即使 nginx 确实重新启动,您也需要在流量开始增加时密切监视硬件,以确定负载下瓶颈的严重程度。最好的情况,你会为每个请求增加几分之一秒...最坏的情况,你可能会把整个盒子压垮(但这确实把它推向了极限)
话虽如此……您是否探索过其他选择?也许通过 DNS 来实现,或者转向企业级的东西,如 F5 设备或其他一些较低级别的解决方案?
归档时间: |
|
查看次数: |
2279 次 |
最近记录: |