负载均衡是什么?

小市民0条评论 29 次浏览

负载均衡

负载均衡的产生

随着网络的飞速发展,我们服务被访问的次数成几何倍数的增长,例如微博中一个热点就可以造成上亿次甚至几十亿访问,无时无刻都有人在用着百度的搜索等等,这样同时高频的访问给我们的服务器带来非常大的压力,轻则无法及时处理用户的请求,重则服务崩溃,用户无法访问。

所以对于这样的访问环境,为了让用户有更好的用户体验,我们会有这样的需求:

  • 可伸缩性(Scalability):当服务的负载增长时,系统能被扩展来满足需求,从而实现不降低服务质量。
  • 高可用性(Availability):尽管部分硬件和软件会发生故障,整个系统的服务必须是每天 24 小时可用。
  • 可管理性(Manageability):整个系统可能在在机器数量上很大,但应该容易管理。
  • 价格有效性(Cost-effectiveness):整个系统实现是经济的、易支付的。
    这样的需求促使了服务器集群的产生,单台的服务器一台并不能满足我的需求,高配置成本过高,由此我们便使用多台稍低配置服务器同时为我们提供服务,而这样的多台服务器我们称之为服务器集群。

为了更好的管理集群,更好的提供服务,由此出现了负载均衡技术,通过负载均衡技术来管理多台提供服务的机器(集群),相较于之前有这样的一些优势:

  • 多台低配置的机器降低了成本的支出(因为越高端的服务器价格越高昂),从而做到价格有效性;
  • 多台机器提供服务,在其中某一台出故障的时候并不会影响其他机器提供服务,客户访问也不会感知到某个节点的服务故障,从而做到高可用性;
  • 多台机器提供服务,在业务增长时只需添加机器即可做到扩展,在业务回落时也能及时回收,从而做到可伸缩性;
  • 多台机器由负载设备或软件管理,在添加、减少时容易控制,达到可管理性能;
负载均衡的方式

上文所述负载均衡就是由两台或者以上的服务器为我们提供服务,我们将来自客户端的请求靠某种算法尽量平均分摊到这些集群中,从而避免一台服务器因为负载太高而出现故障,同时能够在某台服务器故障时其他服务继续提供服务,让用户无感知。

而从早期到现在负载均衡方式有这样的两种:

  • 硬件负载均衡
  • 软件负载均衡

其中硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,由专门的硬件设备完成专门的任务,独立于操作系统,整体性能略高于软件负载均衡的实现,但是相对来说成本较高。

而更加广泛的则是使用软件的方式来实现负载均衡,实现效果不错,并且不需要成本。其中常用的方式有:
LVS
Nginx
Maglev

其中的 LVS 是章文嵩博士在 1998 年 5 月成立了 Linux Virtual Server(LVS) 的自由软件项目,进行 Linux 服务器集群的开发工作,并在网站上发布第一个版本源程序。并且在 Linux2.4 以后的内核版本中,直接将 LVS 加入内核中,不用再重新自行编译进内核。

Nginx 可以用做负载均衡,提高了 Web 应用程序的可伸缩性和可靠性。其负载均衡的实现主要依赖于反向代理与 upstream 相关模块。

反向代理是指用当前的服务器(一般称为代理服务器)来接受用户的连接请求,然后将请求转发给内部网络中的其他服务器(一般称为上游服务器),并从上游服务器上获得结果返回给用户。Nginx 有着很强大的高并发、高负载的能力。当客户端发出静态文件请求(例如前端页面)时,Nginx 会作为一个静态 web 服务器直接向客户端提供静态文件服务。当客户端发出不适合 Nginx 提供服务的动态请求时,Nginx 会作为一个反向代理服务器,将请求转发到上游服务器中处理,处理后返回的动态应答再由 Nginx 转发给客户端。


发表评论

? razz sad evil ! smile oops grin eek shock ??? cool lol mad twisted roll wink idea arrow neutral cry mrgreen