浅谈百万级并发网络的设计

  • A+
所属分类:安全闲碎

加群交流在后台回复“加群”,添加小编微信,小编拉你进去


后台回复“724”获取入门资料


网络上动不动讲百万并发架构的文章很多,多是软件架构层面,但是在网络层面,该如何设计和部署呢?要是让你设计一个百万级并发的网络,有没有头绪?上F5能解决么?就像剧院有100W个座位,但是出入口还不是只有那么几个,怎么让这100W人坐满不用排队?罗马不是一天建成的,本文抽丝剥茧,循序渐进,简单介绍并发量从一到百万的网络设计思路和落地。

在文章的开头照例提出两个问题,请只使用三层设备,交换机或者路由器设计一个网络,实现以下需求?有没有觉得题目很怪呢?这是什么问题?有这种需求吗?

浅谈百万级并发网络的设计

正式开始,以一家公司发展阶段为例,层层递进百万级并发网络的演化。

阶段一,公司发展初期,一台性能非常非常非常强劲的nginx最多可以支持5万多并发。(等等,一台5万并发,是不是20台nginx就能实现百万级别并发?从运营商接20条线到20台nginx?然并卵,如果你的网页上面不超过10个字符串,并且都是get请求,单台nginx5万并发是可能达到的,但是稍微多点文字图片,并发量直线下滑)

浅谈百万级并发网络的设计

阶段二随着规模扩大,某天nginx宕机,公司决定改造为高可用网络,购置了路由器,扩充nginx为两台,组成了核心交换机,采用了捆绑链路。同时新申请了一个域名,一切看着完美无缺,是吧。此时并发量可以达到10万了。

浅谈百万级并发网络的设计

阶段三,随着业务翻翻,10w并发已经不能满足业务了,按照原有架构扩张,网络成了下面这样,域名,设备全部翻倍。此时公司并发来到了20W。

浅谈百万级并发网络的设计

阶段四,经过一段时间的运营,公司准备整合业务,缩减域名,但是nginx并不支持20W高并发,于是买来了昂贵的F5。

浅谈百万级并发网络的设计

阶段五,某日,左边集群某台核心交换机发生故障,虽然厂家信誓旦旦打包票堆叠是高可用技术,但恢复的时候还是造成了左边集群整个中断,不可提供服务。在某个深夜,利用停服的机会,进行了网络割接,去掉了设备的堆叠,也取消了捆绑链路。但是stp协议只能保证单线利用,在原有网络结构下,不得不采用vrrp替代,为了保证接入层的带宽,不得不扩容了一倍多接入层设备拆除了堆叠,nginx区的网络也要修改,变成了下面复杂结构(是不是很喜感,明明堆叠是一个高可用的技术,最后采购成本还增加了,网络更复杂了)

浅谈百万级并发网络的设计

阶段六,再次优化网络,把nginx下沉到接入区,nginx中断不会造成网络平静瓶颈,同时减少故障点。

浅谈百万级并发网络的设计

阶段七,公司业务越来越频繁,但路由器是通过nat技术把f5的端口暴露到工网,突增并发量也时不时导致路由器不稳定,nat会话会消耗内存成为瓶颈,更高级的路由器极其昂贵。于是决定拿掉路由器,换成交换机,将域名的ip直接配置到f5,同时增加f5数量和内部服务器规模。此时并发可以支持到40万了。

浅谈百万级并发网络的设计

阶段八,系统运行一段时间后,依然不理想。虽然业务增加了,看似支持并发40W,但是公司接了两条相同运营商线路。有时候电信1线路并发8W连接,电信2只有2W,两台F5实际并发也就7W,公司决定进行外网优化,域名同时引入dns轮询 ,将域名解析到多个f5ip,域名层面的负载均衡

浅谈百万级并发网络的设计

阶段九,公司业务越来越大,在全国各地建立了几处cdn节点,每个节点并发5W,使用专线连接到核心交换机。但内网很快吃不消了,因为交换机之间只有1条线路在使用,极其浪费。在某次扩容接入交换机时,工程师操作失误,导致核心交换机根桥被抢占,整个实例重新计算,按理说STP重新速度也不慢,但面对大范围的一个二层网络,还是显得力不从心,业务中断很长时间。公司痛定思痛,进行了内部网络革命性变革,全部采用ospf,去除二层网络内网链路效率提升300%,并且杜绝后续内部扩容的网络隐患。

浅谈百万级并发网络的设计

阶段十,此时cdn的流量加上集群本身,勉强支持七八十万并发。继续整合扩容网络,因为f5昂贵的价格,公司替换为了lvs,支持并发8W,但是价格便宜得多,而且支持动态路由协议和任意自定义功能。进行了如下改造,返古使用了vrrp,两边lvs集群各作为一个域名的IP地址master,如果交换机故障会发生切换,同时解决了同运营商多链路负载不均

浅谈百万级并发网络的设计
后续只画出外网部分

阶段十一,正当公司蒸蒸日上的时候,被黑客瞄上了,进行了一次ddos攻击,损失惨重,管理层如梦方醒,安装安全设备(不限于ids,防火墙)。读到这里之前你能想到安全设备的安装位置吗。看下图,高并发网络,尽量少增加故障点,物理bypass模式,逻辑online模式,可以自由切换,希望大家理解这种思想。安全设备发布域名对应ip地址的bgp路由(什么用bgp下面会讲)到交换机,然后安全集群回指路由到外网交换机。

浅谈百万级并发网络的设计

阶段十二,解决了安全问题,就可以做百万并发到最后一步了。现在问题是什么呢,公司有多个域名,多个运营商,可能会导致并发不均,我们做最后的优化。公司研发比较给力,将lvs优化到支持15w并发(真实原因是不好增加lvs了,不然图会变小)。前面说过,同运营商多线路会导致负载不均,我们现在有2个域名不同ip,按照此机房架构,将另一个域名配置到另外一个IDC,单机房单运营商。重点来了。还要将整个外网也配置为全网ospf,将域名的ip全部配置到lvs一致,动态路由会自动负载均衡。

顺带解决十一阶段遗留问题,为什么用bgp,因为管理距离优先于ospf,可以把流量引过去。(静态策略路由也是可以的)

但是这样就解决问题了吗,没有,为什么,就要看对网络模型的理解了。

网络是分组交换,交换机三层设备不会检测tcp,如果某用户访问服务的第一个包发送到了左边集群,第二个包发送到了右边集群,tcp会话将不会继续。此时网页大概率是打不开的。

浅谈百万级并发网络的设计


为了解决这个问题,我们要采用一些手段。所有外部流量,集中先转发到左边设备,然后向下下发,根据负载均衡原则,此时一个流的源ip到下一跳一定一致。

百万并发就此达成。!!!

浅谈百万级并发网络的设计

总结:文中设备性能等与实际有出入,但是思路不变。

阶段一,基本

阶段二,扩容

阶段三,扩容

阶段四,置换

阶段五,去除堆叠,去除捆绑链路,修改架构

阶段六,局部优化,下沉nginx

阶段七,修改外网架构,去除路由器

阶段八,优化架构,dns轮询,平衡负载

阶段九,内部网络优化,利用率提高100%

阶段十,增加cdn,外网改造,平衡运营商线路负载

阶段十一,安全加固

阶段十二,优化负载均衡设备,百万并发达成


经过一列到变化,阐述了百万并发到一个演变。百万并发的关键点是服务器容量吗?不是。是交换机性能吗?不是。是几百G的带宽吗?也不是。而是如何分担并发流量到单负载均衡设备的承载范围内


整篇文章最终解决的是负载均衡设备的部署因为这是最关键点,最核心点。回到文章开头的问题,很多朋友觉得一定要用负载均衡设备,其实问的是负载均衡设备如何部署。但要来了百万并发流量,能在前面架设一个非常非常高端F5吗,姑且就算行,但是不科学。F5的作用是什么,分流。我们利用负载设备的思路,组建网络,流量到达负载均衡设备前,进行预分流,把这些流量平均分到小块的负载均衡设备上,分而治之。根据网络四层模型,交换机三层分流,LVS四层分流,NGINX七层分流。

网络技术众多,就是网工的兵器谱,盘点本文用到的技术,什么时候用什么技术,相信经过本文,能够加深大家对网络技术运用的认识。

  • 捆绑链路(外网接入区如果线路多余4条,不建议捆绑)
  • vrrp
  • ospf
  • bgp
  • 堆叠

各厂商鼓吹的堆叠,VPC高端新潮技术真的更合适吗,仁者见仁,智者见智了。有时候,简单的的技术解决复杂的问题不是更好吗,本文抛砖引玉,还有很多细节后面展开描述,希望大家对网络并发的设计有一定启发。。


转载:https://zhuanlan.zhihu.com/p/393762958

浅谈百万级并发网络的设计

浅谈百万级并发网络的设计

本文始发于微信公众号(释然IT杂谈):浅谈百万级并发网络的设计

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: