1、概述很明显通过前面的八篇文章的介绍,并不能覆盖负载均衡层的所有技术,但是可以作为一个引子,告诉各位读者一个学习和使用负载均衡技术的思路。虽然后面我们将转向“业务层”和“业务通信”层的介绍,但是对负载均衡层的介绍也不会停止。在后续的时间我们将穿插进行负载均衡层的新文章的发布,包括Nginx技术的再介绍、HaProxy、LVS新的使用场景等等。 这篇文章我们对前面的知识点进行总结,并有意进行一些扩展,以便于各位读者找到新的学习思路。 2、负载均衡层的核心思想2-1、一致性哈希与Key的选取在《架构设计:负载均衡层设计方案(2)——Nginx安装》 文章中我们详细介绍了一致性哈希算法。并且强调了一致性Hash算法是现代系统架构中的最关键算法之一,在分布式计算系统、分布式存储系统、数据分析等众多领域中广泛应用。针对我的博文,在负载均衡层、业务通信层、数据存储层都会有它的身影。 一致性算法的核心是:
2-2、轮询与权
2-3、租约与健康检查租约协议主要为了保证一个事实:如果服务器对客户端的检查操作在“最迟时间”失败后,那么服务器端肯定会注销客户端的登录信息,同时客户端上服务器的连接信息也会消失(并且不在向下提供服务)。每一次检查成功,这个“最迟时间”都会向后推移。 租约协议和我们提到的哈希算法一下一样,也是系统架构设计中最基本的设计思想,并且大量运用在各类型的系统中,它的工作原理是每一位架构师都需要掌握的。例如:zookeeper使用这个协议保证Flow节点和Leader节点的链路是正常的;分布式存储系统用这个协议保证datanode和namenode的连接是正常的; 3、负载均衡层技术汇总在前面的博文中,我重点介绍了Nginx、LVS、Keepalived技术。由于时间有限,这里我们对博文中提到的几种技术进行一个总结,然后再扩展介绍一下DNS技术、CDN技术和硬件负载技术。 3-1、Nginx技术在负载均衡层这个大的章节中,我有三篇文章都在直接介绍Nginx的原理和使用。但是之后有朋友给我反映还想了解更多的Nginx知识,特别点名要求我再做一篇文章介绍Nginx的动态缓存。是的,我在后面的时间里是有计划介绍Nginx的动态缓存技术,还会介绍Nginx和多款主流的反向代理软件的性能对比。但这需要时间,特别是我不想去网上找一些已有的性能对比图,还是自己一边做这样的性能测试,一边做性能报告比较靠谱。 下面这些技术是我在博文中已经重点介绍过得,我们再做一下总结:
重要的配置项包括:worker_processes、worker_connections。但是光是配置这些属性是不够的,最关键的是我们要打开操作系统级别的“最大文件数”限制问题。使用“ulimit -n 65535”设置本次会话的“最大文件数”限制;还要使用“vim /etc/security/limits.conf”命令,修改内核的配置信息。主要是以下两项:
另外,还要注意和nginx配置项中的“worker_rlimit_nofile”属性共同使用:
gzip是Nginx进行HTTP Body数据压缩的技术。下面这段Nginx配置信息是启用gzip压缩的实例:
http返回数据进行压缩的功能在很多场景下都实用: a、 如果浏览器使用的是3G/4G网络,那么流量对于用户来说就是money。 b、 压缩可节约服务器机房的对外带宽,为更多用户服务。按照目前的市场价良好的机房带宽资源的一般在200RMB/Mbps,而服务器方案的压力往往也来自于机房带宽。 c、 不是Nginx开启了gzip功能,HTTP响应的数据就一定会被压缩,除了满足Nginx设置的“需要压缩的http格式”以外,客户端(浏览器)也需要支持gzip(不然它怎么解压呢),一个好消息是,目前大多数浏览器和API都支持http压缩。
Nginx的强大在于其对URL请求的重写(重定位)。Nginx的rewrite功能依赖于PCRE Lib,请一定在Nginx编译安装时,安装Pcre lib。 Nginx的rewrite功能在我《架构设计:负载均衡层设计方案(3)——Nginx进阶》 这边博客中进行了讲解。 下面是一段rewrite的示例:
http_image_filter_module 是nginx的图片处理模块,是使用nginx进行静态资源和动态资源分开管理的关键引用技术。通过这个模块可以对静态资源进行缩放、旋转、验证。 需要注意的是,http_image_filter_module模块所处理的缩率图片是不进行保存的,完全使用节点的CPU性能进行计算,使用节点的内存进行临时存储。所以如果要使用http_image_filter_module进行图片处理,一定要根据客户端的请求规模进行nginx节点的调整。并且当站点的PV达到一定的规模时,一定要使用CDN技术进行访问加速、对图片的访问处理手段进行规划。 由于我们在之前涉及Nginx的文章中,并没有详细讲解Nginx的图片处理模块,只是说了要进行介绍,所以这里我给出一个较为详细的安装和配置示例: nginx的http_image_filter_module模块由GD library进行支持,所以要使用这个图片处理模块,就必须进行第三方依赖包的安装:
然后,Nginx要进行重新编译:
使用图片处理模块的配置示例:
其中关于正则表达式的语法和已经介绍过的rewrite的语法就不再进行介绍了,主要看http_image_filter_module相关的属性设置: image_filter test:测试图片文件合法性
目前行业内也有很多与Nginx解决同类问题的软件,他们分别是Apache基金会的 Apache HTTP Server、淘宝开源的Tengine、Haproxy、包括Windows 下运行的IIS,也支持反向代理 。 这里笔者再次重点提到Tengine,建议各位读者有时间的时候可以使用一下,这个对Nginx进行了深度再开发的软件。 3-2、LVS技术LVS是Linux Virtual Server的简写,意即linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立。 LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。 在我的系列文章中,《架构设计:负载均衡层设计方案(4)——LVS原理》 、《架构设计:负载均衡层设计方案(5)——LVS单节点安装》 、《负载均衡层设计方案(7)——LVS + Keepalived + Nginx安装及配置》 都涉及到LVS的讲解。 这里我们再总结一下LVS中的三种工作模式: 3-2-1、NAT模式NAT方式是一种由LVS Master服务节点收到数据报,然后转给下层的Real Server节点,当Real Server处理完成后回发给LVS Master节点然后又由LVS Master节点转发出去的工作方式。LVS的管理程序IPVSADMIN负责绑定转发规则,并完成IP数据报文和TCP数据报文中属性的重写。 LVS-NAT模式的优点在于:
3-2-2、DR模式LVS的DR工作模式,是目前生产环境中最常用的一种工作模式,网上的资料也是最多的,有的文章对DR工作模式的讲解还是比较透彻的: LVS-DR模式的优点在于:
LVS-DR当然也有缺点:
3-2-3、TUN模式LVS-DR模式和LVS-TUN模式的工作原理完全不一样,工作场景完全不一样。DR基于数据报文重写,TUN模式基于IP隧道,后者是对数据报文的重新封装: IPIP隧道。将一个完整的IP报文封装成另一个新的IP报文的数据部分,并通过路由器传送到指定的地点。在这个过程中路由器并不在意被封装的原始协议的内容。到达目的地点后,由目的地方依靠自己的计算能力和对IPIP隧道协议的支持,打开封装协议,取得原始协议: 可以说LVS-TUN方式基本上具有LVS-DR的优点。在此基础上又支持跨子网间穿透。 3-3、CDN技术CDN技术Content Delivery Network:内容分发网络。为什么有时我们访问互联网上的视频资源、图片资源会比较慢,甚至访问失败。其中有一个重要的原因,是资源的物理位置离客户端太远了,可能其中有4层NAT设备(相当于使用网通的线路访问电信服务器上的资源)。 我们试想一下,如果将我们要访问的资源放到离我们客户端最近的一个服务上(例如在广州的客户端访问的资源就在广州的机房)。那么是不是就解决了这个问题(这个点称为“边缘节点”)。这就是CDN网络解决的问题,如下图所示: 目前CDN服务不需要我们进行开发,市面上有很多公司都提供免费的/付费的 CDN服务(请直接在google或者百度上面输入:CDN,就会有很多“推广”信息了,在我的博文中不打广告^_^)。当然如果您想自行搭建CDN网络,可以参考以下技术方案: Squid:Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。目前,国内很多CDN服务商的网络都是基于Squid搭建的 利用Nginx的proxy_cache搭建:Nginx中的rewrite技术实际上就可以实现URL请求重写,实现请求转发。而Nginx中的proxy_cache组件可以使得从远端请求的源数据保存在本地,从而实现一个CDN网络的搭建。 自己写:CDN网络没有特别复杂的技术门槛,如果您有特别的需求,可以自己写一个。当然上图中所介绍的CDN网络属于第一代CDN网络,将第二代/第三代P2P技术加入到CDN原理中,可以形成第二代CDN网络:如下图所示: 第三代P2P技术又被称为混合型P2P技术主要是为了解决元数据服务器的处理压力,加速资源的本地化速度。关于P2P技术我会在讲完“业务系统设计”、“业务通信系统设计”后,专门做一个新的专题进行介绍。另外提一下,YouTube的P2P网络就是自己做的。 4、后文介绍要总结的内容实在太多了,我决定再开一篇文章《架构设计:负载均衡层设计方案(9)——负载均衡层总结下篇》,继续进行负载均衡层技术的总结。我们将总结Keepalived、DNS技术、硬件负载,并且向大家介绍更广义的负载均衡技术。 |
|
来自: Bladexu的文库 > 《负载均衡层设计方案》