Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

负载均衡

  • 全称 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机器上,保证资源合理分配