13
8
内容纲要

互联网架构启示:一根网线引发的“血案”

引言:当一个网站做大的时候,无论是研发还是运维,每一个细节都至关重要,网站的任何一个小的瑕疵都会被无限放大。

公司有一个基于微信公共服务器号开发的产品,主要为微信用户提供在线交流、互动、阅读和科研分析等功能。前阵子升级了支付接口,运营人员开始用红包推广,并且把原来微信服务号的积累的用户引流到服务号本身的网站服务,网站堵塞时秒并发连接数峰值达到1k,数据库瞬间批处理数也达到了2k+,这个量其实不算什么,但因为运维架构的一个疏忽,导致网站2次宕机。这里先说明两点:运维属于公司另外一个部门,当然大家还是相互协作还算比较好;我们的服务器都是32G内存,4核2GHz的CPU的品牌服务器。

第一次宕机:抢红包导致宕机3小时。

我们发布完毕2.0版本之后,运营很开心,打算搞一次庆祝活动:只要来关注公共号,进入首页就可以另一个1块钱红包,任何人都可以。发红包当天,我没有接到通知,到家收到微信的提醒,过了差不多1小时,运营电话过来说网站慢了,而此时我连服务器都很难连接不上,运维的说50兆的带宽只用了8兆(这里有一个细节他没有告诉我:网络是一条几乎是直线在运行),再过来半小时,网站几乎打不开了。过了一阵子我登录终于能登录服务器了,但还是很卡,看了服务器的指标,我关注了io、cpu和内存,发现全部正常,idle很高,几乎都是80%,不过没有注意网络。接着两个多小时,直到红包抢完,网站才开始能正常访问。第二天,运维与我们完成了负载均衡的搭建,4台web,1台专用db,cache不变,与架构变化之前一样,只做了web服务器级别的cache,我个人判断这样的量还不需要加memcached和读写分离。后面两次发红包量没有那么大,服务器都正常,但我观察了服务器,发现一个现象:当并发数比较多的时候,db服务器指标还是正常,但总有点卡顿,这次我观察到有时候内外的网络会瞬间冲到98MB,咨询运维的同事说这个正常我们内网有千兆网卡呢,而且现在外网的流量不到占用不到10%。

第二次宕机:活动导入流量导致宕机1小时。

这一次宕机,我觉得不可能发生的。当天傍晚,运营的人一下子给微信十万级别的用户发消息,把他们引流进入网站,过了1小时网站又宕机了,一直过了高峰才恢复,那天只有运维的人在跟服务器情况。第二天,运维的跟我说是我们数据库有问题,他们的理由是:外网流量还是一条7MB直线,所有服务器的指标都正常,但是一拔数据库的网线整个网际通了,所以是db处理不过来那么多请求、或者代码有问题。我当时有点懵了,因为看了流量,那天2个小时的pv达到了10w,鉴于这个产品我们使用了比较新的开发框架,我开始怀疑代码问题、数据库连接问题等等。然后先把所有能优化的都优化,包括动态的内容等也加cache,上了1台memcached服务器。我们还把用户行为用消息队列进行异步处理。改完之后开始google,研究程序架构支撑情况、数据库并发数等等,结论是感觉昨晚的量在昨晚这种条件下网站不应该宕机的,我甚至都怀疑是不是服务器采购的时候被动手脚了-_-

过了一周运营再次搞活动,活动之前我还发现一个问题:个别图书封面居然有5mb的图片,原来产品经理为了让用户看清楚图书封面要求用原图,我赶紧让工程师改成压缩图片。晚上刚到家不久,运营电话又过来了,说虽然没有宕机,内容也能看,但还是有点慢。我接到电话觉得很不可思议,心里想怎么流量那么高。登录服务器之后,发现流量也就是和上次一样,症状和上次也是一样,和运维的沟通,说他连不上服务器(网络是正常的),我特地看了db的连接也只有2位数,虽然偶尔会突然到2k多,但我知道这是因为网络堵住连接不到memcached。当天晚上就咨询以前的认识的运维大拿们,他们也觉得很不可思议,但我们判断肯定是硬件架构哪里出了问题,我把服务器的指标等都截图保留。公司运维的哥们这时候说怀疑是内外网公用网卡的原因,不过这种做法也不是不可以,因为内网有千兆网卡。第二天,又咨询了很多人,大家的结论是:网络有问题。问了好几次公司运维,都说:交换机是千兆的、防火墙是千兆的、网卡是千兆的,后来我以前的同事乌咔咔大拿注意到我截图里面显示网卡只有100MB,我赶紧检查所有的服务器,发现:内外网公用一个只有100MB的网卡!!!问了运维,他说网卡肯定是千兆,我说是不是被自适应了,他楞了一下,说不是自适应,是网线可能是百兆的,去机房确认了一下,发现服务器用的全是5类网线,而且是自己做的……运维也知道是啥原因了,走了特批买了超6类的网线换上。

目前网站一切正常,未来如果突破一定的用户量,肯定要做db的读写分离、cdn等。回过头来看,第一次宕机的可能性很多种,网线问题、web服务器超并发问题、db和web在同一台问题等;第二次宕机的原因应该是:这根网线引发,内网网络瞬间被挤爆,所有内部通信在等待、数据库连接超时,我的理由是这一天的秒连接数也只有几百,数据库连接也就1k多;第三次虽然没有宕机,但网站有些慢,依然是因为这根网线的原因。

这就是一根网线引发的“血案”的案例,希望对看到的工程师们有所帮助。我本人一直做开发,也自认为自己开发能力、软件系统架构能力很强,但之前确实忽略了硬件方面的知识,这一次是彻彻底底、从头到尾上了一个课。


声明: 本文采用 BY-NC-SA 协议进行授权. 未标注“转”的文章均为原创,转载请注明转自: 互联网架构启示:一根网线引发的“血案”

公告栏

欢迎大家来到我的博客,我是dodoro,希望我的博客能给你带来帮助。