zoukankan      html  css  js  c++  java
  • 负载均衡杂谈

    负载均衡杂谈

      最近春节临近,又到了一年一度春运时节,而春运又免不了各种抢票,由此抢票软件也就应运而生,此时,我们发出的大量请求会给网站带来负载。这当然很正常,但是当我们给这些服务器增加负载时,会发生什么呢?这时,事情可能变得很糟糕,如果负载过高(抢票的人太多),网站就可能出现性能损失。它会逐渐变慢,直到最后完全没有反应。而这当然不是我们所期望的。这时候,要解决这个问题,就需要更多的资源。可以选择购买一台配置更高的机器来代替当前的服务器(scale up,纵向扩展),或者购买另外一台普通配置的机器来和当前的服务器一起搭配工作(scale out,横向扩展)。下面对纵向扩展和横向扩展进行一下介绍。

    纵向扩展

      纵向扩展常用于应用需要更多的计算能力的情况。例如数据库增长过快,导致之前内存不够用;又如硬盘空间不足,或者数据库需要更大的计算能力和处理更多的请求。

      总的来说,数据库是纵向扩张的很好的实例,因为传统来说,将数据分散到多台机器上运行会出现严重的问题。原因在于,很多在单台机器上理所当然的设计无法在多台机器上运行。比如,如何在多台机器上高效的共享数据表?这是一个很难解决的问题,也正是MongoDB和CouchDB一些新的数据库设计成以另外一种方式运行的原因。

      但纵向扩展可能会非常昂贵(土豪无视)。通常,当需求达到特定规格时,服务器的价格会突然暴增。现在的机器都有一个高规格的RAID控制器、多个企业级硬盘和一个新型处理器(看起来很神秘,实际上和之前的处理器表现差不多,但标价却高出很多)。如果你只需要更新几个部件,可能纵向扩展比横向扩展便宜,但你很可能发现,这么做并不合算。也就是说,如果需要的只是额外的几千兆RAM或者更大的硬盘,或者只需要提高某种用途的性能,这才可能使你的最佳选择。

    横向扩展

      横向扩展会出现在你手里有两台或者三台机器,而非单台机器时,纵向扩展的问题在于,到了某种程度,你会碰到无法逾越的限制(土豪,这就是有价无市啊)。单台机器能容纳的计算能力和内存都有限。如果你需要的不止是那些,该这么办呢?其实很好解决,横向扩展的优势就是你可以不断的加机器,当然咯,到达某种程度之后,也会开始碰到存储空间以及计算能力的问题,但是通过横向扩展肯定能获得比纵向扩展更大的计算能力。除此之外,在进行横向扩展的时候,如果其中某台机器没法工作了,仍然可以用其他的机器来处理负载,而纵向扩展,若机器没法工作了,一切都将无法运行。横向扩展当然也会有问题,比如说如何对多台机器同时操作,来使它们能像单台机器一样工作?

      这时,负载均衡就应运而生(词汇量不行,一个词用两遍,求不吐槽~)。那么问题来了:什么是负载均衡呢?

    什么是负载均衡

      伟大的度娘是这么说的:

      负载均衡 (Load Balancing) 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

      负载均衡(又称为负载分担),英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器FTP服务器企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
      下面来介绍一下基于DNS的负载均衡。
    基于DNS的负载均衡
      对于实际的负载均衡,它的工作机制非常简单。它使用一种称为轮转的方式,来向特定域的一组服务器分发连接请求。这种操作是顺序执行的(按照第一、第二、第三等步骤)。要向服务器增加基于DNS的负载均衡,只需为域增加多个A记录即可,是的,你没听错,就是这么简单。BND会负载完成其它工作!
    基于DNS的负载均衡的优势
    1. 简便。你可以增加另一个完全一样的系统来增加负载能力,使其能处理更多请求。或者,你可以让几个几个带宽很小的直连互联网的地址指向同一台服务器,来增加服务器的总带宽。
    2. 配置简单。你只要把地址加入到DNS数据库即可,不能更简单有没有~
    3. 易于调试。调试和处理DNS问题有大量的工具可以使用,包括dig、ping、nslookup。
    4. 容易扩展。可以基于现有平台进行快速扩展。

    基于DNS的负载的问题

      1.粘性。这个问题经常出现在动态网页,众所周知,HTTP是一种无状态协议。它患有严重的慢性失忆症,无法将会话信息从一个请求保留到下一个请求。为了解决这个问题,你可以和每个请求一起,发送一个唯一的标识。这个标识就是cookie,当然也有其它方法来达到类似的效果,这个唯一的标识允许Web浏览器收集并保留你跟网站当前交互相关的信息,所有的信息都会跟那个唯一标识进行绑定。这里的问题在于,这个数据并非在所有的服务器上都有,所以如果有了新的DNS请求要求查找服务器IP时,不能保证你就一定能回到之前连接信息的那个服务器上。

      2.负载处理方式。举个栗子,比如说,你可能会遇到这种情况,两个请求中,一个是高强度的请求,一个是低强度的请求。我们做个最坏的假设,所有的高强度请求都跑到一个服务器上,而所有的低强度请求都跑到另一个服务器上,这时就不再平衡了,若不进行处理,将有一半的用户无法使用该网站。

      3.容错性。如果有一台服务器宕机了,基于DNS负载均衡器无法进行判别,所有它仍然向那台宕机的服务器发送请求,也就是说,会有一半的请求死掉,用户只能不断刷新(F5已烂,笑~),直到切换到某个正常工作的服务器为止。

      好了,此次的负载均衡就到此为止了,如果本文有不对的地方敬请指出~
     
       PS:本博客欢迎转发,但请注明博客地址及作者~

       博客地址:http://www.cnblogs.com/voidy/

       <。)#)))≦  

    评论
  • 相关阅读:
    OSG-提示“error reading file e:1.jpg file not handled”
    OSG-加载地球文件报0x00000005错误,提示error reading file simple.earth file not handled
    QT-找开工程后,最上方提示the code model could not parse an included file, which might lead to incorrect code completion and highlighting, for example.
    我的书《Unity3D动作游戏开发实战》出版了
    java中无符号类型的第三方库jOOU
    Windows批处理备份mysql数据
    使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A
    Java版本,Java版本MongoDB驱动,驱动与MongoDB数据库,Spring之间的兼容性
    Jrebel本地激活方法
    wget下载指定网站目录下的所有内容
  • 原文地址:https://www.cnblogs.com/voidy/p/4148741.html
Copyright © 2011-2022 走看看