Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

背景

对于大的电商系统,在618和双十一这种大促的情况下,系统的请求量会非常大,如何保证在高并发请求的时候系统还能够坚守住

负载均衡

含义:它是一种分配网络流量、请求任务、计算任务到多个服务器或者资源上,它解决了单一服务器过载的问题,减少了系统整体的响应时延,增加了系统的稳定性和性能。

负载均衡的必要性

  1. 高可用

    单一服务器能够承载的请求是有限的,超出请求能力可能会导致服务器宕机,在整个系统架构中,单个服务器宕机也可能会对整个系统产生影响(这取决于系统架构设计的合理性)

  2. 高性能

    将请求分散到多台服务器,避免单台服务器过载,保证各个服务器的资源得到充分利用,提高了系统的整体响应速度和处理能力。

  3. 易于维护和升级

    可以动态管理服务器池,利于需要进行服务器维护或增加,不会影响系统整体的稳定性。

负载均衡的实现方法

  1. 硬件负载均衡

    使用专用的硬件设备来分配流量,它是独立于系统的硬件,例如F5网络设备,这种设备贵!

  2. 软件负载均衡

    使用软件应用程序来实现负载均衡,例如 Nginx 支持反向代理和负载均衡。软件负载均衡只要部署在正常的服务器上就可以。

    ​ ① 传输层进行负载均衡:基于 【ip :端口】的方式进行分发。

    典型的就是NET协议

    ​ ② 应用层负载均衡:根据应用层的HTTP请求进行决定流量分配

    根据虚拟的url,主机名接收请求,然后再将请求转向相应的处理服务器。典型的有HTTP重定向服务器

  3. DNS负载均衡

    一个域名对应多个IP地址,将请求分发给不同的服务器,可以实现在地域上的流量均衡。

    DNS负载均衡的优点:DNS的实现也比较简单,只要更改DNS上域名到IP地址的配置即可。

    DNS负载均衡的缺点:DNS存在多级缓存,当修改配置后由于缓存的原因会导致配置延迟生效

    DNS负载均衡.drawio

  4. CDN内容分发网络

    CDN是一种分布式的网络结构,将内容分发到离用户最近的结点上,减少延迟,提高用户的体验。但是适合静态不适合动态

负载均衡算法

  1. 轮询

    最简单最常用的负载均衡算法,按照顺序依次将请求分给服务器

    适用情况:服务器集群中的所有服务器配置差不多,性能差不多,且从任何一个服务器发送请求都能收到反馈数据,

    轮询负载均衡.drawio
  2. 加权轮询

    由于服务器的性能、硬件配置存在差异,为每个服务器分配不同的权重,权重越高的服务器处理的请求越多【能者多劳】

    注意: 轮询和加权轮询算法都是建立在每个付服务器节点存储的数据都是相同的前提下的,请求访问任何一个结点都能得到结果,它不适合分布式系统

  3. 最少连接数

    将请求分配给当前连接数最少的服务器

  4. IP哈希

    将同一个IP固定到同一结点,IP哈希主要是避免用户只要请求就要重新验证登录,不一定能实现公平的负载均衡

  5. 一致性哈希

    将服务器节点映射到哈希环上

    一致性哈希解决了分布式系统的负载均衡问题

评论