第32章 三板斧 重生10:我在企鹅做推手
“是外包甲乙方线下首次会晤!”林深活跃了一下气氛。
隨著冰凉的玻璃瓶碰在一起,两人的话匣子打开了起来。
“说起来,能找到你电话,还多亏了陈建国老师。”李峰灌了一大口啤酒,畅快地哈了口气,“我刚好去学校,想让老师推荐点儿人才,你知道的,我们现在缺人,到手的钱要快速的花出去。
也是巧了,他给我的名单里就有你,说你还在一家小公司,但谁能想到,你去腾讯了……”李峰放下酒瓶,手指在冰凉的杯子上敲了敲,眼神里带著探究。
“不过,听陈老师的口气,你给他的印象倒也不是很深,他就是很客观地说你技术底子不错,做事认真,交给你的任务能闭环,但性格偏静,不是那种在课堂上爱发言或者爱折腾社团活动的学生。我当时还想,这种踏实干活的技术人,正適合我们创业公司啊,没想到一转头,你已经在腾讯搅动风云了。”
林深笑了笑,给两人的杯子重新满上,有些事儿他也没必要解释,只是附和了一句:“陈老师说得对,我確实不是那种显眼的学生。在学校大部分时间都泡在实验室和图书馆,琢磨代码比琢磨人多的多。去腾讯也是机缘巧合,赶上他们扩招移动端,我又对这块感兴趣。”
“你这可不单单是感兴趣那么简单……”李峰的话欲言又止。
“峰哥,创业难吧。”林深又转移了话题,但这个问题像是打开了李峰的话匣子。
“难!”
“可太难了!”
“半个月前,我都快忘了睡觉是什么感觉了。a轮那边卡住了,那边要我们先把系统稳定性搞定再谈,可我们一搞活动,伺服器就崩,一崩商户就投诉,一投诉数据就难看……死循环。”
“最要命的是团队士气。”李峰的声音低了下来,像是在回忆什么往事:“技术负责人,连续熬了三个通宵,有天早上在会议室晕倒了。送去医院,医生说是过度疲劳加低血糖。王鑫王总和我去看他,他抓著王总的手说『我对不起公司』……一个大男人,哭得像个孩子。”
“我后来兼了技术负责人,但整个技术团队就十几个人,要维护全国八个城市的系统,还要开发新功能……林深,你说,创业难吗?”
“但挺过来了……”林深补充道。
“是挺过来了,你知道我们技术团队现在最怕听到什么吗?『峰哥,市场部那边又策划了个大活动,预计流量是平时的五倍,下周一上线。』”
他放下筷子,表情变得有些苦涩:“每次听到这种消息,我都头皮发麻。不是不想配合业务,是我们的系统真的扛不住。
就像一个营养不良的人,你非要他扛两百斤的麻袋,结果就是累垮了,麻袋也砸了。上次在bj试水一个『午餐秒杀』,订单峰值一来,mysql连接数直接飆红,支付回调队列堆积,用户那边显示支付成功,我们后台订单状態还是『待支付』。
光是核对数据、手动修復,就花了两个通宵。那两天,技术团队几乎没合眼,我陪著他们,一边盯著监控一边在脑子里把系统架构翻来覆去地骂。”
林深默默听著,他能从李峰的描述里感受到那种具体的、令人窒息的运维压力。
这是创业公司都要面临的挑战,甚至每分钟都可能爆发的事故。
“除了救火,更头疼的是建设。”李峰喝了口酒,继续说道,“钱快来了,我们要招兵买马,要开拓新城市,要上线新功能。
可面试的时候,稍微有点经验的候选人,一听我们要维护这么个技术债沉重、又要快速叠代的系统,要么犹豫,要么开价高得离谱。招来的新人,光是熟悉我们那套祖传代码的『风俗习惯』,就得一两个月,业务根本等不起。”
他看向林深:“学弟,我不是来跟你诉苦的,就是你刚好问到了,我也藉机抒发一下。团队里我不能说,说了动摇军心。家里人更不能说,说了他们只会担心。
王总说,a轮的钱很大一部分要把我们技术的短板补上,可怎么补?我到现在都没有头绪。你和我都是搞技术的,都能明白,推倒重来是不可能了,时间和业务都不允许。继续修修补补?又怕哪天补出一个更大的窟窿,学弟啊,难呦~”
林深听到这儿,看著喝了两瓶就有些醉的李峰,脑海中却是冒出一个大胆的想法。
或许,这顿饭,还给他吃出了点机遇。
他也没想到,面前的李峰,居然会是美团的技术负责人。
那就能说上话啦……
隨著炭火在炉子里明明灭灭,放下了手里的烤馒头片,神情变得认真而专註:“峰哥,你们遇到的问题,是很多成功公司早期都经歷过的『成长的阵痛』。
业务跑得太快,技术债来不及还,就利滚利成了高利贷,想一下子还清不现实,但可以先『分期』,重点解决那些影响业务生死和团队信心的『高息债务』。”
“哦?具体怎么说?”李峰捏开一颗毛豆,像是不在意的问道。
“第一步,別想著一步到位做完美的分布式。立刻,马上,用最成熟简单的方案,比如redis,把用户下单、支付回调这两个最要命的流程异步化、队列化。
別想著用户点击支付后,立刻返回成功,把后续的库存锁定、订单状態更新这些重操作丟到队列里慢慢消化。哪怕队列偶尔堆积,至少前台体验不崩,用户不会流失。这是短期內防止被流量『打死』的最有效手段,技术成本低,见效快。”
李峰放下了手中的吃的,他从林深的话中听出了一点不一样的东西。
“第二步,立即搭建一个最简单的监控系统,不需要多漂亮,但必须能实时监控几个关键指標:资料库连接数、核心接口响应时间、错误日誌里有没有出现『timeout』、『connection failed』这类关键词。一旦异常,自动发简讯给值班手机。
目標是『问题发生5分钟內,就有人被叫起来处理』,把救火从『蒙著眼睛找火源』变成『按著警报器灭火』。”
李峰的酒好像是醒了一些,更是从身边的包里拿出纸笔,开始记了起来。
“第三步,承认老代码暂时动不了,但所有新功能开发、老代码修改,必须遵守最简单的模块化约定。哪怕只是把不同业务域的代码放到不同的子目录下,定义清晰的接口调用方式。
这不是为了现在,是为了半年后当你们团队扩充到50人、100人时,还能勉强协同开发,而不是陷入更大的混乱。”