集群

负载均衡

  • 高可用:当某个节点故障时,负载均衡器会将用户请求转发到另外的节点上,从而保证所有服务持续可用
  • 伸缩性:根据系统整体负载情况,可以很容易地添加或移除节点

算法

  • 轮询(Round Robin)

每个请求轮流发送到每个服务器上 该算法笔记适合每个服务器性能差不多的场景

  • 加权轮询(Weighted Round Robbin)

在轮询的基础上,根据服务器的性能差异,为服务器赋予一定的权值,性能高的服务器分配更高的权值 权值更高的服务器接收更多的请求

  • 最少连接(Least Connections)

将请求发送给当前最少连接数的服务器上

  • 加权最少连接(Weighted Least Connection)

根据服务器的性能为每台服务器分配权重,再根据权重计算出每台服务器能处理的连接数

  • 随机算法(Random)

把请求随机发送到服务器上

  • 源地址哈希法 (IP Hash)

通过对客户端 IP 计算哈希值之后,再对服务器数量取模得到目标服务器的序号 这样就可以保证同一ip的客户的请求都会转发到同一台服务器,这个算法可以解决分布式session问题

转发实现

  • HTTP重定向

负载均衡服务器使用某种负载均衡算法计算得到服务器的 IP 地址之后,将该地址写入 HTTP 重定向报文中,状态码为 302。客户端收到重定向报文之后,需要重新向服务器发起请求

这样客户端需要两次请求,性能会收到一定影响

2020317145131

  • DNS域名解析

DNS 解析域名的同时使用负载均衡算法计算服务器 IP 地址

优点是可以返回离用户地理位置更近的服务器 缺点是DNS具有多级结构,DNS解析结果可能被各级缓存,修改DNS记录后,需要比较长的时间才能生效

大型网站基本使用了 DNS 做为第一级负载均衡手段,然后在内部使用其它方式做第二级负载均衡

2020317145357

  • 反向代理服务器

位于源服务器前面,用户的请求需要先经过反向代理服务器才能到达源服务器

反向代理服务器可能会成为性能瓶颈

  • 网络层

nginx之类的代理服务器是工作在应用层上的,网络层上的反向代理可以直接修改数据包目的IP地址,进行转发,但在服务器的响应还是需要经过负载均衡器

  • 链路层

在链路层根据负载均衡算法计算源服务器的 MAC 地址,并修改请求数据包的目的 MAC 地址,并进行转发

通过配置源服务器的虚拟 IP 地址和负载均衡服务器的 IP 地址一致,源服务器的响应可以直接发送给客户端,不用经过负载均衡器

session管理

Sticky Session

配置负载均衡器,使得一个用户的所有请求都路由到同一个服务器,这样就可以把用户的 Session 存放在该服务器中 当该节点宕机后,该节点的所有会话数据都将丢失

202031715046

Session Replication

在服务器之间进行 Session 同步操作,每个服务器都有所有用户的 Session 信息

内存占用过多,且同步过程会影响性能

202031715143

Session Server

使用一个单独的服务器存储 Session 数据,如可以使用mysql或者redis来实现

这可以使应用服务器保持无状态,但缺点是需要对session存取代码进行改造

202031715310

results matching " "

No results matching " "

results matching " "

No results matching " "