nginx和负载均衡的澄清需要

4
我正在阅读Instagram的设计,发现了他们负载均衡系统的描述。每个请求都通过负载均衡机器发送到Instagram服务器;我们曾经运行过2台nginx机器和DNS轮询它们之间。这种方法的缺点是如果其中一台机器需要退役,DNS更新所需的时间较长。最近,我们开始使用Amazon的弹性负载均衡,背后有3个NGINX实例可以交换(并且如果它们未通过健康检查,则会自动从轮换中删除)。我们还在ELB级别终止SSL,这减少了nginx的CPU负载。我们使用Amazon的Route53进行DNS,他们最近在AWS控制台中添加了一个非常好的GUI工具。
问题是,我是否正确理解他们现在拥有一个DNS服务器,该服务器使用RR来决定将请求发送到哪个nginx服务器。然后每个nginx服务器依次将请求转发到集群?
第二个问题是,nginx和负载均衡器之间的区别是什么?为什么不能使用nginx代替负载均衡器?
1个回答

4
对于您的第一个问题,我相信答案似乎是Instagram现在使用Route53将DNS映射到Elastic Load Balancer,这样做有两个作用:它将流量相当平均地路由到三个NGINX负载均衡器,并为所有流量提供SSL。然后,NGINX服务器充当进一步向下的内容/应用程序服务器的负载均衡器。使用ELB而不是轮询DNS意味着他们可以添加/删除/更新附加到ELB的实例,而无需担心DNS更新或TTL。
至于第二个问题,你可以像HAproxy或其他服务一样轻松地使用NGINX进行负载均衡。我相信Instagram选择NGINX的吸引力部分原因是其令人难以置信的速度,并且它是异步和“事件驱动”的,而不是Apache2那样的线程。当正确设置时,这意味着在重载下会减少困扰。

我不明白为什么他们在ELB后面使用3个Nginx负载均衡器。难道ELB不已经是一个负载均衡器吗?为什么他们不仅使用ELB在应用服务器前面,而不是保留Nginx实例呢? - kkkkkkk
2
@Khang 这是一个好问题--根据我阅读 Instagram 工程博客上的引用,他们使用了两层负载均衡器:ELB 主要用于处理 SSL 和一些原始负载均衡,然后使用 NGINX 层来更精确地分配流量或根据需要进行切换。ELB 是一个相当不透明的服务,你不能真正地调整它的容量(虽然有一些技巧可以解决这个问题)。 - Neal Magee
感谢您的回答。 - kkkkkkk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接