负载平衡器后面的nginx

负载平衡器后面的nginx,nginx,load-balancing,Nginx,Load Balancing,我发现Instagram通过博客与其他开发者分享了他们的技术实现。对于遇到的问题,他们有一些很好的解决方案。其中一个解决方案是Amazon上的弹性负载平衡器,其背后有3个nginx实例。这些nginx服务器的任务是什么?弹性负载平衡器的任务是什么?它们之间的关系是什么?你能指出博客条目吗 负载平衡器平衡负载。它们监视Web服务器的运行状况(响应时间等),并在Web服务器之间分配负载。在更复杂的实现中,如果出现流量高峰,可以自动生成新服务器。当然,您需要确保服务器之间的一致性。例如,它们可以共享相

我发现Instagram通过博客与其他开发者分享了他们的技术实现。对于遇到的问题,他们有一些很好的解决方案。其中一个解决方案是Amazon上的弹性负载平衡器,其背后有3个nginx实例。这些nginx服务器的任务是什么?弹性负载平衡器的任务是什么?它们之间的关系是什么?

你能指出博客条目吗

负载平衡器平衡负载。它们监视Web服务器的运行状况(响应时间等),并在Web服务器之间分配负载。在更复杂的实现中,如果出现流量高峰,可以自动生成新服务器。当然,您需要确保服务器之间的一致性。例如,它们可以共享相同的数据库

因此,我相信负载平衡器会受到影响,并根据服务器运行状况决定将流量路由到哪个服务器。 . Nginx是一个Web服务器,它非常擅长为同时使用的用户提供大量静态内容。 对动态页面的请求可以使用cgi卸载到不同的服务器。或者运行nginx的服务器也可以运行phpfpm。 . 有很多可能性。我现在正在打手机。明天我可以再写一点。 致以最诚挚的问候。

免责声明:我不是这方面的专家,我自己也在学习AWS生态系统。

ELB(弹性负载平衡器)除了接收请求并将其路由到正确的服务器之外,本身没有任何功能。服务器可以运行nginx、IIS、Apache、lighthttpd等等


我会给你一个真实的用例

我有一个nginx服务器运行一个wordpress博客。正如我所说,这台服务器是由nginx提供静态内容和“上游”功能的。php对phpfpm的请求运行在同一台服务器上。直到有一天,一切都很顺利。这个博客是一个电视节目的特色。我有大量的用户,服务器无法跟上这么多的流量。 我的第一反应是使用AMI(Amazon机器映像)在更强大的实例(如m1.heavy)上启动我的服务器副本。问题是我知道在接下来的几天里,我的流量会随着时间的推移而增加。很快,我将不得不旋转一台更强大的机器,这将意味着更多的停机时间和麻烦。 相反,我启动了一个ELB(弹性负载平衡器),并更新了我的DNS,将网站流量指向ELB,而不是直接指向服务器。用户不知道服务器ip或其他任何东西,他只看到ELB,其他一切都在亚马逊的云中进行。 ELB决定流量流向哪个服务器。您可以同时使用ELB和一台服务器(如果您目前的通信量较低),也可以使用数百台。可以随时创建服务器并将其添加到服务器阵列(服务器组),也可以配置自动缩放以生成新服务器,并使用amazon命令行将其添加到ELB服务器组,所有这些都是自动的

Amazon cloud watch(AWS生态系统的另一种产品和重要组成部分)始终关注服务器的运行状况,并决定将用户路由到哪个服务器。它还知道何时所有服务器都变得负载过重,并且是发出生成另一个服务器(使用您的AMI)命令的代理。当服务器不再处于重载状态时,它们会自动销毁(或者停止,我不记得了)

通过这种方式,我可以随时为所有用户提供服务,并且当负载较轻时,我将拥有ELB和一台nginx服务器。当负载较高时,我会让它决定需要多少服务器(根据服务器负载)。最小的停机时间。当然,你可以对你同时能负担得起的服务器数量等设置限制,这样你就不会因为你能支付的费用而收到账单

你看,Instagram的伙计们说了下面的话——“我们曾经运行过两台nginx机器,并且在它们之间进行DNS循环”。与ELB相比,IMO的效率较低。DNS循环是DNS将每个请求路由到不同的服务器。所以第一个去服务器一,第二个去服务器二,然后继续。 ELB实际上监视服务器的运行状况(cpu使用情况、网络使用情况),并根据这些情况决定服务器流量的流向。你看到区别了吗? 他们说:“这种方法的缺点是DNS更新所需的时间,以防其中一台机器需要退役。” DNS循环是负载均衡器的一种形式。但是,如果一台服务器发生故障,并且您需要更新DNS以从服务器组中删除此服务器,那么您将有停机时间(DNS需要时间更新到整个世界)。某些用户将被路由到此坏服务器。对于ELB,这是自动的-如果服务器运行状况不好,它不会收到更多流量-当然,除非整个服务器组运行状况不好,并且您没有任何类型的自动缩放设置

现在instagram的家伙们说:“最近,我们开始使用亚马逊的弹性负载平衡器,它后面有3个NGINX实例,可以进行交换(如果它们没有通过健康检查,就会自动停止循环)。”

我描述的情景是虚构的。事实上比这更复杂,但没有什么不能解决的。例如,如果用户将图片上传到您的应用程序,您如何保持服务器组上所有计算机之间的一致性?您需要将图像存储在外部服务(如AmazonS3)上。在Instagram engineering的另一篇帖子上——“照片本身直接进入Amazon S3,它目前为我们存储了数TB的照片数据。”。如果负载平衡器上有3台nginx服务器,并且所有服务器都提供html页面,其中图像链接指向S3,那么您就不会有问题。如果映像本地存储在实例上,则无法执行此操作。 ELB上的所有服务器也需要一个外部数据库。因为亚马逊有RDS——所有机器都可以指向