2019年的第一天,写点啥呢?其实满脑子的idea,那就花一年时间慢慢写吧,第一篇就先阐述下自己对接入层架构演变的一些个人思考吧。
一、演进过程的思考
1、单体架构
过程:
1)浏览器的请求通过 DNS Server 解析到指定的 IP 地址
2)浏览器通过 IP 地址访问 Web Server
缺点:
1)当到达 Web Server 的性能瓶颈时,无法扩容
2)当 Web Server 宕机后整个系统就挂了
2、DNS 轮询
说明:
为了解决 Web Server 的性能瓶颈问题,于是进行了横向扩展,于是最简单的 DNS 轮询便派上了用场。
过程:
1)浏览器的每次请求通过 DNS Server 会解析到不同的 IP 地址
2)浏览器通过不同的 IP 地址访问不同的 Web Server
优点:
1)简单并且零成本,只需要增加 DNS Server 的 IP 解析地址即可
2)解决了 Web Server 性能瓶颈的问题
缺点:
1)暴露了太多的外网 IP
2)DNS 的解析需要一定的生效时间
3)如果有一台 Web Server 宕了,但是此时的 DNS Server 并不知道,所以会对部分功能模块产生影响
3、反向代理
说明:
中间加了一层反向代理层,以 Nginx 为例,对整个系统性能的提升是很明显的。
过程:
1) 浏览器的请求通过 DNS Server 解析到指定的 IP 地址
2)该 IP 地址对应的是反向代理层,此时将请求转发到身后的 Web Server 集群中
优点:
1)只需要暴露一个外网 IP 地址即可
2)如果有一台 Web Server 宕了,此时 Nginx 就不会将请求转发给这台服务器
3)Web Server 扩展变得更加简单
缺点:
1)Nginx 变成了单点,如果出故障,则整个服务变得不可用
2)因为多了一个请求转发的过程,请求时间略微增大
4、keepalive
说明:
对反向代理层进行改造,新部署一台 Nginx 服务,并使用 keepalive 技术提供相同的虚拟 IP (VIP),此时保障了 Nginx 的高可用。
优点:
1)增加了 Nginx 的高可用性
缺点:
1)其实 Nginx 此时还是单点使用,资源占用率只有 50%,存在资源浪费的现象
5、Lvs/F5
说明:
这种方法其实并不是解决 Nginx 的单点问题的,而是解决 Nginx 的性能问题的,因为 Nginx 只是软件层面的反向代理,而使用 Lvs 技术,或者 F5,它是实施在硬件层面的,性能相较于软件层面的 Nginx,抗压能力又上了一个新的台阶。并且几乎已经满足了所有公司的需求。
缺点:
1)成本变高,F5 需要进行购买
2)比如百度、Google 等日PV超级大的系统,瓶颈还是会出现在反向代理层
6、 Lvs/F5 + DNS 轮询
说明:
其实不管是 Nginx 也好,F5 也好,最终都是有性能瓶颈的,最好的解决办法仍然是水平扩展,一台不行我上两台不就好了,两台不行我就上三台,所以最终的方案还是使用 DNS 轮询来解决。
二、总结
1、谈一谈反向代理层:方向代理层是服务端的统一入口,屏蔽了服务端的所有细节,性能很重要
2、关于负载均衡:负载均衡的算法多种多样,比如 IP 哈希、轮询、增加权重等
3、所有所有的一切,都围绕着很重要的一个点:高可用
4、很多时候问题的解决,还是需要使用到最最基本的技术,所有的轮子都是建立在基础之上的
5、技术永远没有最好,只有更高,更新迭代的速度是很快的,所以我们都需要永远保持一颗对新技术的探索的好奇心