当前位置: 首页 > 科技观察

“ReverseProxyLayer”绝不能替代“DNSRoundRobin”!

时间:2023-03-13 20:15:17 科技观察

有朋友问我,DNS轮询是不是过时的技术?有了反向代理层(Nginx、LVS、F5等),是不是就不需要DNS轮询了?但是,反向代理层是绝对不能代替DNS轮询的!反向代理层有什么用?实施架构需要注意什么?(1)作为服务器的统一入口,屏蔽后端WEB集群的细节,代表整个WEB集群;画外音:这就是它被称为反向代理的原因。(2)为保证WEB集群的可扩展性,Nginx后端可以随时添加WEB实例;(3)实现负载均衡,反向代理层将请求平均分配给后端WEB集群的各个实例;(4)保证WEB集群的高可用,任何一个WEB实例挂掉,服务都不会受到影响;(5)注意其高可用,防止一台Nginx挂掉,影响服务器统一入口;反向代理层还存在哪些问题?代理层本身的可扩展性问题并没有得到很好的解决。比如当Nginx成为系统的瓶颈时,就无法扩展了。DNS轮询如何解决反向代理层的可扩展性问题?通过在DNS服务器上为一个域名设置多个IP解析,可以增加入口Nginx实例的数量,起到横向扩展的作用,解决反向代理层的问题。可扩展性问题。因此,反向代理和DNS轮询并不是相互排斥的技术,这里详细介绍一下接入层架构的渐进过程。裸奔时代(1)单机架构裸奔时代的架构图如上:浏览器通过DNS-server解析域名为ip;浏览器通过ip访问web-server;缺点:不高可用,web-server挂了整个系统就挂了可扩展性差。当吞吐量达到web-server的上限时,就不能扩容了。画外音:单机服务器不涉及负载均衡问题。简单扩展方案(二)DNS轮询假设tomcat的吞吐量是每秒1000次。当系统总吞吐量达到3000时,如何扩容是首先要解决的问题。DNS轮询是一种简单的解决方案。画外音:DNS轮询解决了可伸缩性问题。此时的架构图如上:多部署几台web-server,1台tomcat可以抗1000,部署3台tomcat可以抗3000;在DNS服务器级别,每次将域名解析为不同的ip;优点:零成本:只需在DNS-server上多配置几个IP,功能不收费;部署简单:只需多部署几台web-server,原有的系统架构不需要做任何改动;负载均衡:变成了多机,负载也均衡了;缺点:不高可用:DNS-server只负责域名解析ip,这个ip对应的服务是否可用,DNS-server无法保证,如果一个web-server挂了,部分服务会受到影响;扩容不实时:DNS解析有有效期;外网IP暴露过多;简单扩容方案(三)反向代理Nginxtomcat性能较差,但是Nginx作为反向代理的性能要强很多,假设在线运行到1w比tomcat高10倍,可以利用这个特性进行扩容。此时的架构图如上:在站点层和浏览器层之间增加了一个反向代理层,使用高性能的Nginx作为反向代理;Nginx将http请求分发到后端的多个Web服务器;优点:不需要移动DNS服务器;负载均衡:由Nginx保证;只暴露一个外网ip,Nginx->tomcat使用内网访问;实时扩展:Nginx内部可控,随时添加web-server实时扩展;可以保证站点层的可用性:如果有一个tomcat挂了,Nginx可以将流量迁移到其他tomcat上;画外音:反向代理,可以实时扩展,更方便。缺点:延迟增加+架构更复杂:中间加了一个反向代理层;反向代理层变成单点,不高可用:tomcat挂了不影响服务,Nginx挂了怎么办?高可用解决方案(四)keepalived为了解决高可用问题,keepalived出现了。将两台Nginx做成集群,分别部署keepalived,设置为同一个虚拟IP,保证Nginx的高可用;当一个Nginx宕机时,keepalived可以检测到它并自动将流量迁移到另一个Nginx。整个过程对调用者是透明的;优点:解决高可用问题;画外音:反向代理的高可用也解决了。缺点:资源利用率只有50%;Nginx仍然是单点访问。如果访问吞吐量超过Nginx的性能限制,比如qps达到50000怎么办?Scaleup扩展方案(5)lvs/f5Nginx是一个应用软件,性能比tomcat要好,但是总有一个上限,超过上限还是处理不了。lvs则不同,它是在操作系统层面实现的;f5的性能更好,它是在硬件层面实现的;它们的性能比Nginx好很多,比如可以抗每秒10w,所以可以用它们来扩容,常见的架构图如下:如果可以通过Nginx扩展多个tomcat,可以通过多个Nginx扩展lvs;通过keepalived+VIP方案可以保证可用性;99.9999%的公司到这一步基本就结束了,接入层解决了高可用、可扩展、负载均衡的问题。画外音:上游增加了另一层可扩展性。***那么,潜在的问题是什么?那么不管你用lvs还是f5,这些都是scaleup的解决方案。从根本上说,lvs/f5还是会有性能上限的,假设每秒可以处理10w个请求,一天只能处理80亿个请求(10w秒吞吐量*8w秒),如果系统每天的PV超过80亿怎么办?Scaleout扩展方案(六)DNS轮询上一篇文章中提到,水平扩展是解决性能问题的根本,通过增加机器来扩展性能的方案具有最好的扩展性。facebook、google、baidu的PV有超过80亿吗?他们的域名是不是只对应一个ip,终点也是起点,所以还是要通过DNS轮询来扩容。画外音:DNS轮询解决了可伸缩性问题。通过DNS轮询线性扩展ingresslvs层的性能;通过keepalived保证高可用;通过lvs扩展多个Nginx;使用Nginx为业务做负载均衡和七层路由;分层架构需要考虑的问题领域是:高可用性、可扩展性、反向代理、负载均衡;Nginx、keepalived、lvs、f5可以很好的解决高可用、扩展、反向代理、负载均衡等问题;level扩展scaleout是解决可扩展性问题的根本。DNS轮询不能被Nginx/lvs/f5完全替代;希望每个人都能有所收获。【本文为专栏作者《58神剑》原创稿件,转载请联系原作者】点此阅读更多该作者好文