1、最初 单体架构
如图所示,浏览器先通过DNS获取域名对应的外网IP地址,然后通过外网ip访问对应的web-server
![](https://img.kancloud.cn/1d/52/1d525e73652ecc3641f4974dd644a296_973x346.png)
缺点: 子系统受到单机性能影响,不能高可用,不能扩展
2、优化方案(在反向代理产品出现之前)
单体架构---》DNS轮询
dns轮询是一个非常容易想到的方案,可用通过dns轮询解决扩展性问题。配置多个A记录,在解析域名时,dns会轮询的返回不同的IP
![](https://img.kancloud.cn/c1/02/c1027a26bdb1f7aa68db56c178e1c044_1173x330.png)
缺点:
* 系统仍然是非高可用的,dns-server只负责域名解析ip,这个ip对应的服务是否可用,dns-server不可知(也就是说如果站点层的节点挂了)dns-server是不知晓的,部分流量会受到影响
* 扩容不是实时的,因为dns的解析有一个生效周期
* 暴露了太多的外网IP,安全性会受到影响
3、升级优化方案(有了反向代理)
DNS轮询---》反向代理
![](https://img.kancloud.cn/95/b9/95b9e41b3cd2eb3ad39b22926e911c00_1093x415.png)
好处:
* 只暴露一个外网IP,屏蔽内网服务的ip地址
* 高可用得到保证
* 扩容实时
缺点:
* 时延增加了,由于中间加了proxy
* 架构更复杂
* 反向代理成了单点
4、进一步升级架构
反向代理---》高可用反向代理
![](https://img.kancloud.cn/32/9c/329cc3feed40b15793260babfc941ec6_1186x472.png)
当代理的nginx服务挂掉后,keepalived会探测到,并将流量自动迁移到另外一台nginx服务上,由于使用同一个虚拟VIP,对调用方来说,是透明的
缺点: 资源利用率是50%,只有一台服务器提供服务,另外一台处于备用状态
问题: 如果整个站点的吞吐量超过nginx的提供的,那么该怎么办?
5、进一步升级架构
高可用反向代理---》多层高可用反向代理
![](https://img.kancloud.cn/6d/91/6d9174f1bee2ea525b0d2ffaaa45fc50_1176x480.png)
缺点: LVS和F5还是有性能上线
6、进一步架构升级
多层高可用反向代理----》DNS轮询
![](https://img.kancloud.cn/12/b0/12b0f1d53b3bed89814ab2c19ea9e322_1202x542.png)
水平扩展,DNS轮询解决扩展性问题,扩展入口性能
DNS轮询: 解决性能扩展问题
VIP+Keepalived: 解决高可用问题