🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
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: 解决高可用问题