负载均衡
-
全称 Load balancing
- 从单机拓展到多机后,需要一种既定策略,将 客户端请求 均匀地分发给 各个服务器
-
好处
- 检测服务器可用性,排除单点故障,防止请求到达不可用的服务器
- 防止单个服务器过载
- 会话保留,复用连接
-
三种简单的实现方式
-
DNS(不推荐)
- 添加一系列A记录,将一个域名指向多个不同的IP地址,轮流分发
- 缺陷
- DNS不会检查服务器可用性,即使挂了也会返回IP地址
- 更新不及时,解析结果往往有缓存,无法立即生效
-
客户端
- 把多个IP地址写入客户端,让其自行选择可用的
-
子域名
- 实现 不同域名 解析到 不同公网ip
-
-
7层网络模型
-
物理层(第 1 层):通过物理介质传输原始比特流,即物理信号(Symbol)
-
数据链路层(第 2 层):提供可靠的节点间数据帧(Frame)传输机制,具体工作包括 目标MAC寻址
-
网络层(第 3 层):决定数据包(Packet)传输将采取的物理路径,支持 IP、ARP 等协议,具体工作包括 目标IP寻址、路由路线和流量控制
-
传输层(第 4 层):提供可靠的报文(Datagram)传输机制,支持 TCP、UDP 等传输协议,具体工作包括 根据协议确定目标端口号
-
会话层(第 5 层):负责管理会话,以支持通过多次传输连续交换信息
-
表现层(第 6 层):将来自网络服务的数据翻译成应用层可用的格式,具体工作包括字符编码转换、数据压缩、加密解密等
-
应用层(第 7 层):提供高级 API 的人机交互层,应用能够通过该层访问网络服务,如资源共享、远程文件访问等
-
-
根据模型,理论上,在2-7层都有机会变更目标终点
-
2层(很少用)
- 将 虚拟MAC地址 根据既定策略映射到 实际MAC地址
-
3层(很少用)
- 解析虚拟IP
-
上面两种都是偏底层,越靠近底层,能用来分发决策的信息越少
-
所以更多使用下面的
-
4层
- 基于
IP地址和包头部端口号进行分发,不考虑数据包内容 - 收到请求后,对数据包进行NAT转换
- 将目标 IP 地址修改成实际服务器的地址
- 在将服务器响应转发给客户端之前
- 再将源 IP 地址改成自身的 IP 地址
- 实现
- 通常是专用的硬件设备,NAT 操作可能会由专用芯片来完成
- 基于
-
7层(严格讲是 5 ~ 7 层)
-
根据
应用层协议信息(比如HTTP header)以及数据包内容进行分发 -
虽然在7层需要读取请求和响应内容,计算更多,但性能不见得比4层差
- 因为有更全面的上下文信息,可以进行更聪明的全局决策
- 比如剔除慢速连接,重定向超时请求,对内容压缩优化
-
例子
- 可通过Nginx,实现一个公网ip的请求均匀分发到多台内网ip机器上,保证资源合理分配
-
-