【成为架构师2-3】反向代理:接入层扩容,负载均衡

本文是博主对《架构师训练营》的笔记,探讨了单机遗留问题,通过反向代理实现接入层扩容。重点介绍了反向代理软件如nginx和apache,以及负载均衡的策略,包括随机、轮询、静态权重和一致性哈希。同时提出了负载均衡维护session一致性和反向代理高可用性的解决方案,并提到了两个遗留问题:异构服务器的负载均衡和keepalived的利用率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章是博主对沈剑的《架构师训练营》分享内容的个人笔记总结,原内容公众号“成为架构师”。

1 单机遗留问题

上一篇讨论了伪分布式与垂直拆分的问题

垂直拆分,解除了子系统耦合,但是对于同一个垂直站点子系统,仍然是一个“单体架构”
在这里插入图片描述
集群的实现,通常需要引入反向代理

2 反向代理,接入层扩容
用什么做反向代理
  1. 软件层面:nginx / apache
  2. 操作系统层面:LVS
  3. 硬件:F5

在这里我们只谈软件层面的,OS与硬件层面感兴趣的话可以百度或者Google,至于何为反向代理这里也不赘述了

反向代理解决了什么问题
  1. 子web系统性能,不再受到单台机器资源限制,可以扩展
  2. 子web系统,实现了高可用,伪集群变为真集群

在这里插入图片描述

反向代理带来了什么新问题
  1. 多个web节点,负载如何分配(负载均衡问题)
  2. 反向代理层,如何保证高可用(反向代理高可用问题)
3 反向代理,负载均衡
负载均衡方法:
  1. 随机,将请求random到web-server
  2. 轮询,按照web-server 1-n的顺序依次的分发请求
  3. 静态权重轮询,不同web-server之间的处理能力不同,性能好的权重大,会被转发更多的请求
  4. 动态权重轮询(后续讨论),权重分配是动态的,而不是一个固定值
  5. 一致性哈希(后续讨论),ip哈希之后落在hash环上,按照顺时针方向找到对应的真实服务器ip或者虚拟节点
负载均衡抓手(如何维护session状态一致性):
  1. 四层(转发/交换)
  2. 七层(转发/交换)

这来自于七层结构模型
在这里插入图片描述
第四层传输层:使用ip作为负载均衡的抓手

第七层应用层(在TCP/IP模型中为第五层):使用http请求中携带的参数作为负载均衡的抓手

4 反向代理,高可用

虚拟IP + keepalived方案:
在这里插入图片描述
公网IP虚拟化,nginx集群对外暴露的公网ip是一个虚拟ip,dns解析得到的是此虚拟ip

通过keepalived保证nginx的可用性,当其中一个nginx挂了,虚拟ip得到的请求会转到另一个可用的nginx上

在这里插入图片描述
但是这种stand by的方式会引入新的问题:利用率的问题,图中利用率只有50%,这将在后续进行讨论。

5 两个遗留问题
  1. 异构服务器的负载均衡,即前面的动态权重问题
  2. keepalived方案造成的其中一个nginx stand by利用率低下的问题

下一篇将介绍接入层的架构演进,如果nginx达到了流量上限应该怎么办?

上一篇回顾:【成为架构师2-2】伪分布式与垂直拆分:快速解决单机性能问题的实践方案
下一篇更精彩:【成为架构师2-4】反向代理与DNS轮询:接入层的架构演进

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值