一、 写在前面
本文的目的:
对负载均衡的理解零零散散,不成体系。
阅读这篇文章需要的条件:
1、对 OSI 模型有些许了解;
2、有耐心。本文涉及大量的知识点,且只能用文字才能讲清楚,所以文字比较多(已分段~)。
收获:
读完此篇文章,从宏观的角度理解了负载均衡的原理以及实现机制。加深对分布式架构的了解。
主要内容:
本文首先从概念开始,讲解什么是负载均衡,以及负载均衡在分布式系统中所承担的角色以及提供的功能;
讲解负载均衡的分类。分别从软硬件角度、地域范围角度以及 OSI 模型角度进行分类讲解负载均衡的实现方案;
从负载均衡的策略角度,分析目前业界的负载均衡算法以及其优缺点。
好了,准备好了么,让我们开始这次愉快之旅。
二、引言
首先,撇开对线上的影响,如果线上突发来了流量,后端服务扛不住,我们会怎么做呢?
无非两种方式:
1、提升机器配置,CPU、内存、硬盘、带宽等;
2、加机器
上面两种方式,我们称之为纵向扩展和横向扩展。
纵向扩展,是从单机的角度通过增加硬件处理能力,比如 CPU 处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。
横向扩展,通过添加机器来满足大型网站服务的处理能力。比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力。
三、概念
负载均衡,英文名称为 Load Balance,其含义就是指将负载(工作任务或者网络请求)进行平衡,分摊到多个操作单元(服务器或者组件)上进行运行。目的是尽量将网络流量 平均 发送到多个服务器上,以保证整个业务系统的高可用。
负载均衡,在互联网的早期,网络还不是很发达,流量相对较小,业务也比较简单,单台服务器或者实例就有可能满足访问需要。但如今在互联网发达的今天,流量请求动辄百亿、甚至上千亿,单台服务器或者实例已完全不能满足需求,这就有了集群。不论是为了实现高可用还是高性能,都需要用到多台机器来扩展服务能力,用户的请求不管连接到哪台服务器,都能得到相同的相应处理。
另一方面,如何构建和调度服务集群这事情,又必须对用户一侧保持足够的透明,即使请求背后是由一千台、一万台机器来共同响应的,也绝非用户所关心的事情,用户需记住的只有一个域名地址而已。调度后方的多台机器,以统一的接口对外提供服务,承担此职责的技术组件被称为负载均衡。
负载均衡主要有以下作用:
高并发。通过采取一定的算法策略,将流量尽可能的均匀发送给后端的实例,以此提高集群的并发处理能力;
伸缩性。根据网络流量的大小,增加或者减少后端服务器实例,由负载均衡设备进行控制,这样使得集群具有伸缩性;
高可用。负载均衡器通过算法或者其他性能数据来监控候选实例,当实例负载过高或者异常时,减少其流量请求或者直接跳过该实例,将请求发送个其他可用实例,这使得集群具有高可用的特性;
安全防护。有些负载均衡器提供了安全防护功能。如:黑白名单处理、防火墙等。