专栏名称: 数据分析与开发
伯乐在线旗下账号,分享数据库相关技术文章、教程和工具,另外还包括数据库相关的工作。偶尔也谈谈程序员人生 :)
目录
相关文章推荐
数据中心运维管理  ·  运营商智算中心建设思路及方案 ·  2 天前  
AustinDatabases  ·  OceanBase ... ·  18 小时前  
AustinDatabases  ·  OceanBase ... ·  18 小时前  
数据中心运维管理  ·  探索数据中心的多模光纤距离限制 ·  5 天前  
数据中心运维管理  ·  DeepSeek加速大马数据中心发展 ·  4 天前  
程序员鱼皮  ·  MyBatis 批量操作的 5 ... ·  2 天前  
程序员鱼皮  ·  MyBatis 批量操作的 5 ... ·  2 天前  
51好读  ›  专栏  ›  数据分析与开发

全栈必备 负载均衡

数据分析与开发  · 公众号  · 数据库  · 2016-10-25 20:38

正文

(点击 上方公众号 ,可快速关注)


来源:伯乐在线专栏作者 - abel_cao

链接:http://blog.jobbole.com/106851/

点击 → 了解如何加入专栏作者


一个了不起的创意会产生一个很棒的产品,如果它一炮走红,你发现手中的是下一个facebook 或者twitter,而且随着用户越来越多,会变得越来越慢,该怎么办呢?对全栈而言,解决这类问题的一个重要技能就是——负载均衡。


什么是负载均衡


负载(load)一词起源于典型系统,指连接在电路中消耗电能的装置,负载(用电器)的功能是把电能转变为其他形式能。引申出来,一个是实体,一个转化。


于是,对于实体,有了通信帧或者报文中数据字段的内容被称为信息负载(payload),网络负载指的就是网络中继承载的流量以及网络设备承载的用户量。


转化被进一步阐释为资源的使用情况,系统平均负载是CPU的Load 即workload,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息。


了解了负载,那么负载均衡就容易理解了。wiki百科给出的定义是这样的:


负载均衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。


并且,wiki百科自身的系统就使用了负载均衡。



每一种技术都有它应用的场景和领域,负载均衡主要解决的是系统性能问题。但是,了解了根源,就可以知道不能够一提到性能问题就非负载均衡莫属,如果负载减少了,可能少一点均衡也可以解决问题,这样的技术例如缓存。


基于DNS的负载均衡


基于DNS的负载均衡是负载均衡的最简方法,可以说是穷人的负载均衡。


DNS会将域名映射为IP地址,反之亦然。所有核心DNS服务器都是集群,用的最多的DNS服务器大概就是BIND了。查询DNS服务器时,推荐使用dig;查询DNS解析时,推荐使用nslookup。 使用DNS缓存可以提高DNS解析的性能。Dig 在mac上的使用示例如下:



对于DNS实现的负载均衡非常简单,采用轮转的方式,只要为所要服务的域名增加多个A记录即可。


例如:


abel .com . IN A 168.168.168.168

abel .com . IN A 168.168.168.168

abel .com . IN A 168.168.168.168

abel .com . IN A 168.168.168.168


基于DNS的负载均衡简单,易于调试且容易扩展。缺陷在于它有慢性失忆症,无法将会话信息从一个请求保留到下一个请求。而且,只是对目标服务地址进行了均衡,无法考虑请求处理的负载强度进行均衡,同时容错性较差。


支持DNS 负载均衡的服务商有AWS Route 53 以及dnspod。


HTTP 负载均衡


负载均衡解决的是性能问题,要先了解单个服务器的状况。一般地,nginx 的应答率比Apache 高,所以,有时更换Web 服务器就可以提高性能。


提高Apache Http的方法有禁用空载模块,禁用DNS查询,采用压缩模块,不使用SymLinksIfOwnerMatch选项,并且在Directory选项中启用FollowSymLinks,等等。


Nginx本身就是高性能的,但可以通过worker_processes 和worker_cpu_affinity调整来匹配服务器的硬件平台,还可以对压缩进行区分对待,使用其缓存的能力。例如


Http {

gzip on ;

gzip_static on ;

gzip_comp _ level 2 ;

gzip_types application / javascript ;

}


HTTP的负载均衡相当于7层负载均衡,不论Apache 还是 Nginx 都可以充当HTTP的负载均衡器。


以基于权重的负载均衡为例,可以配置Nginx把请求更多地分发到高配置的后端服务器上,把相对较少的请求分发到低配服务器。配置的示例如下:


http {

upstream sampleapp {

server 192.168.1.23 weight = 2 ;

server 192.168.1.24 ;

}

....

server {

listen 80 ;

...

location / {

proxy_pass http :// myapp ;

}

}


Nginx 作为负载均衡工作在7层,可以对做正则规则处理(如针对域名、目录进行分流等) ,配置简单,能ping通就能进行负载功能,可以通过端口检测后端服务器状态,不支持url检测。Nginx 负载均衡抗高并发,采用epoll网络模型处理客户请求,但应用范围受限。


数据库负载均衡


数据库负载均衡的一般用法从读写分离开始的,因为一般的应用都是读多写少的缘故吧。将数据库做成主从,主数据用于写操作,从数据库用于读操作,事务一般在主库完成。


数据库集群是数据库负载均衡的典型方式,集群管理服务器作为负载均衡器,例如mysql cluster。


更简单的方式是通过Haproxy 来完成负载均衡的调度。



HAProxy能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作,支持url检测后端的服务器出问题的检测会有很好的帮助。


HAProxy拥有更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)等,单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。


网络连接的负载均衡







请到「今天看啥」查看全文


推荐文章
数据中心运维管理  ·  运营商智算中心建设思路及方案
2 天前
AustinDatabases  ·  OceanBase 6大学习法--OBCA视频学习总结第一章
18 小时前
AustinDatabases  ·  OceanBase 6大学习法--OBCA视频学习总结第一章
18 小时前
数据中心运维管理  ·  探索数据中心的多模光纤距离限制
5 天前
数据中心运维管理  ·  DeepSeek加速大马数据中心发展
4 天前
中国生物技术网  ·  阿司匹林或可阻止癌症蔓延
7 年前
二更  ·  捆你,绑你,黏着你
7 年前
摄像人网  ·  亚洲首批MOVI XL遥控头来了!
7 年前