查看原文
其他

面试官:你背一下负载均衡算法?

小林coding 2024-01-01

The following article is from ByteByteGo Author 李华

图解学习网站:xiaolincoding.com

大家好,我是小林

很多同学简历的项目都有用到 nginx,今天我们来聊聊 nginx 常见的两个面试题:

  • 反向代理是什么?
  • 负载均衡有哪些算法?

正向代理和反向代理

图片

01 正向代理(Forward Proxy)

正向代理是位于用户设备和互联网之间的服务器。它代理的是客户端,是站在用户一方的。其真实客户端对于服务器不可见

正向代理通常用于:

  • 保护客户端,隐藏客户端真实 IP,免受攻击。
  • 避免网络浏览限制(科学上网)。
  • 阻止访问某些内容。
  • 提高访问速度。通常代理服务器会有较大的硬盘缓冲区,将一些响应结果缓存在服务器端,以便后续用户取用。

02 反向代理(Reverse Proxy)

反向代理是一种服务器,它接受客户端的请求,将请求转发给网络服务器,然后将结果返回给客户端,就像代理服务器处理了请求一样。

反向代理代理的是服务器,是和网络服务器站在一方的。其真实服务器对于客户端不可见。这就是它叫“反向”的原因。

反向代理可用于:

  • 保护服务器,隐藏服务器真实 IP。
  • 负载均衡,根据访问流量和服务器负载情况,将请求分发到不同服务器上。
  • 缓存静态内容以及部分短时间的大量动态请求。
  • 作为应用层防火墙提供防护。
  • 加密/解密 SSL 通信。

负载均衡算法

负载均衡将网络流量或一组任务以某种算法合理分配给各个处理节点,使得节点得到平等的使用,并及时可靠地返回结果给用户。

负载均衡广泛应用于各种硬件软件系统中,比如:

  1. 根据 IP 地址进行网络流量负载均衡。在服务进行维护时,可以方便将网络流量切换到临时节点或降级的服务上。
  2. 根据 HTTP 头信息或请求字段进行应用程序负载均衡,用户得到响应的时间更短,并且可以提供分层服务,也方便服务扩容时加入新的节点。
  3. CDN 根据流量的来源,将流量导入相邻地区的服务器,以获得更短的响应时间和更高的可用性。

下图显示了 6 种常见算法。

图片

01 静态算法

  • 循环(Round Robin)

客户端请求按顺序发送到不同的服务实例。通常要求服务是无状态的。这种算法最简单,但是也无法处理某个节点变慢或者客户端操作有连续性的情况。

  • 粘性循环(Sticky Round Robin)

这是对循环算法的一种改进。如果 Alice 的第一个请求发送到服务 A,那么接下来的请求也会发送到服务 A。这种负载均衡可以确保一个用户的请求都发往同一个服务节点,适合客户端操作有连续性的情况。有时候该服务节点上会保存该用户的一些状态,避免去后端数据库查询。

  • 加权循环(Weighted Round Robin)

管理员可以指定每个服务的权重。权重高的服务会比其他服务处理更多请求。

  • 散列(IP/URL Hash)

该算法对传入请求的 IP 或 URL 应用哈希函数。根据哈希函数的结果将请求路由到相关服务。

02 动态算法

  • 最少连接(Least Connections)

新请求会发送到并发连接最少的服务节点。

  • 响应时间最少(Least Time)

新请求会发送到响应时间最快的服务节点。这样,某个服务节点变慢就不会阻塞后续请求处理了。

历史好文:

后端突击训练营,又开始卷了!

终于拿到阿里的小奖状!

秋招结束,上岸美团!

去腾讯面试了,我自信满满!

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存