解析负载均衡-四层交换-七层交换-软交换-硬交换-F5-nginx的关系
一、七层网路协议
OSI中的层 | 功能 | TCP/IP协议族 |
---|---|---|
应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 |
表示层 | 数据格式化,代码转换,数据加密 | 没有协议(加密,ASCII等) |
会话层 | 解除或建立与别的接点的联系 | 没有协议(SQL等) |
传输层 | 提供端对端的接口 | TCP,UDP |
网络层 | 为数据包选择路由 | IP,ICMP,OSPF,EIGRP,IGMP |
数据链路层 | 传输有地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,MTU |
物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 |
二、四层交换和七层交换
也称作是四层负载均衡和七层负载均衡,含义是通过七层协议的那一层来决定哪些流量需要做负载均衡。
一般常见的是基于三层IP、四层port和七层http协议
来做负载均衡;
一般采用软交换、硬交换和软硬结合(一般七层才会采用软硬结合模式,如四层硬交换+七层软交换)
除了四层交换和七层负责均衡,还有其它层的一些负责均衡,如:
- 二层负载均衡:基于MAC地址的二层负载均衡
- 三层负载均衡:基于IP地址的三层负载均衡
- 四层负载均衡:四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器。四层是基于三层IP交换+4层的端口
- 七层负载均衡:七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器。七层是基于四层交换+七层的url
三、F5负载均衡
- 四层交换只是理论,不是具体可用的产品
- F5是实现四层交换的一款产品,属于硬交换,价格贵性能好
- 四层交换软件除了F5,还有LVS(软交换)等其它同类型产品
- 除了四层交换软件,还有七层交换软件如haproxy,MySQL Proxy,nginx等
四、项目实践
场景1:后端只有一套程序,对性能无要求,只要求主备两台即可,如何简单的做负载均衡?
思路:客户端通过代码简单实现:
if(condition1){
IP_1+port_1
}else{
ip_2 + port_2
}
场景2:后端只有一套程序,对性能和稳定性有很高要求,要求能够随业务量增长不断增加程序套数,如何做负载均衡?
思路:通过四层交换实现,即IP+port,比如使用四层交换产品F5(硬交换)或者LVS(软件换)
场景3:后端不止一套程序,而是由很多子程序组成的服务群,对性能和稳定性要求较高,要求随业务量增长,需要不断增加服务群的套数,如何做负载均衡?
思路:通过七层交换实现,即IP+port+url,比如使用四层负载均衡的F5+七层负载均衡的Nginx(静态资源七层分流也可以选Varnish,缓存加速能力强)
整体系统架构变为:F5(一个)+nginx(N个,每个nginx负责一套程序群)+程序群(M套),F5作为总入口,通过IP+端口
将请求负责均衡分发给N个nginx,每个Nginx拿到被分配的请求后,通过url
将请求分发给它负责管理的程序群的具体某个子程序。