有多少服务器块,我可以在Nginx的配置中添加任何想法? 我需要使用它与多个子域(子域为每个客户端)反向代理。 它可以成功地支持10,000个服务器模块? 有没有关于它的任何基准研究?
Answer 1:
这是不是真的,你可以有多少问题,而是有多少你。 可以体面处理
有多少可以有效地处理将在很大程度上取决于你的硬件(而不是硬件供电的容器,但实际的箱的nginx上运行)为Nginx的将大部分的时间试图以适应高速缓存(最好在L1高速缓存中的哈希表,如这是更快虽然小,或者,如果不能,就L2高速缓存),这是基本的理论。
据nginx的文档,每个服务器模块将采取32/64/128个字节的哈希根据您的配置,所以即使在1000服务器组标记你可能没有任何L1多,这意味着你可能会移动从1-2纳秒的寻道时间,以10-15也许纳秒寻求次以上(不记得确切的目前的数字......这些都是球场)。 继续成长,你甚至可能会用完的L2缓存(同样,这将取决于你的实际硬件是什么),所以你现在的L3缓存,甚至在RAM这是更慢。 尽管所有的缓存可以使99%或更好的命中率,寻求交通增长时间会成为一个问题,因为更多的CPU将竭诚为刚刚确定每个游客打算去。 而这仅仅是假设所有服务器块具有确切的域名,而不是通配符或正则表达式这将进一步影响性能。
能不能做到? 当然...只要获得与最大的L1缓存,你可以和一个大的L2缓存一个坚固的CPU也是如此。 如果你绝对必须做到这一点,远离通配符和正则表达式客场准备好调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设备或其他一些低级别的解决方案?