Tag: 负载均衡

在Amazon EC2中负载平衡?

我们在亚马逊EC2上已经和HAProxy打了几天了, 迄今为止的经验已经非常好,但是我们却一直在阻碍软件负载平衡器的性能提升。 我们并不完全是Linuxnetworking专家(我们通常是一个.NET商店),但是我们迄今为止一直都在持有我们自己的产品,试图设置合适的限制,检查内核消息和tcpdump是否有任何违规行为。 到目前为止,我们已经达到了约1700个请求/秒的高峰,此时客户端超时(我们一直在使用和调整httperf为此目的)。 一位同事和我正在听最近的Stack Overflow播客,其中Reddit创始人指出,他们的整个网站都跑掉了一个HAProxy节点,而且到目前为止还没有成为一个瓶颈。 确认! 要么是没有看到那么多的并发请求,我们做了一些可怕的错误,或者EC2的共享特性限制了Ec2实例的networking堆栈(我们使用的是一个大的实例types)。 考虑到Joel和Reddit创始人都同意networking可能成为限制因素,这有可能是我们看到的限制吗? 任何想法,非常感谢! 编辑它看起来像实际问题不是,实际上,与负载平衡节点! 罪魁祸首实际上是运行httperf的节点,在这种情况下。 由于httperf为每个请求构build和拆分套接字,所以在内核中花费了大量的CPU时间。 当我们提高请求速率时,TCP FIN TTL(默认为60s)将套接字保持太长时间,对于这种使用情况,ip_local_port_range的默认值过低。 基本上,在客户端(httperf)节点持续创build和销毁新套接字几分钟之后,未使用的端口数量用完了,并且在此阶段后续的“请求”出错,产生低的请求/秒数和大量的错误。 我们也看过nginx,但是我们一直在和RighScale合作,他们已经有了HAProxy的插件脚本。 噢,当然,除非certificate是绝对必要的,否则我们的时间太紧了。 实际上,在AWS上允许我们使用nginx并行地(如果有保证的话)testing另一个设置,并在晚些时候进行切换。 这个页面很好地描述了每个sysctlvariables(在这种情况下,调整了ip_local_port_range和tcp_fin_timeout)。

分布式并发控制

我已经在这个工作了几天,我已经find了几个解决scheme,但没有一个是令人难以置信的简单或轻量级。 问题基本上是这样的:我们有10台机器的集群,每台机器都在multithreadingESB平台上运行相同的软件。 我可以很容易地处理同一台机器上的线程之间的并发问题,但是对于不同机器上相同数据的并发性呢? 本质上,软件接收请求,通过Web服务将客户的数据从一个业务提供给另一个业务。 但是,客户可能会或可能不会在另一个系统上存在。 如果没有,我们通过Web服务方法创build它。 所以它需要一种testing和设置,但是我需要某种信号量来locking其他机器导致竞争状态。 在一个本地客户创build了两次远程客户之前,我已经遇到过这种情况,这并不是真正需要的。 我在概念上玩弄的解决scheme是: 使用我们的容错共享文件系统创build“locking”文件,这将由每台机器根据客户检查 在我们的数据库中使用一个特殊的表,并locking整个表,以便为锁logging做一个“testing和设置”。 使用Terracotta,这是一个开源服务器软件,可以协助扩展,但是使用了hub-and-spoke模式。 使用EHCache同步复制我的内存“锁”。 我无法想象我是唯一一个遇到这种问题的人。 你是怎么解决的? 你有没有在内部做点什么,或者你有一个最喜欢的第三方产品?

负载平衡networking套接字

我有一个关于如何负载平衡Web套接字的问题。 我有一个支持networking套接字的服务器。 浏览器连接到我的网站,每个人打开一个networking套接字www.mydomain.com 。 这样,我的社交networking应用程序可以推送消息到客户端。 传统上,只使用HTTP请求,我会通过在两个Web服务器前添加第二台服务器和负载平衡器来扩展。 使用networking套接字,连接必须直接与networking服务器,而不是负载平衡器,因为如果一台机器的物理限制是64k开放端口,并且客户端连接到负载平衡器,那么我不能支持超过64k的并发用户。 那么我该如何 – 当页面加载时,让客户端直接连接到Web服务器(而不是负载平衡器)? 我是否简单地从节点加载JavaScript,并且每次页面被初始请求时,负载平衡器(或其他)随机地修改脚本的URL? 处理一个波纹开始? 浏览器会注意到在Web服务器closures时连接被closures。 我可以编写JavaScript代码尝试重新打开连接,但该节点将消失一段时间。 所以我想我将不得不回到负载平衡器查询下一个节点的地址使用? 我想知道负载平衡器在初始请求时发送redirect,以便浏览器最初请求www.mydomain.com并被redirect到www34.mydomain.com 。 这很好,直到节点崩溃 – 像Facebook这样的网站不这样做。 他们是如何做到的呢?