根据时间来看看,HTTP服务的高可用和负载均衡是如何发展的

1. 早期DNS轮训方案

早期互联网应用HTTP服务器直接暴露在互联网上, 非常简陋

  • 例如一个服务器放一个jboss, 一个服务器一个IP, 这些IP都是公网IP
  • 在DNS服务器上配置域名解析,来进行负载均衡

    架构图

点击查看【processon】

优点

  1. 服务架构极其简单
  2. 扩容也非常容易

    缺点

  3. 无法做到高可用, 任何一台服务器宕机都会影响一部分用户

  4. 服务器扩缩容具有延迟性,DNS配置更新有延迟,还需要传播, 延迟更大
  5. 占用大量的公网IP

2. 高可用反向代理

后来随着技术的发展出现了nginx, keepalived, VIP等技术, HTTP服务才变得真正的高可用起来

架构图

点击查看【processon】
要理解keepalived的作用需要了解一下ARP协议

https://www.zhihu.com/question/34822368/answer/156932231

优点

  1. 真正的高可用任意nginx,任意server 出现问题,可以随时调整流量
  2. 随意扩缩容, 对外部透明

缺点

  1. nginx服务器只会有一个在工作, 另外一个nginx总是在standby状态,浪费了硬件资源
  2. 单个nginx服务器的连接数也是有上限的, 只能承载1w-5w左右的连接数

3. 多层高可用反向代理

为了解决上面nginx的并发不足问题
有一种头疼医头脚疼医脚的办法, 把对外的VIP设备从nginx换成lvs或者F5

架构图

点击查看【processon】

优点

  1. 并发数量可以达到10w级别

缺点

  1. 其实还没有解决自由扩容的问题, 超过10w的并发还是无法处理

4. DNS轮询+多层高可用反向代理

架构图

点击查看【processon】

  • DNS会使用轮询或者随机或者就近访问之类的规则, 将其中某个VIP返回给客户端, 这样理论上就可以支持无限的连接数, 顶级互联网公司就是使用这种架构

  • 但如果VIP要停用的话, 要提前向DNS提交配置

  • lvs+keepalived解决的是VIP的高可用问题

    优点

  1. 在接入层上增加了DNS轮训技术, 理论上可以支持无限的横向扩展

缺点

  1. DNS解析VIP的修改有延迟
  2. 成本高, 而且有一半的LVS是待命状态

5. DNS轮询+多层高可用反向代理+LVS双网卡

架构图

点击查看【processon】

  • 每台LVS(或者F5)配置了双网
  • 配置两个VIP, 分别将流量分给两个LVS
  • 当某个LVS宕机, 另外一台LVS即可将所有流量承接过去
  • 这样既做到了接入层的高可用, 又不至于浪费一个LVS空转

优点

  1. 完全的高可用

缺点

  1. 成本大
  2. DNS更新配置延迟较大

以上讨论了HTTP服务的高可用技术发展
从单体架构, 到高可用高并发无限扩容的架构 不是一蹴而就的
架构的选择需要通过网站的一步一步发展才走到现在的样子
今后肯定还会有更复杂更强大的架构设计, 以上只是我在有限的职业生涯中的经验总结