简介
《重生2010:我靠代码撬动世界》由代码能跑就行所撰写,这是一个不一样的故事,也是一部良心都市脑洞著作,内容不拖泥带水,全篇都是看点,很多人被里面的主角林默所吸引,目前重生2010:我靠代码撬动世界这本书写了145228字,连载。
重生2010:我靠代码撬动世界小说章节免费试读
周二下午,故障爆发的时候,林默正在改一个监控脚本。
钉钉群突然炸了。消息一条接一条往外蹦,红通通的@所有人,夹杂着“挂了”“打不开”“紧急”之类的词。他点进去一看——搜索页面打不开了,用户反馈炸了,老板在群里发了个问号。
林默心跳快了半拍。他负责的那几台机器不在这次故障里,但他还是第一时间切到运维后台,扫了一眼全局。
CPU全红。数据库连接数。一堆超时报错。
老刘已经在群里发话了:“核心组的人会议室,其他人待命。”
林默刚想继续看监控,老王从工位那边探出头来:“林默,你也来。”
“我?”
“来。”
会议室里挤了七八个人,都是运维组的。老刘站在白板前面,脸色难看。投影仪上打着实时监控,CPU曲线跟心电图似的,一路往上窜。
“什么情况?”老刘问。
负责核心业务的同事额头冒汗:“数据库扛不住了,连接数飙到上限,现在读写都超时。”
“扩容呢?”
“扩了,但扩完马上又被冲爆。像是有人在刷。”
“刷?”老刘皱眉,“确定不是业务上涨?”
“业务没涨,就是突然起来的流量。”
老刘沉默了两秒,开始分派任务:“老王,你看志,找来源IP。老张,你盯数据库,再扩一次试试。小李,你去联系业务方,问他们是不是发新版了。”
几个人应声出去。林默站在角落里,不知道该嘛。
老刘看了他一眼:“你也别闲着,帮忙盯监控,有异常随时报。”
林默点头,回到工位。
屏幕上的监控曲线还在往上窜。他盯着看了一会儿,脑子里忽然闪过一个念头。
他前世遇到过类似的情况。那是在一家创业公司,也是数据库被冲爆,查了半天发现是索引失效,导致全表扫描。但这次是百度,索引应该不会出这种低级问题。
不是索引。
他又看了一会儿,注意到一个细节:CPU飙升的同时,磁盘IO也在涨,但内存没什么变化。
这不太对。如果是正常查询,内存应该会被大量使用,因为有缓存。但现在内存不动,说明缓存没起作用。
他切到数据库监控,看了一眼缓存命中率——掉到个位数了。
这就更不对了。百度的缓存策略不应该这么差。
他脑子里又闪过一个念头:如果缓存被绕过了呢?
他想起前世看过的一个案例。某个电商网站大促的时候,有人利用缓存穿透,故意查不存在的数据,每次都得去数据库里捞,直接把数据库打崩。
会不会是同样的套路?
他犹豫了一下,站起来,走到会议室。
老刘正在打电话,看他进来,眼神问“什么事”。
林默等他挂掉电话,说:“刘工,我怀疑是缓存穿透。”
老刘愣了一下:“说。”
“缓存命中率掉到个位数了。如果是正常查询,不应该这样。可能有人在刷不存在的数据,每次都穿透到数据库。”
老刘盯着他看了两秒,然后扭头对着外面喊:“老王!查一下请求里有没有大量不存在的key!”
老王的声音从外面传来:“正在查……,还真有!同一个ID,一直在请求不存在的商品!”
老刘快步走出去,林默跟在后面。老王指着屏幕:“你看,这个商品ID本不存在,但一直在刷,每分钟几万次。”
“封IP。”老刘说。
“封了,但他换IP。好像是代理池。”
老刘沉默了。
林默站在旁边,脑子里飞速转着。前世他处理过类似的问题,解决办法有好几种。最简单的,是把空结果也缓存起来,哪怕不存在也缓存几秒钟,避免每次都查数据库。但这样治标不治本,因为攻击者可以换不同的key继续刷。
更好的办法,是用布隆过滤器。
这东西现在2010年,国内知道的人不多。但他知道原理,也能写出来。
他犹豫了一下,开口:“刘工,我有个思路。”
老刘看他。
“布隆过滤器。”林默说,“把所有存在的key提前加载到一个过滤器里,请求来的时候先查过滤器,不存在就直接返回,不查数据库。”
老刘眼睛亮了一下:“你懂这个?”
“看过论文,自己写过demo。”
老刘看了看时间,又看了看监控。数据库已经快撑不住了,再不想办法就要全挂。
“多久能写出来?”
“二十分钟。”
“写。”
林默回到工位,打开IDE。布隆过滤器的原理他熟,几个哈希函数,一个位数组,实现起来不难。但生产环境用,得考虑性能,得考虑并发,得考虑内存占用。
他深吸一口气,开始敲代码。
老王站在他后面看,大气都不敢喘。
代码一行一行往外蹦。林默脑子里像开了挂一样,那些前世写过无数遍的代码自动往外冒。他选了几个哈希函数,定好位数组大小,写初始化逻辑,写查询逻辑,写添加到过滤器的接口。
十分钟,代码写完。二十分钟,测试通过。
他站起来,对老刘说:“可以上线了。”
老刘点点头,让老王把代码部署到缓存层前面。
三分钟后,监控曲线开始往下走。数据库连接数降下来了,CPU降下来了,响应时间恢复正常。
群里静了几秒,然后有人发了个“牛”。
老刘站在林默工位旁边,看了他一眼,没说话。但眼神里那意思,林默看懂了。
晚上八点多,故障彻底平息。老刘把林默叫到会议室。
“今天那个布隆过滤器,你怎么想到的?”
林默想了想,说:“以前看过论文,一直想试试。”
老刘点点头:“代码我看了,写得不错。”他顿了顿,“以后核心组的故障处理,你也参加。”
林默心里一跳:“好。”
走出会议室,老王迎上来,一把搂住他肩膀:“牛啊兄弟!今天要不是你,估计得挂到半夜。”
林默笑了笑:“运气好。”
“运气个屁,那是真本事。”老王压低声音,“你知道老刘平时多难夸人吗?他今天看你那眼神,跟看亲儿子似的。”
林默被他逗笑了。
下班的时候已经九点多。他走在回家的路上,手机震了,朱小发消息:“今天咋样?”
林默想了想,回:“还行,今天救了个火。”
“厉害。你们公司着火了?”
林默笑出声:“不是那种火。就是……技术故障。”
“哦,那救好了吗?”
“救好了。”
“那就行。你吃饭没?”
“还没,刚下班。”
“快去吃饭,别饿着。”
“好。”
林默收起手机,在路边找了个小饭馆,要了碗面。等面的时候,他打开比特币论坛看了一眼。价格0.48美元了,总共有6.2个比特币。
他算了算,值2.976美元。还是不够一顿饭。
但今天的事让他觉得,比挖到几百个比特币都踏实。
前世他学了一身本事,最后被裁的时候,那些本事好像都没用。但现在不一样了。那些东西,真的能救命。
面来了,他低头吃起来。
手机又震了。这次是短信,陌生号,北京的。
“林默,恭喜啊,听说你今天立功了。”
林默盯着屏幕,愣了一下。这人谁?怎么会知道?
他回:“你是?”
“张磊。我在百度有朋友。”
林默沉默了几秒,没回。
张磊怎么会在百度有朋友?他来北京不是出差吗?
他想了一会儿,没想通。算了,先吃饭。
吃完面回家,开电脑。挖矿程序还在跑,又多了0.1个。他盯着屏幕,脑子里还在想今天的事。
布隆过滤器,前世他用过无数次。但今天是他第一次在2010年用。这玩意儿现在还没普及,等再过几年,就会变成标配。
他忽然有个念头:如果把这些未来的技术,一个一个提前拿出来,会怎么样?
不是作弊,是降维打击。
他笑了笑,关掉电脑,躺床上。
窗外,北京的夜很安静。他慢慢睡着了。
明天还有明天的事。