网关

负载均衡

gateway_architecture.png

  1. 第一层,DNS轮询,扩展多个lvs节点,实现负载均衡
  2. 第二层lvs层, 做四层负载均衡,通过 keepalived 实现高可用
  3. 第三层,NGINX,做7层负载均衡(也支持4层)
  4. 第四层,应用服务器

负载均衡算法

  1. 随机

优点: 简单,无状态 缺点: 无法根据请求内容做负载均衡,比如cookie, 请求头等,性能的机器

  • 加权随机

  • 轮询(Round Robin)\ 优点

  • 简单易实现:轮询算法不需要复杂的计算和存储,因此可以快速实现。
  • 均衡负载:它将请求均匀地分配给各个服务器,避免某些服务器负载过高而导致性能下降。
  • 具有预测性:轮询算法的请求分配是有规律的,因此可以预测下一次请求分配到哪台服务器上。

缺点

  • 无法应对不同服务器性能差异:轮询算法无法考虑服务器的实际负载情况和性能差异,可能导致某些服务器负载过高或过低。
  • 不能适应动态变化的负载:例如服务器故障或网络异常,轮询算法无法适应这些情况。
  • 长连接可能导致负载不均衡:如果客户端使用长连接方式访问服务器,轮询算法可能会导致某些服务器的连接数过高,从而影响负载均衡。

变种

  • 完全轮询(Complete Round Robin)
  • 权重轮询(Weight Round Robin)
  • 平滑加权轮询(Smooth Weight Round Robin)

  • 一致性hash hash_cycle.png

    1. 将请求的key通过hash算法计算出一个hash值
    2. 找到这个hash值在hash环上的位置
    3. 顺时针找到第一个节点,就是这个请求应该路由到的节点

如果多台服务器所“控制”的区域很小,或者有时候其中一台服务器宕机了,那么这个区域的请求就会被分配到另一台服务器上,就可能导致hash倾斜。 像这种情况可以加入虚拟节点,将每个真实节点映射到多个虚拟节点,这样就可以解决hash倾斜的问题。

优点: 同一个key,固定映射到同一个节点,适合缓存场景

  • 源地址哈希(Source Hash)
  • 目标地址哈希(Destination Hash)

  • 最小连接数(Least Connections)

参考

  1. 什么是虚拟路由器冗余协议(VRRP)
  2. lvs为何不能完全替代DNS轮询
  3. 单点系统架构的可用性与性能优化
  4. Google 是如何做负载均衡的
  5. Maglev: A Fast and Reliable Software Network Load Balancer
  6. 负载均衡算法

results matching ""

    No results matching ""