对于服务常见的2个指标
- Recovery Point Objective (RPO),指的是最多可能丢失的数据的时长(图中2)
- Recovery Time Objective (RTO) ,指的是从灾难发生到整个系统恢复正常所需要的最大时长(图中1)
如果没有高可用(图中1)都是使用负载进行冗余的话,永远就存在单点故障,调度器的单点
负载均衡
也可以叫负载调度器,通过代理方式把不同的请求通过算法调度给后面真实的服务器进行处理,实现服务的负载均衡
负载均衡种类
- LVS (LinuxVirtualServer,linux虚拟服务,软件实现)
- Nginx(Nginx服务,软件实现)
- Haproxy(Haproxy,软件实现)
- F5(硬件实现)
负载均衡工作层级(网络模型)
- LVS:4层,能识别到IP和端口
- Nginx:7层,能识别到应用服务,比如http、域名、ip、端口号等等
- Haproxy:支持4层和7层
- F5:支持2、4、7层,2层能实现基于MAC的负载,实现运营商线路的负载
负载4层工作逻辑
- 用户到后端真实服务:发送源地址没有变,目的地址改变
- 后端真实服务到用户:发送目的地址没有变,源地址改变
按照这样的网络是无法建立连接的,而LVS要做的就是把数据包头部的IP地址进行更改(把上面发送改变的IP改为真实的)也就是建立一次TCP
结论:LVS只是改变数据包头部信息,并未进行数据包的接收和转发处理,进而实现高性能
在LVS-DR模式中才是使用这种方式,NAT模式和TUN模式还是需要全部接收数据包进行转发(效率就不是很高了)
负载7层工作逻辑
- 用户到后端真实服务:源目IP都改变
- 后端真实服务到用户:源目IP都改变
其实就是Nginx进行了接收数据包和转发数据包操作,完成2次TCP建立,性能就不如LVS高
举例:(用现在比较多的代购举例)
- 负载4层:代购手里没货,用户要买产品代购就找有货的人,说我有个用户要什么,你把地址改成用户的进行快递发货(也就是现在都说0库存,一件代发)
- 负载7层:代购自己去韩国批发,运回自己家里,用户要买产品,直接快递寄走
区别:
- 4层很轻松,主要负责卖产品,但是相对产品的掌控不行,有没有货不确定,需要去问
- 7层很辛苦,又要采购又要卖产品,但是很实在有保障,就卖自己有的,确定性很高
其实就是网络模型的4层和7层的区别,7层属于最高层,拥有更高的掌控权,因为能直接识别应用,找到应用也就最快,那么4层是基于IP和端口,找到应用只能是IP+端口