- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现,Instagram通过其博客与其他开发人员共享其技术实现。他们为遇到的问题提供了很好的解决方案。他们提供的解决方案之一是Amazon上的Elastic Load Balancer,其后有3个nginx实例。这些nginx服务器的任务是什么?弹性负载均衡器的任务是什么,它们之间的关系是什么?
最佳答案
免责声明:无论如何我都不是专家,我自己也在学习AWS生态系统。
ELB(弹性负载平衡器)本身没有任何功能,只是接收请求并将其路由到正确的服务器。服务器可以运行nginx,IIS,Apache,lighthttpd(您将其命名)。
我会给你一个真实的用例。
我有一台运行一个wordpress博客的nginx服务器。就像我说的那样,该服务器由nginx提供服务,该服务器提供静态内容,并将.php请求“上游”传输到在同一服务器上运行的phpfpm。一切顺利,直到一天。该博客在电视节目中精选。我有大量的用户,服务器无法跟上这么大的流量。
我的第一个反应是仅使用AMI(亚马逊机器映像)在更强大的实例(例如m1.heavy)上旋转服务器的副本。问题是我知道接下来几天我的流量会随着时间增加。很快,我将不得不旋转一台功能更强大的机器,这将意味着更多的停机时间和麻烦。
相反,我启动了ELB(弹性负载平衡器)并更新了DNS,以将网站流量指向ELB,而不是直接指向服务器。用户不知道服务器IP或其他任何内容,他只看到ELB,其他所有内容都在亚马逊的云中进行。
ELB决定流量流向哪个服务器。您可以同时拥有ELB和一台服务器(如果当前流量很低),也可以有数百台。可以随时创建服务器并将其添加到服务器阵列(服务器组),也可以配置自动缩放以生成新服务器,并使用amazon命令行将它们自动添加到ELB Server组中。
亚马逊云监视(AWS生态系统的另一个产品和重要组成部分)始终在监视服务器的运行状况,并决定将用户路由到哪台服务器。它还知道何时所有服务器都变得太负载,并且是发出命令以生成另一台服务器(使用AMI)的代理。当服务器不再承受重负荷时,它们将自动销毁(或停下来,我不记得了)。
这样,我可以随时为所有用户提供服务,而在负载轻的情况下,我将拥有ELB和一台nginx服务器。当负载很高时,我会让它决定我需要多少服务器(根据服务器负载)。停机时间最少。当然,您可以设置限制,以限制同时可以负担多少台服务器以及类似的费用,这样您就不必为可支付的费用付费。
你看,Instagram的人说以下话:“我们曾经在两台nginx机器之间运行DNS Round-Robin”。与ELB相比,这是效率低下的IMO。 DNS Round Robin是dns将每个请求路由到不同的服务器。因此,首先进入服务器一,其次进入服务器二,然后再继续。
ELB实际上观察服务器的健康状况(cpu使用情况,网络使用情况),并根据此结果决定将哪个服务器流量发送给该服务器。你看得到差别吗?
他们说:“这种方法的缺点是,如果其中一台计算机需要停用,则DNS需要花费一些时间。”
DNS轮询是负载均衡器的一种形式。但是,如果一台服务器运行kaput,并且您需要更新DNS以将其从服务器组中删除,则您将有停机时间(DNS需要时间才能更新到整个世界)。一些用户将被路由到该故障服务器。借助ELB,这是自动的-如果服务器运行状况不佳,它不会再收到任何流量-除非整个服务器组的运行状况都不佳,并且您没有任何类型的自动扩展设置。
现在在instagram上的家伙们说:“最近,我们转而使用Amazon的Elastic Load Balancer,其后有3个NGINX实例可以交换和切入(如果运行状况检查失败,则将自动退出循环)。”
我说明的场景是虚构的。它实际上比这更复杂,但是没有什么无法解决。例如,如果用户将图片上传到您的应用程序,您如何才能保持服务器组中所有计算机之间的一致性?您需要将图像存储在外部服务(如Amazon s3)上。在Instagram工程上的另一篇文章中:“照片本身直接到达Amazon S3,该商店目前为我们存储了数TB的照片数据。”如果它们在负载均衡器上有3个nginx服务器,并且所有服务器都提供html页面,图像链接指向这些页面,则指向S3,那么您将没有问题。如果映像存储在本地实例上–则无法执行。
ELB上的所有服务器也将需要一个外部数据库。为此,亚马逊拥有RDS –所有机器都可以指向相同的数据库,并且可以保证数据的一致性。
在上图中,您可以看到RDS“只读副本”-这是RDS负载平衡的方式。抱歉,我目前对此并不了解。
尝试阅读以下内容:http://awsadvent.tumblr.com/post/38043683444/using-elb-and-auto-scaling
最好的祝福。
关于nginx - 负载均衡器背后的nginx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19200109/
在 Web 应用程序架构设计期间,我必须从概念上计算我的服务器之一可以服务多少个当前客户端。然后我可以预算它。 那么,有什么公式可以遵循吗?或者,你如何计算这个?或者,通常,一个 httpd/tomc
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是
我正在使用 Angular 5,我正在尝试在加载 div 的背景图像时获取加载图标。 如果它是一个普通的 img,我对此没有问题,但如果我尝试将它作为背景,它就不起作用。 这里是一些示例代码 app.
我们怎么知道我们的程序在 CPU 上有多少负载? 我尝试使用 htop 找到它。但是 htop 不会给 cpu 负载。它实际上给出了我程序的 cpu 利用率(使用 pid)。 我正在使用 C 编程,L
我们发现从Spark 1.3到当前的Spark 2.0.1以来,从Oracle数据库使用Spark的API加载数据一直很慢。典型的代码在Java中是这样的: Map options =
我有时会收到 mnesia overloaded主要使用时的错误消息 async_dirty查询和 ram_copies表。所以为了了解发生了什么,我想获得更多关于 mnesia 状态的信息,例如每秒
对于通常使用很少 CPU 的程序来说,内核 CPU 非常高。 Linux 机器在状态之间交替。大多数时候,程序使用低 CPU 正常执行。在 CPU“激增”期间,程序使用 100% 可用 CPU 使用高
我正在使用 Raspberry Pi 2 来路由 wifi-eth 连接。因此,从 eth 方面来看,我有一台可以使用 Pi wifi 连接到互联网的计算机。在 Raspberry 上我启动 htop
基本上我有一个网页,其中有一个 iframe 可以从不同的域加载另一个网页。它移动得很慢,我想证明整个页面很慢只是因为 iframe 内的页面。 有什么方法可以测量总页面负载以及总页面负载中有多少%来
我们有一个基于 Spring 的应用程序,它充当使用其他 Rest API 的编排层。我只想测试这个组件的性能,而不测试正在使用的下游 api。 我正在寻找有关如何完成此操作的任何架构建议? 当前的方
我正在学习 hibernate 。为了进行测试,我使用无效 key 调用了 session.load 。当我在调试器(JB Idea)中跨过该行后,没有任何反应 - 我预计会得到 ObjectNotF
我正在开发一个小型的待办事项 PHP 应用程序。我正在使用 jQuery 构建 HTML。其中一个是一个按钮,用于启动一个模式,允许用户编辑该项目。我很好奇加载数据时更好的方法是什么: 1) 在初始加
我尝试在 twitch 播放器中使用 angular 作为覆盖标记。 我将 ng-repear 与(键,值)结合使用。 //player is here 设置是一个全局对象。但是当我尝试加载页面
我即将了解 C 语言中的特定进程如何在特定时间范围内加载 CPU。该进程可能会在运行时切换处理器核心,因此我也需要处理这个问题。 CPU为ARM处理器。 我研究了从标准顶部获取负载的不同方法,perf
这个问题在这里已经有了答案: XMLHttpRequest Origin null is not allowed Access-Control-Allow-Origin for file:/// t
您好,我正在用 Java 开发负载平衡算法。在我的系统中将有一个主节点和 n 个从节点。主节点将接收查询分发给它的从节点。但是在将查询分发到其从节点之一之前,我想测量从节点中的当前负载,以检查特定从节
我正在渲染由大约 50 万个三角形组成的相当重的对象。我使用 opengl 显示列表,在渲染方法中只调用 glCallList。我认为一旦图形基元被编译成显示列表,cpu 的工作就完成了,它只是告诉
我正在尝试加密 Sipdroid,为此我必须在 RTP 数据包获得编码的音频负载后对其进行加密。我在 RTP 数据包类中使用这个函数: public byte[] getPayload() {
我正在尝试解析以下 JSON 负载: { "results":[ [ 298.648132, 280.68692, 356.54
在动画期间 cpu 负载非常高(高达 75%) 是否有优化代码以降低 CPU 负载的方法? 我的代码: ImageView myImageView = (ImageView)findViewById(
我是一名优秀的程序员,十分优秀!