早上八点四十。
林晚提前二十分钟到达办公室,却发现工位上已经有人了。刘洋顶着更乱的头发,眼睛盯着屏幕,手在键盘上飞舞。
“早,刘哥。”
“早。”刘洋头也不抬,“帮我看看这段代码,死循环了,找不出来。”
林晚放下背包,凑过去看。是段数据处理逻辑,在嵌套循环里有个边界条件写错了,导致在特定数据下会无限循环。
“这里,”他指着屏幕,“当i等于数组长度减一时,应该跳出循环,但你写成了i+1,所以永远不满足条件。”
刘洋盯着看了三秒,拍了下额头:“靠,低级错误。谢了。”
他快速修改,运行,程序正常通过。这时才长舒一口气,瘫在椅背上:“昨晚搞到两点,脑子都不转了。”
“加班了?”
“智慧社区的后台服务,压测不过,响应时间超时。周总下了死命令,这周必须解决。”刘洋揉着太阳穴,“你那个性能对比方案写了吗?今天晨会可能要汇报。”
“写了草稿。”
“行,一会儿看你的了。”
九点整,技术部晨会。二十几个人挤在会议室,周文斌站在白板前,面无表情。
“智慧社区项目,当前进度滞后12%。主要原因:数据接口模块效率不达标,后台服务压测不过,前端页面加载慢。”他看向几个人,“各自汇报。”
被点名的员工依次发言,问题五花八门:数据库索引没建对、缓存策略有问题、前端资源没压缩...周文斌听着,偶尔打断问细节,会议室气氛凝重。
轮到林晚时,所有人的目光都投过来。新人第一天,能有什么可说的?
“我看了数据接口的需求文档,”林晚站起来,尽量让声音平稳,“目前的HTTP+JSON方案,在模拟压测下,单机QPS(每秒查询率)能达到1200,但延迟中位数是45毫秒,P99延迟(99%的请求延迟低于此值)达到了200毫秒,不满足智慧设备实时控制的要求。”
他走到白板前,画了个简单的对比图:“我建议引入MQTT协议。轻量,开销小,支持发布/订阅模式。模拟测试显示,同样条件下,QPS能提到1800,延迟中位数降到20毫秒,P99延迟控制在80毫秒以内。”
会议室里安静了几秒。有人小声议论:“MQTT要改协议栈,老设备不支持怎么办?”
“兼容方案在这里。”林晚翻到下一页,“在网关层做协议转换。新设备用MQTT,老设备走HTTP,网关统一处理。额外增加5%的延迟,但在可接受范围。”
“安全性呢?”一个女生问,“MQTT默认是明文传输。”
“TLS加密,加上应用层的自定义加密。具体方案我写在这了。”林晚指向白板上的架构图。
周文斌一直没说话,等林晚讲完,才开口:“这个方案,实现要多久?”
“如果给我两个人,一周出原型,两周内测,三周上线。”
“你要谁?”
林晚没想到总监会这么问。他犹豫了一下,看向刘洋:“刘哥熟悉后台,李哲懂网络协议。”
被点名的两人一愣。刘洋眨眨眼,李哲则摸了摸鼻子。
“行。”周文斌拍板,“刘洋、李哲,你们配合林晚,这周把原型做出来。其他组的问题,今天下班前给我解决方案。散会。”
人群散去,林晚还站在白板前。刘洋走过来,表情复杂:“可以啊老弟,第一天就牵头项目了。”
“我只是提个方案...”
“方案通过了,你就是负责人。”李哲也走过来,推了推眼镜,“压力大哦,三周上线,加班加到死。”
“我会尽量...”
“别说尽量,要说保证。”刘洋拍拍他,“走吧,开工。”
回到工位,三人拉了个小群,开始分工。林晚负责整体架构和核心代码,刘洋做后台服务对接,李哲搞网络协议栈。
一上午,键盘声没停过。林晚沉浸在代码里,时间过得飞快。中午吃饭时,刘洋边扒饭边说:“你注意到没,周总今天看你的眼神不一样了。”
“有吗?”
“有。他平时看新人,跟看代码bug似的。今天看你,像看...嗯,看一个还能抢救一下的bug。”刘洋自己先笑了,“开个玩笑。总之是好事,说明他认可你了。”
林晚低头吃饭,没说话。他想起系统里的三个“禄”福,不知道今天能不能派上用场。
下午两点,问题来了。
李哲皱着眉头过来:“MQTT的broker(消息代理),用开源的还是自己写?开源的性能可能不够,自己写时间不够。”
“先用开源的测试,同时自己写个简单的。”林晚快速决策,“开源版本做压力测试,拿到性能瓶颈数据。我们自己写的版本针对这些瓶颈优化。”
“工作量加倍啊。”
“但能保证进度。你先把开源版本搭起来,我今晚开始写broker核心。”
李哲盯着他看了几秒,笑了:“行,有魄力。我以前跟的项目,这种时候都是互相推诿。”