Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

浅谈网络负载平衡

  “负载平衡”这个词完全可以从名字看出它的意思。在计算机网络中可以称的上“负载”的东西只有服务器,而“平衡”这个词可以说明“负载”的服务器不是单一的,只有两个或两个以上的东西才能用“平衡”来形容。因此根据这个“负载平衡”就可以推出这是一种让多个服务器之间的负载平衡的技术。这种技术早已不是什么新鲜的东西,从上个世纪末互联网刚开始普及的时候就被利用的技术。
  说白了,所谓“负载平衡”就是搞一堆服务器,然后使用种种手段让它们的数据同步(或者看似同步),并且把用户的请求分配到相对空闲的服务器上处理。这就是最基础的过程,根据这个过程中的细节部分又会发展处一系列的技术。但是,说到底,做好负载平衡最重要的部分还是硬件支持。技术层面的东西只是用来降低成本的而已。如果只有两台破服务器,技术再好也做不出10台高级服务器的效果。这里,就提到了两个技术要点,数据同步和资源分配,这才是开发者最关心的地方。
  数据同步就是一台服务器上的数据发生改变时同步到其它服务器上。比如用户上传一张图片就可以从服务器分发到其它各个服务器上。用户发表一篇文章也可以把数据库的写操作同步到各个服务器上,只有读操作可以在自身服务器上完成。这样数据的读取速度就快了,不过写入操作会给服务器带来一些额外的资源开销。但是这个方法很安全,即使一台服务器被外星人攻击了其它服务器也可以照常运行,而且每个服务器上的数据都是完整的,省去了单独做灾难备份的工作。既然启用服务器群集,在程序开发上就应该注意一些问题,比如哪些数据是需要同步,哪些数据是不需要同步的。避免不必要的同步操作发生而浪费资源。这只是数据同步中的一种比较普通的方法而已,具体必须根据项目需求来制定。
  资源分别就是客户端发出请求以后到底让哪个服务器来响应,最简单的办法即使DNS轮询的方式分配。给DNS上添加多个A记录就可以在请求时候,从A记录的服务器IP集中轮流选择服务器。但是对于一些下载的网站,这个方案就不太理想。比如有两个服务器,一个在北京,一个在广州。一个广州的用户要下载东西当然是直接从广州的服务器下载快了,但是使用DNS轮询会有一半的概率被分配到北京的服务器上。所以解决这个问题就可以使用服务器来计算与请求IP最近的服务器,并使用它。综合这个两种方法,我们又可以得出一种新的方法。就是让解析DNS的服务器来计算并分配物理距离最近的服务器,这种方式被称为“智能DNS”。
  网络负载平衡问题问题的难点就是这俩,解决了他们自然就搞定。至于解决方法,上面说的只是冰山一角而已。可以从一大堆的方法中挑出一种,但是没有最好的解决方法,只有最适合的解决方法。   
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^