1. 早期DNS轮训方案
早期互联网应用HTTP服务器直接暴露在互联网上, 非常简陋
优点
2. 高可用反向代理
后来随着技术的发展出现了nginx, keepalived, VIP等技术, HTTP服务才变得真正的高可用起来
架构图
点击查看【processon】
要理解keepalived的作用需要了解一下ARP协议
优点
- 真正的高可用任意nginx,任意server 出现问题,可以随时调整流量
- 随意扩缩容, 对外部透明
缺点
- nginx服务器只会有一个在工作, 另外一个nginx总是在standby状态,浪费了硬件资源
- 单个nginx服务器的连接数也是有上限的, 只能承载1w-5w左右的连接数
3. 多层高可用反向代理
为了解决上面nginx的并发不足问题
有一种头疼医头脚疼医脚的办法, 把对外的VIP设备从nginx换成lvs或者F5
架构图
优点
- 并发数量可以达到10w级别
缺点
- 其实还没有解决自由扩容的问题, 超过10w的并发还是无法处理
4. DNS轮询+多层高可用反向代理
架构图
DNS会使用轮询或者随机或者就近访问之类的规则, 将其中某个VIP返回给客户端, 这样理论上就可以支持无限的连接数, 顶级互联网公司就是使用这种架构
但如果VIP要停用的话, 要提前向DNS提交配置
-
优点
- 在接入层上增加了DNS轮训技术, 理论上可以支持无限的横向扩展
缺点
- DNS解析VIP的修改有延迟
- 成本高, 而且有一半的LVS是待命状态
5. DNS轮询+多层高可用反向代理+LVS双网卡
架构图
- 每台LVS(或者F5)配置了双网
- 配置两个VIP, 分别将流量分给两个LVS
- 当某个LVS宕机, 另外一台LVS即可将所有流量承接过去
- 这样既做到了接入层的高可用, 又不至于浪费一个LVS空转
优点
- 完全的高可用
缺点
- 成本大
- DNS更新配置延迟较大
以上讨论了HTTP服务的高可用技术发展
从单体架构, 到高可用高并发无限扩容的架构 不是一蹴而就的
架构的选择需要通过网站的一步一步发展才走到现在的样子
今后肯定还会有更复杂更强大的架构设计, 以上只是我在有限的职业生涯中的经验总结