InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

AJAX应用的客户端负载均衡问题探究

作者 Gavin Terrill 译者 王翔(Vision Wang) 发布于 2007年10月10日

领域
架构 & 设计,
语言 & 开发
主题
架构 ,
性能和可伸缩性 ,
RIA
标签
弹性计算集群 ,
S3 ,
AJAX ,
负载均衡

今天,当我们选择负载均衡时,大部分Web应用集群选择基于软件或硬件的服务器端方案,而《Digital Web Magazine》最近发表的一篇文章讨论了一家公司如何在EC2支持的应用中实现客户端负载均衡。

文章从负载均衡方案的需求谈起:

  • 需要在应用服务器集群中分担负载;
  • 温和地应对单个服务器的宕机;
  • 确保在最终用户端可以把这组服务器视为一个单独的服务器。
  • 作者朱磊(音译 Lei Zhu)分析了我们常用的服务端负载均衡手段——循环DNS(Round Robin DNS),文中提到:

    很不幸,循环DNS的主要弱点是不能满足上面提到的第二个需求,当两台服务器中的一台宕机时,DNS服务器仍然会继续把请求发给它,这导致一半用户无法获得响应。

    他还指出集群前端软、硬件专用方案的不足:负载均衡器(Load Balancer)自己总有一个响应数量上限,尽管可以通过循环DNS配合专用负载均衡器解决这一问题,但维护一个专用负载均衡器需要额外投入数万美元,而且通常后备负载均衡器只有在主设备出现故障后才会发挥作用。

    在客户端负载均衡概念的介绍中,作者请读者考虑关于桌面应用如何负载均衡的问题:

    桌面程序随机选择一台服务器,然后尝试获取数据,如果服务器不可用或没有在预设的时间内响应,那么就选择另一台服务器,直到可以提取数据。桌面应用与Web应用不同的是,前者是独立于服务器,可以在客户端通过对服务器访问的负载均衡实现应用的可扩展性,而后者把客户端代码(JavaScript或Flash WSF)保存在提供数据和资源的服务器上。

    为了把概念延伸到Web应用,作者剖析了典型AJAX应用的关键组成:

  • 客户端代码:JavaScript/Flash客户端的SWF;
  • 资源:图片、级联样式表、音频和视频文件、HTML文档;
  • 服务端代码:用于反馈客户端所需数据的后台逻辑。
  • 其中1、2两类内容相对静止,一般不像第3类那样有负载均衡的需要。关注于第3类组成,作者建议采用可靠的服务器或者像亚马逊S3那样的服务,它描绘的策略如下:

    就像桌面应用一样,我们可以把一个应用服务器列表嵌到客户端代码里,Web客户端包括一个称为Servers.XML的文件,它保存了可用服务器的列表。客户端通过AJAX或者Flash访问列表中的每一个服务器,直到找到一台可响应的。

    尽管浏览器可以禁止客户端代码向它所来源的那些服务器之外的服务器发起服务端调用,但作者还是建议采用Flash或JavaScript的方案解决这个问题。采用客户端负载均衡有两个好处:

  • 不需要额外的服务器设备,“不需要专用负载均衡设备,无需配置负载均衡硬件或确认备份功能和主负载均衡器是否正常工作”;
  • 服务器可以被物理隔离,“由于是客户端选择服务器而不是由一个固定的负载均衡器重定向调用,所以服务器的位置不受限制”。
  • 文章结尾,作者介绍了上述技术如何在亚马逊的EC2和S3基础上构造一个叫VoxLite的具有高可用性和可扩展性的视频资讯应用,不过作者并没有架构出一个没有单点故障的负载均衡方案。

    很多Web应用会面向特定区域,通过一个动态DNS支持的EC2实例实现调用的负载均衡。如果提供负载均衡的这个实例出现故障,在动态DNS映像到另一个EC2实例前,整个系统就不可用了。

    为了克服这个问题,VoxLite通过向S3发起HTTP GET调用获得可用的服务器列表,该列表由EC2实例的一系列任务维护:

    1. 加载并解析http://s3.amazonaws.com/voxlite/?prefix=servers
    2. 如果当前运行实例没有被列出来,就向一批EC2实例的关键服务器各发送一个空文件;
    3. 通过测试到亚马逊内部Web服务IP地址的连接情况,可以验证该批其他服务器的是否运行正常,如果无法建立连接就把该服务器从这批服务器的列表中删掉。

    根据你的需求,客户端负载均衡在统一负载均衡的架构下,提供了一个有趣且具创新性的选择。作者总结道:

    通过在客户端负载均衡中采用S3和EC2,可以简化搭建一个具有弹性、扩展性、健壮性Web应用的工作。

    查看英文原文:Client side load balancing of Ajax applications

    Flash应该可行,但Flash的应用又有很多其它解决方案. 发表人 xiao deshi 发表于
    单点故障 发表人 Guo Xiaogang 发表于
    1. 返回顶部

      Flash应该可行,但Flash的应用又有很多其它解决方案.

      发表人 xiao deshi

      谢谢共享

    2. 返回顶部

      单点故障

      发表人 Guo Xiaogang

      没有单点故障的系统太困难了,其实真正有这种需要的系统可能10ppm都不到。

    深度内容

    大规模视频网站的计费与流量管理

    本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
    本次演讲视频录制于QCon杭州2011

    专访Jeffrey Richter:Windows 8是微软的重中之重

    Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

    应用云平台的可用性——从新浪SAE看云平台设计

    云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

    JVM定制改进 @ 淘宝

    淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
    本次演讲视频录制于QCon杭州2011

    "伤得起"的云计算应用——对云端应用之架构的思考

    2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

    让交付的速度跟上思考的速度

    12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
    本次演讲视频录制于QCon杭州2011

    架构之路——穿行在产品和业务之间

    篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
    本次演讲视频录制于QCon杭州2011

    特性注入:成功三部曲

    本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。