转 门户网站负载均衡技术的六大新挑战

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

文 / 李晓栋
来源:http://www.programmer.com.cn/4376/

 

记得上大学时,我和好友老郭讨论最多的话题便是:“像新浪这样的网站是如何支撑如此巨大的访问量?”也曾通过各种手段,猜测新浪服务器的数量、操作系统和应用软件的版本……一切都是那么神秘。毕业那年,有幸加入新浪,终于一点点地揭开了这层神秘的面纱。2004年某厂商设备介绍会上,我初次接触到了负载均衡技术。之后的几年时间,可以说是负载均衡设备在网站推广的黄金爆发期。

发展到今天,一方面硬件设备依然保持了强劲的实力,另一方面以LVS、Haproxy为代表的软件负载均衡也异军突起,被人们所认可。在新浪,软、硬件负载均衡并存的格局已有三年多的历史了,除了既往积累的经验外,近一年来,我们也看到了负载均衡所面临的一些新挑战,在此跟大家分享。

 

挑战一:Web应用对七层交换的依赖度越来越大,显著增加了负载均衡器的压力。

七层交换技术的引入,极大地解放了架构师和程序开发人员,同时也使我们越来越习惯依赖于它,甚至直呼上瘾。很难想象,如果没有负载均衡器的话,现有Web架构中的大量需求应该如何实现? 在充分享受其便利性的同时,我们也看到了一些隐忧。一方面越来越多的流量正从四层交换转为七层交换;另一方面七层交换的规则也越来越趋于复杂。在双重作用下,负载均衡器的压力急剧上升。对于任何一台负载均衡器来说:支撑相同的请求量,七层交换所消耗的CPU要远远高于四层交换。特别是在瞬间高并发连接的突发流量面前,负载均衡器面临着严峻的挑战。

 

挑战二:微博等互联网新兴产品的出现,对负载均衡器的运维工作提出了更高的要求。

微博不仅改变着亿万网民的生活,而且也正悄然推动着运维体系的建设。

首先,与传统的新闻、博客相比,微博用户对服务质量的敏感度更高,而且这种敏感度会伴随着一次次的“@”和“转发”传播扩散。在过去,当用户访问新浪服务感到慢时,反映的渠道多是打客户电话。而现在只需要在微博上一个简单的“@” 就可以与新浪的客服和技术人员直接沟通。作为流量进出的一个关卡,当微博等线上关键业务出现访问异常或故障时,工程师们都迫切地想知道:是负载均衡器的问题吗?此时故障诊断的效率显得至关重要。在实际工作中我们发现:单纯依靠负载均衡器提供的CPU、内存、连接数等统计信息,还不足以发现一些隐蔽问题。传统的抓包分析耗时耗力且效果不佳,再加上有些故障现象与客户端、后台服务器上的某些特殊设置有着千丝万缕的联系,所有这些交织在一起,给我们故障诊断带来了不小的挑战。例如有次我们发现:负载均衡器偶尔会给客户端返回HTTP  5xx的响应,当时特想快速地知道究竟是什么样的HTTP请求会触发这样的现象。但可惜的是,负载均衡器上仅有统计数字而没有请求的完整记录。在花了很大力气抓包分析后,最终定位到是由于后台一个PHP程序不小心给页面设置了一个错误的HTTP Header,导致Web Server的HTTP响应不能被负载均衡器所接受,最终给客户端返回5xx。因此在故障诊断方面,我们需要有更先进的理念和手段。

其次,微博在国内正处于快速成长期,会随时根据访问量来灵活调整服务器的数量和系统架构。在这种快速灵活的变化面前,负载均衡器相关的配置调整工作也随之增加:频繁的上下线服务器、变更七层规则等。面对这种情况,我们需要思考:如何能更加快速安全地完成好这些变更、如何能避免工程师每天被动地陷入这些重复烦琐的工作中等。目前一些硬件设备提供了API接口,像增删Server、调整Server 权重等这类风险性极低的操作可通过API接口操作,以达到提高效率的目的。而Haproxy、LVS则缺乏这样的 API接口,需要单独开发。

除此之外,关键应用对负载均衡器的监控也有越来越多的新需求。比如:有些应用希望当负载均衡器检测到服务器池中活跃的服务器数量少于一定比例后,便提前给系统管理员作出预警;及时发现服务器池中权重等设置不合理的问题等。

 

挑战三:多核处理器时代下,Haproxy等用户态的软件负载均衡正面临新的性能瓶颈。

近几年来CPU发展进入了多核时代,CPU由过去的单核发展到四核、六核、八核、十二核,甚至更多,而主频则变化不大。在这种趋势下,充分利用多核特性显得尤为重要。但在我们研究中发现,像Haproxy这类基于用户态的软件负载均衡,其对CPU主频的依赖度要远远高于CPU核数。换言之,在高主频、核数少CPU下的性能很有可能要优于低主频、核数多的CPU。这一点,在Haproxy服务器选型时尤为重要。据我们分析,这主要是由于操作系统对多核(多CPU)下的并发支持度还不够好。

 

挑战四:软件负载均衡发展路上的“鸡蛋-篮子”理论的艰难选择。

硬件负载均衡器往往以单台高性能著称,而Haproxy、LVS为代表的软件负载均衡的优势则在于成本低廉、可灵活定制,其性能与服务器CPU、网卡等硬件直接相关(当然特殊的优化也很重要)。正如前面提到的,当七层交换流量越来越大时,我们究竟是该投入成本让单台LVS、Haproxy足以支撑如此大的流量,还是让更多中等性能的服务器共同分担这些流量呢?这就是所谓的经典的“鸡蛋-篮子”理论:究竟该不该将鸡蛋放到一个篮子里呢?

其实不同的选择各有利弊。2~3年前,我比较赞同将流量分摊到多台软件负载均衡器上,当时主要考虑到风险的分散。而现在,我更倾向于将流量集中于一台上。之所以这样,是从以下四个角度考虑的。

第一,目前国内IDC内每个机架所放服务器数量跟电力配额直接相关。而负载均衡由于其特殊性,往往是两台为一组,这样每增加一组都会增加额外的电力开销,特别是在电力资源紧张的IDC内,提高单台软件负载均衡器的承载能力可以为关键业务腾出更多的机架来。

第二,从服务稳定角度考虑,我们通常会将LVS、Haproxy直连核心交换机,如此一来,每增加一组,就意味着会占用更多的核心交换机端口资源。

第三,是基于管理成本的考虑。LVS、Haproxy之所以能在新浪得到广泛应用,较低的管理成本是重要原因之一。在新浪我们通过一套集中管理平台和快速初始化的办法实现了运维成本的非线性增加。但不可否认的是,每新增一组,运维成本或多或少总会增加一些。之前也曾设计过一套“同机房内负载均衡器的集群池方案”,即:在一个机房内主备机的数量比不再固定为1:1, 虚拟IP(VIP)会根据集群池中每台Haproxy/LVS的负载状况,动态地“漂”在其中某台上。但后来发现这个“听起来很美”的方案,在实际运行中遇到了种种问题,运维成本不降反升。最终我们又回归了传统的1台Active+1台Standby的模式,正所谓简单即是美。

第四,目前硬件负载均衡器正朝着“更高的性价比”方向发展,换句话来讲,如果我们不提升软件负载均衡器的单机支撑能力,则终有一天,其与硬件设备相比的成本优势将会淡去。

 

挑战五:在新时期下,如何找到负载均衡的最佳软硬结合之道?

朋友、同行聚会时,常有人问我:“你们有了Haproxy、LVS后,会不会不买硬件设备了?”、“你最近又在山寨什么?”每次听到这些,我都会微微一笑。如前文所述,Haproxy、LVS这类的软件负载均衡和硬件设备各有优势,在我看来,负载均衡的“软”、“硬”解决方案并非水火不容,只要找到最佳的软硬结合之道,鱼和熊掌还是可以兼得的。下面是我们在长期摸索中,总结出来的一些经验。

软件负载均衡可优先承担四层交换流量,让硬件设备更专注于七层交换:由于工作方式和原理的不同,专注于四层交换的LVS在稳定性、单机支撑能力、易维护性、管理成本等多方面均要大大优于Haproxy。特别是在DR模式(即单臂)下, 单台LVS足以应对绝大多数业务的访问量。

优先保障“明星”产品占用宝贵的硬件设备资源:这里指的“明星产品”是指那些用户群正处于快速增长,并被广泛追捧的热点互联网产品,例如微博。考虑到负载均衡器一旦发生异常或宕机后,将对产品的美誉度和用户体验产生一定程度的影响,这属于无形成本的损失。正所谓“好钢要用在刀刃上”,我们可以优先将这类流量放到硬件负载均衡器上。

对于必须采用七层交换的重点服务来说,尽量避免同一重点服务的流量全部放在软件负载均衡器上。例如某重点服务分布于四个IDC内,则可考虑两个IDC内使用Haproxy,另外两个IDC使用硬件设备。这样一方面可以在一定程度上规避使用Haproxy可能带来的风险,另一方面也方便对软、硬件负载均衡器的稳定性、响应时间等进行长期对比观察。

要充分利用好同一IDC内的软、硬件负载均衡器,当一方负载高时,另一方可协助其分担流量,缓解燃眉之急。

总而言之,在负载均衡方面的支出正所谓该花则花、该省则省,合理使用可以让你在保障服务稳定的前提下,获得最佳的投入产出比。

 

挑战六:软件负载均衡器的资源复用,在降低成本的同时,同时也面临着一定的运维风险。

目前我们的软件负载均衡器分布于全国各地,其中一些中小规模IDC内的软件负载均衡器的负载并不是特别高,而这些机房普遍又需要VPN、自动安装等服务,单独为这些服务再放1~2组服务器显得很不划算。因此我们想到对软件负载均衡器进行资源的复用,即:在软件负载均衡器上同时运行VPN等服务。在实际中发现,这种资源复用面临两方面的风险:一是VPN、自动安装、负载均衡可能分属于不同的管理员,这样大家对同台服务器进行操作会增大因配置冲突、操作不当等导致的服务间互相影响的概率;二是非负载均衡的服务可能会突发占用过多的CPU或网络资源,对正常的负载均衡服务造成了一定的影响。由于LVS、Haproxy服务的特殊性,像Xen这类通过虚拟化来实现资源隔离的办法又不太适用;对服务器流量进行QOS设置,虽然可以起到一定的效果,但配置方面还是有些烦琐。还有更好的办法吗?这确实值得我们思考。

当然除了以上六方面挑战外,负载均衡领域还有很多值得研究之处。不同网站有不同的实际情况,希望本文能对大家起到抛砖引玉的作用。

 

作者简介:

李晓栋,新浪网研发中心基础架构部技术经理、集团金牌讲师。在新浪有6年多的系统、网络、安全相关工作经验,现负责新浪网络设备和操作系统相关研发工作。自2007年9月以来带领团队研发了新浪DDOS防火墙、广域网加速器、软件负载均衡管理系统、网页挂马检测系统等重要产品, 为公司节约成本上千万元。

 

(本文来自《程序员》杂志10年11期)

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block var foo = 'bar'; 

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

gantt
        dateFormat  YYYY-MM-DD
        title Adding GANTT diagram functionality to mermaid
        section 现有任务
        已完成               :done,    des1, 2014-01-06,2014-01-08
        进行中               :active,  des2, 2014-01-09, 3d
        计划一               :         des3, after des2, 5d
        计划二               :         des4, after des3, 5d
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值