写点什么

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

  • 2007-10-10
  • 本文字数:1577 字

    阅读完需:约 5 分钟

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

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

  1. 需要在应用服务器集群中分担负载;
  2. 温和地应对单个服务器的宕机;
  3. 确保在最终用户端可以把这组服务器视为一个单独的服务器。

作者朱磊(音译 Lei Zhu)分析了我们常用的服务端负载均衡手段——循环 DNS( Round Robin DNS ),文中提到:

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

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

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

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

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

  1. 客户端代码:JavaScript/Flash 客户端的 SWF;
  2. 资源:图片、级联样式表、音频和视频文件、HTML 文档;
  3. 服务端代码:用于反馈客户端所需数据的后台逻辑。

其中 1、2 两类内容相对静止,一般不像第 3 类那样有负载均衡的需要。关注于第 3 类组成,作者建议采用可靠的服务器或者像亚马逊 S3 那样的服务,它描绘的策略如下:

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

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

  1. 不需要额外的服务器设备,“不需要专用负载均衡设备,无需配置负载均衡硬件或确认备份功能和主负载均衡器是否正常工作”;
  2. 服务器可以被物理隔离,“由于是客户端选择服务器而不是由一个固定的负载均衡器重定向调用,所以服务器的位置不受限制”。

文章结尾,作者介绍了上述技术如何在亚马逊的 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

2007-10-10 20:481569
用户头像

发布了 61 篇内容, 共 12.3 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

WE大会上,科学家们是怎样治愈“小破球”的?

脑极体

三千字轻松入门TensorFlow 2

计算机与AI

tensorflow 学习

甲方日常 49

句子

工作 随笔杂谈 日常

[Pulsar 社区周报] 2020-10-31 ~ 2020-11-06

Apache Pulsar

大数据 开源

曾陷“数据风暴”危机的赛默飞世尔如何化险为夷的?

华为云开发者联盟

数据库 大数据 云服务 华为云 RDS

LAXCUS 大数据集群操作系统:一个分布式分时共享 E 级系统软件(七)

陈泽云

人工智能 大数据 算法

高交会第一天,高新技术成焦点

13530558032

Serverless 是一种思想状态

donghui

Serverless

护航11.11,如何筑牢安全防御系统?

京东科技开发者

云计算 云安全 DDoS

什么?还不懂c++vector的用法,你凭什么勇气来的!

良知犹存

c++

【Mycat】作为Mycat核心开发者,怎能不来一波Mycat系列文章?

冰河

分布式事务 分布式数据库 系统架构 分布式存储 mycat

链表交集问题与DataNode宕机HDFS处理时序

garlic

极客大学架构师训练营

秋风到,ModelArts“ AI市场算法Fast-SCNN指南”秋膘贴起来

华为云开发者联盟

AI 算法 开发 OBS modelarts

高交会科技盛宴:“科技改变生活,创新驱动发展”

13530558032

mongodb 源码实现系列 - 网络传输层模块实现四

杨亚洲(专注MongoDB及高性能中间件)

MySQL 数据库 mongodb 高性能 分布式数据库mongodb

第六周总结

balsamspear

极客大学架构师训练营

极客大学 - 架构师训练营 第八周

9527

架构师Week4作业

lggl

作业

我就是增发、健身、养猫、社交通通拥有的锦鲤本鲤

脑极体

面试,到底在考察什么?

程序员架构进阶

面试 方法论

mPaaS 客户端问题排查之漫长的 3s 等待之谜

阿里云金融线TAM SRE专家服务团队

mPaaS

利用下班时间,我两星期完成了redis入门与进阶

小松漫步

数据库 redis

C++多元组tuple使用方法?你熟悉吗?快来看看吧

良知犹存

c++

第六周课后练习

balsamspear

极客大学架构师训练营

Pulsar Summit Asia 2020 | 场景案例论坛(上):多行业,多场景

Apache Pulsar

大数据 开源 Apache Pulsar

架构师Week4总结

lggl

作业

基于Fabric的性能测试与调优实践

华为云开发者联盟

区块链 算法 测试 fabric 华为云

再拔头筹,FusionInsight为华为云大数据打造硬实力

华为云开发者联盟

大数据 数据仓库 数据湖 FusionInsight 华为云

LAXCUS 大数据集群操作系统:一个分布式分时共享 E 级系统软件(六)

陈泽云

人工智能 大数据 算法

Oracle、NoSQL和NewSQL 数据库技术对比

VoltDB

数据库 大数据 数据分析 物联网

面经手册 · 第17篇《码农会锁,ReentrantLock之AQS原理分析和实践使用》

小傅哥

Java AQS CAS unsafe CLH

AJAX应用的客户端负载均衡问题探究_架构_Gavin Terrill_InfoQ精选文章