【问题标题】:How many server blocks can I add in Nginx Conf我可以在 Nginx Conf 中添加多少个服务器块
【发布时间】:2015-06-18 08:58:41
【问题描述】:

知道我可以在 Nginx 配置中添加多少个服务器块吗? 我需要将它用于具有多个子域(每个客户端一个子域)的反向代理。 能否成功支持10,000个服务器块? 有没有关于它的基准研究?

【问题讨论】:

  • 随心所欲。但您可能确实想要一个匹配所有这些主机名的服务器块。
  • 对性能有影响吗?此外,对于 10k 个服务器块,我可以多久执行一次 nginx 重新加载而不会对性能造成太大影响。
  • 当然有。 Nginx 将不得不在数千台服务器中寻找确切的域。
  • 你真的需要那么多服务器块吗?我很确定,如果您执行username.example.com 之类的操作,您需要为*.example.com 提供一个满足您所有需求的服务器块
  • 好吧,好吧。您可以为此使用地图,但可以拥有许多服务器块。可能你必须调整server_names_hash_bucket_sizeserver_names_hash_max_size

标签: nginx


【解决方案1】:

这不是你可以拥有多少的问题,而是你有多少。可以处理得当

您可以有效处理多少将在很大程度上取决于您的硬件(不是为容器提供动力的硬件,而是运行 nginx 的实际机器),因为 Nginx 大部分时间都会尝试将哈希表放入缓存中(最好在 L1 上)缓存,因为它虽然小但速度更快,或者,如果不能,在 L2 缓存上) 这就是基本理论。

根据 nginx 文档,根据您的配置,每个服务器块将占用 32/64/128 字节的哈希值,因此即使达到 1000 个服务器块标记,您也可能不再位于 L1 上,这意味着您重新可能从 1-2 纳秒的寻道时间移动到 10-15 纳秒的寻道时间或更多(不记得当前的确切数字......这些都是大概的)。继续增长,您甚至可能会用完 L2 缓存(同样,这将取决于您的实际硬件是什么),因此您现在处于 L3 缓存甚至更慢的 RAM 上。尽管所有缓存都可以呈现 99% 或更高的命中率,但随着流量的增长,搜索时间将成为一个问题,因为更多的 CPU 将专门用于确定每个访问者打算去哪里。这只是假设所有服务器块都有准确的域名,而不是通配符或正则表达式,这会进一步影响性能。

可以吗?当然……只要得到一个坚固的 CPU,它具有最大的 L1 缓存和一个大的 L2 缓存。如果您绝对必须这样做,请远离通配符和正则表达式 准备好调整 server_names_hash_max_sizeserver_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 设备或其他一些较低级别的解决方案?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 2016-04-20
    • 1970-01-01
    • 2018-08-24
    • 2013-12-20
    • 1970-01-01
    • 2015-06-09
    • 2014-04-20
    相关资源
    最近更新 更多