九月中旬,北京秋意渐浓。
“颤动视频“的用户量,在会面后的这一周里,从五十万暴涨到了一百万。
日活跃用户也突破了五十万。
这个增速,超出了秦风最乐观的预期。
但也带来了问题——伺服器负载飆升,已经到了百分之八十的警戒线。如果再不扩容,隨时可能宕机。
宕机,对一个网际网路產品来说,是致命的。
用户会骂你、刪你、去用你的竞品,然后你辛辛苦苦积累的用户,一夜之间就没了。
秦风很清楚这一点。
他召集了一次紧急会议。
参会的人不多——张浩、李萌、王健,再加上被临时叫来的凌玥。
凌玥很少参加“颤动视频“的会议,但这次的情况比较特殊——伺服器扩容涉及到分布式系统的架构调整,张浩一个人可能搞不定。
会议在“颤动视频“的办公室里开。
秦风坐在会议桌的主位上,面前摆著一台笔记本电脑,屏幕上显示著伺服器的实时监控数据——cpu使用率、內存使用率、磁碟i/o、网络带宽,每一项都標著红色的警告。
“现在的问题是,我们的伺服器规模太小了。“张浩先开口,“只有二十台,面对一百万用户,每台伺服器要承载五万用户的数据请求。这个负载,已经接近极限了。“
李萌在旁边补充:“而且推荐算法的计算量也隨著用户量暴涨,如果不优化算法或者增加计算资源,推荐速度会下降。用户等超过两秒,就会不耐烦,然后关掉应用。“
王健没说话,但手指在桌面上无意识地敲著。
凌玥坐在角落里,一直没说话。她戴著一副黑框眼镜,头髮扎成了一个松松的丸子,看起来很安静,但眼神一直在秦风、张浩和李萌之间转。
秦风看著数据,沉默了好一会儿。
然后他开口了:“扩容方案,我想了两个。大家听听,选一个。“
他在白板上写了两个方案——
“方案一:立即扩容伺服器,增加五十台,预计成本两百万。这个方案的好处是稳妥,扩容后至少半年內不用担心负载问题。坏处是成本高,而且如果用户量增速放缓,会浪费资源。“
“方案二:优化推荐算法,降低计算量,同时渐进式扩容,预计成本一百万。这个方案的好处是经济,不会浪费资源。坏处是优化算法需要时间,期间如果用户量继续暴涨,可能会撑不住。“
他放下笔,看著三个人。
“你们倾向哪个?“
张浩先开口:“我倾向方案一。稳妥一点好,万一宕机了,损失的不只是钱,还有口碑。“
李萌说:“我倾向方案二。算法还有优化空间,我可以把模型压缩一下,减少计算量。而且渐进式扩容更灵活,可以根据实际负载动態调整。“
王健想了想,说:“我中立。前端这边,不管选哪个方案,我都要优化一下视频加载的逻辑——现在是一个视频加载完才开始播放,可以改成预加载,用户还在看第一个视频的时候,后台就开始加载第二个视频。“
凌玥忽然开口了。
“两个方案结合。“
所有人都看向她。
凌玥的声音很轻,但每个字都清清楚楚:“先扩容二十台应急,把负载降到百分之五十以下,让系统恢復稳定。同时优化算法,降低计算量,为下一波增长做准备。这个方案,成本大约一百五十万,介於方案一和方案二之间。“
秦风看著她,没说话。
凌玥继续说:“扩容的时候,要注意一个问题——如何在不停止服务的情况下迁移数据。这个问题,如果处理不好,会导致扩容期间用户无法正常使用。“
“你有办法吗?“秦风问。
凌玥点了点头:“蓝绿部署。旧伺服器保持运行,新伺服器上线后,逐步把流量切过去。整个过程,用户无感知。“
秦风想了想,说:“就按凌玥说的办。张浩负责扩容,李萌负责算法优化,王健负责前端预加载,凌玥负责整体技术架构的调整。“
“有问题吗?“
“没有。“四个人异口同声。
会议结束后,团队立刻投入了工作。
张浩联繫了云服务商,加急採购了二十台伺服器。正常情况下,採购流程需要三到五个工作日,但张浩在电话里跟对方磨了半个小时,最后加了两万块钱的加急费,把交付时间压到了两天。
李萌开始优化算法。
她把推荐模型的参数压缩了百分之三十——通过剪枝和量化,把模型的体积缩小,计算速度提升,同时保持推荐准確率不下降太多。这是个精细活儿,需要反覆调试,反覆验证。
王健开始优化前端。
他加入了预加载功能——用户在看第一个视频的时候,后台静默加载第二个、第三个视频。当用户滑到下一个视频时,不需要等待加载,直接播放。这个功能,大大提升了用户的使用体验。
凌玥负责整体架构。
她把“颤动视频“的伺服器架构,从单机部署改成了分布式集群。负载均衡、数据分片、故障转移、自动恢復,每一个环节她都亲自过了一遍,確保没有单点故障。
扩容的过程,並不顺利。
他们遇到了好几个技术问题——
数据迁移时,如何保证数据一致性?
凌玥的解决方案是:双写机制。数据同时写入旧伺服器和新伺服器,等数据完全同步后,再切换流量。
负载均衡策略,如何选择?
凌玥选了基於请求响应时间的动態负载均衡——哪台伺服器的响应时间最短,就给哪台分配更多请求。这个策略,比静態的轮询或者隨机分配,要聪明得多。
故障转移,如何做到秒级切换?
凌玥在每台伺服器上部署了一个心跳检测程序——如果某台伺服器宕机了,心跳停止,负载均衡器会在三秒內检测到,並把流量切换到其他伺服器。
三天三夜,团队几乎没怎么睡觉。
张浩的眼圈黑了,李萌的嘴唇乾裂了,王健的手指敲键盘敲得发了麻,凌玥的话更少了,整天整天地盯著屏幕,偶尔站起来活动一下僵硬的脖子。
秦风也一直在。
他不是技术专家,帮不上具体的忙,但他可以帮团队买饭、买咖啡、订夜宵,可以在他们疲惫的时候讲个冷笑话,可以在他们迷茫的时候给一个坚定的眼神。
第三天晚上,扩容终於完成了。
系统恢復了稳定——伺服器负载降到了百分之四十,推荐算法的响应时间维持在五十毫秒以內,前端预加载功能运行正常。
张浩盯著监控屏幕,长长地吐了一口气:“活过来了。“
李萌趴在桌上,秒睡。
王健靠在椅背上,闭著眼睛,手指还在无意识地敲著。
凌玥还在敲代码——她在处理一些善后工作,把扩容过程中的操作记录、配置文件、故障处理方案,都整理成了一份技术文档。
秦风看著他们,心里涌起一阵暖意。
这不是僱佣关係,这是战友。
他走出办公室,站在走廊里,给每个人点了一杯热奶茶——张浩要半糖,李萌要全糖,王健要无糖,凌玥要温热的无糖乌龙茶。
奶茶送来的时候,四个人都抬头看著他,眼睛里有著说不出来的东西。
“辛苦了。“秦风说。
简单的三个字,但每个人都听懂了。
(本章完)