局域网出于带宽的需要,经常会采用多外线接入的方式,一则可以带宽叠加,提示带宽域名备案域名备案dns负载均衡;再则还可以互为备份,一旦一条线路中断,另外一条线路可以继续使用,保障网络的正常运行。dns负载均衡,同运营商多条外线如何做负载均衡介绍如何用WFilter NGF(WSG)来实现同ISP多外线的负载均衡和线路检测。1. 配置负载均衡同运营商没有线路DNS的问题,可以直接进行负载均衡,在“多线均衡”模块里面,创建负载均衡的线路方案即可然后再对内网的客户机选择相应的线路方案:2. 开启线路检测线路检测可以检测每个WAN口的线路畅通情况,一旦检测到线路不通,就会把该WAN口从负载均衡中移除,从而保证网络的畅通运行。本质上集群部署并没有提高性能,性能看起来提高只是附加属性。集群的主要目的有两个:避免单点问题扩容单点问题假设没有集群部署,那么就是说只有一台Server对外提供服务,如果这个Server挂掉了,那么所有的客户端就没办法访问了。如果进行了集群部署,假设两台,通过IPhash的方式进行负载均衡,那么当其中一台Server挂掉了,那么只有大概一半的客户端受到影响(如果所有客户端都恰巧hash到了挂掉的那个Server,那就没办法了)。如果路由有故障转移机制,那么基本可以保证一台Server挂掉了,客户端没有影响。扩容再说扩容,一台Server能对外提供的最大负载是一定的。当客户端数量超过了Server的最大负载时,那么就可能导致Server挂掉,或者客户端响应缓慢甚至没有响应的问题。通过集群部署,可以增加最大客户端数量。假设一台Server能同时支持1000个客户端访问,那两台Server理论就能支持2000个客户端同时访问。性能上面说了,集群部署并没有提高性能。集群只是多开通了通道。举个例子,假如有个水池,原来一个水管向水池里注水,集群部署后就是多个水管向水池里注水。单个水管的速度并没有变化,但是流量变大了。看起来性能提高的原因是,性能一般是通过TPS/QPS来定义的,也就是一秒内完成的请求数量。集群后,因为流量大了,那么TPS肯定就高了。但是,TPS/QPS计算的是系统的最大可运行负载。就是一个系统在这个负载下可以正常的长时间对外服务,超过了这个负载就可能导致响应变慢或没有响应、甚至导致服务器直接挂掉。而一般情况下都会做冗余,所以系统基本不会长时间运行在最大可运行负载下。所以一般情况下集群对性能的影响有限,极端情况还可能降低性能。假设一台Server能支持1000个客户端,你部署了两台Server,而实际只有10个客户端进行访问,远达不到单台Server的负载,加上集群需要路由算法,可能性能上就比单台Server稍微慢了一点点。个人简单谈一下百万QPS下的12306如何架构,算是抛砖引玉,下图是我画的一张网络拓扑图:我们知道当国庆节、春节来临的时候,12306会在每天的早上8点、12点、16点等各个时间点放票,这时候在极短的时间内涌入大量的流量请求,可是说是中国互联网甚至世界互联网上最大的高并发请求量了。网络要承受的住那首先要保证的就是网络不能挂,大家都先不用考虑服务端具体业务怎么实现的,应该首先要考虑的是多大的网络带宽能够承受住这么大的请求量?我们常用的方式就是一个域名解析到一个ip地址,这个ip有可能是SLB,或者我们自己装的nginx,然后通过slb再将请求均衡分发到我们的服务器上,这是最简单常见的负载均衡策略。但是这样的单台机器负载均衡是不可能承受的住12306千百万级高并发的。所以必须在域名解析处做好DNS负载均衡,再搭建好SLB集群和Nginx集群,且是多个集群,不同的集群去处理不同的业务。大家可以看到图中网络层,第一步也是最重要的一步就是要把所有的流量均摊出来,避免单机器甚至单集群无法承受住网络流量的瞬时轰炸导致网站瘫痪。车票查询车票查询是最核心的业务,也是请求量最大的业务,不仅仅自家网站的大量请求查询,还有一个第三方开发的抢票软件也在不断地请求12306的车票查询业务。下面有别的答主回答说需要用缓存,这是必然的,但也在抱怨明明有票但是就是显示没票,或者显示有票下单时候就提示没票了。这不是说12306的缓存一致性有问题,或者说这块只保证高并发了,对一致性就肯定做不到强一致性了。分布式系统中的CAP理论大家应该都知道,CAP理论只能同时满足CP和AP或者CA,其中分区容忍性不可抛弃,那就剩CP和AP了。所以无法做到高并发高可用的同时还得做到强一致性。另外12306也不是一次就放票出来的,需要保证车站有票、各个小站点保留一部分票,再分时间段逐次发放,既然做不到所有人都可以买到自己最想买到的那一张票,那就保证整体大部分用户买票体验嘛。核心就是分流大家都知道国家在治理洪水的时候,会在河流的各个地方设立大坝,逐级控制水流量,而不会把所有的水都蓄在一个地方,水位低的时候,一个大坝就搞定了,水位高的时候,各级大坝都储蓄一部分水,控制整体的洪流,这样就很少发生严重的大范围的洪灾了。网络也是如此,将整体的网络流量请求逐级分发、均衡到各层,能在这层处理的就不要在传递到下一层,尽量保证整体的服务高可用,即使损失一些强一致性,只要保证最终的一致性就好了。这里我没有讲各个点的技术细节,只说了个人理解的一个整体思想,按照这个思路去做整体的架构,每一个环节做到编码质量最优、高可用、高并发,再整体串起来,即可承载百万QPS的访问。以上就是个人的一些拙见,当然实际上的12306远比我说的这些要复杂的多。这里就当抛砖引玉了,欢迎各位大佬批评指正,讨论学习,共同成长!我是【Java架构设计】,关注我,持续为您提供优质内容!
本文出自快速备案,转载时请注明出处及相应链接。