我现在正在阅读Instagram的设计,我找到了他们的负载均衡系统的描述。
对Instagram服务器的每个请求都通过负载均衡机器;我们曾经在它们之间运行2个nginx机器和DNS Round-Robin。这种方法的缺点是DNS更新所需的时间,以防其中一台机器需要解除。最近,我们开始使用亚马逊的弹性负载均衡器,其背后有3个NGINX实例,可以交换进出(如果健康检查失败,将自动退出)。我们还在ELB级别终止我们的SSL,这减少了nginx上的CPU负载。我们使用Amazon的Route53 for DNS,他们最近在AWS控制台中添加了一个非常好的GUI工具。
问题是。我是对的,现在他们有一个DNS服务器,它使用RR来决定发送请求的nginx服务器。而这些nginx服务器又将每个请求重新发送到集群?
第二个问题是。 nginx和负载均衡器之间有什么区别。为什么我们不能使用nginx?
答案 0 :(得分:3)
对于你的第一个问题,我认为答案似乎是Instagram现在使用Route53将DNS映射到Elastic Load Balancer,它做了两件事:它将流量相当均匀地路由到三个NGINX负载均衡器,并且它提供了SSL所有的交通。然后,NGINX服务器充当堆栈中内容/应用程序服务器的负载平衡器。使用ELB而不是循环DNS意味着他们可以添加/删除/更新附加到ELB的实例,而无需担心DNS更新或TTL。
至于第二个问题,您可以像使用HAproxy或其他服务一样轻松地使用NGINX来进行负载平衡。我确信在选择NGINX时对Instagram的吸引力的一部分是它令人难以置信的速度,它是异步和“事件驱动”而不是像Apache2那样的线程。如果设置正确,可能意味着在重负荷下会减少头痛。