1、最初 单体架构
如图所示,浏览器先通过DNS获取域名对应的外网IP地址,然后通过外网ip访问对应的web-server

缺点: 子系统受到单机性能影响,不能高可用,不能扩展
2、优化方案(在反向代理产品出现之前)
单体架构---》DNS轮询
dns轮询是一个非常容易想到的方案,可用通过dns轮询解决扩展性问题。配置多个A记录,在解析域名时,dns会轮询的返回不同的IP

缺点:
* 系统仍然是非高可用的,dns-server只负责域名解析ip,这个ip对应的服务是否可用,dns-server不可知(也就是说如果站点层的节点挂了)dns-server是不知晓的,部分流量会受到影响
* 扩容不是实时的,因为dns的解析有一个生效周期
* 暴露了太多的外网IP,安全性会受到影响
3、升级优化方案(有了反向代理)
DNS轮询---》反向代理

好处:
* 只暴露一个外网IP,屏蔽内网服务的ip地址
* 高可用得到保证
* 扩容实时
缺点:
* 时延增加了,由于中间加了proxy
* 架构更复杂
* 反向代理成了单点
4、进一步升级架构
反向代理---》高可用反向代理

当代理的nginx服务挂掉后,keepalived会探测到,并将流量自动迁移到另外一台nginx服务上,由于使用同一个虚拟VIP,对调用方来说,是透明的
缺点: 资源利用率是50%,只有一台服务器提供服务,另外一台处于备用状态
问题: 如果整个站点的吞吐量超过nginx的提供的,那么该怎么办?
5、进一步升级架构
高可用反向代理---》多层高可用反向代理

缺点: LVS和F5还是有性能上线
6、进一步架构升级
多层高可用反向代理----》DNS轮询

水平扩展,DNS轮询解决扩展性问题,扩展入口性能
DNS轮询: 解决性能扩展问题
VIP+Keepalived: 解决高可用问题