1 单机遗留问题

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

垂直拆分,解除了子系统耦合,但是对于同一个垂直站点子系统,仍然是一个“单体架构”
【成为架构师2-3】反向代理:接入层扩容,负载均衡
集群的实现,通常需要引入反向代理

2 反向代理,接入层扩容

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

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

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

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

反向代理带来了什么新问题
  1. 多个web节点,负载如何分配(负载均衡问题)
  2. 反向代理层,如何保证高可用(反向代理高可用问题)

3 反向代理,负载均衡

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

这来自于七层结构模型
【成为架构师2-3】反向代理:接入层扩容,负载均衡
第四层传输层:使用ip作为负载均衡的抓手

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

4 反向代理,高可用

虚拟IP + keepalived方案:
【成为架构师2-3】反向代理:接入层扩容,负载均衡
公网IP虚拟化,nginx集群对外暴露的公网ip是一个虚拟ip,dns解析得到的是此虚拟ip

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

【成为架构师2-3】反向代理:接入层扩容,负载均衡
但是这种stand by的方式会引入新的问题:利用率的问题,图中利用率只有50%,这将在后续进行讨论。

5 两个遗留问题

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

上一篇回顾:【成为架构师2-2】伪分布式与垂直拆分:快速解决单机性能问题的实践方案
下一篇更精彩:持续更新中…

相关文章:

  • 2021-09-09
  • 2021-05-14
  • 2022-12-23
  • 2021-08-06
  • 2021-05-02
  • 2021-11-07
  • 2021-06-04
  • 2021-12-05
猜你喜欢
  • 2021-08-18
  • 2021-12-18
  • 2021-05-06
  • 2021-10-13
  • 2021-12-21
  • 2021-11-11
相关资源
相似解决方案