前言
缺席的架构
本文介绍了笔者主导的一个重构项目。将一个迭代了8年的系统进行了整体架构升级,以清理架构中腐化的部分,保障业务迭代的效率。我认为架构是系统的基石,是系统中稳定且不经常变动的部分。是不断生长产品功能的基础,像人的骨架一样起到支撑作用。好的架构是拥抱变化的,是对变化友好的,使变化更容易发生,不容易出错。但是互联网产品的发展有着特殊性,那就是“快”。很多互联网产品都是朝生夕死。在这样的背景下,系统迭代往往追求短平快,快速上线功能,快速验证产品是否适应市场的口味。在追求快的背景下,架构的设计往往是被牺牲掉的。这样带来的坏处就是,不断的累加产品功能导致系统是缺乏架构设计的。缺乏合理架构带来的影响不是即时生效的,它会延迟到某个时间点,逐渐拖慢产品迭代效率,累加系统风险,在某个时间点像地雷一样爆发。在这个时间点,大家才会把注意力放在架构设计上。
问题的滞后性
华佗是东汉末年的著名医生,但华佗却说,他在其兄弟三人中,医术是最低的,他的大哥、二哥医术都更为高超。但其兄长二人皆不及华佗有名,时人问其故。华佗说,其大哥能见微知著,治病于未发;其二哥能从小病中看出大病,因而能提前防治大病,故其兄长二人很少治疗大病,世人皆不知其兄长医术过人。而华佗自己则只能待病症显现,已经成大病时方能发现、治疗。久之,则其大哥、二哥不若华佗有名也。在软件开发中这样的故事也在上演,因为缺乏设计导致软件迭代后期到处救火的人比善于设计的人看起来工作量更多。
业务背景
闲言少叙,书归正文。接下来会介绍一下业务背景和产品功能和升级前的系统架构。
产品介绍
店小蜜是阿里巴巴旗下的官方智能客服产品。服务于数十万淘宝/天猫商家,日均对话轮次数千万。为商家提供全托管的机器人接待和辅助人工客服的人机协同模式,以提高客服的工作效率。
架构介绍
原有系统依赖流程编排和事件驱动。系统对外的核心接口只有一个,但是这个接口内部的功能非常复杂。大致的流程是,理解用户问题->查询商家配置的答案->选取最优答案->生成用户响应。当然这里的流程是最简化的流程,就像把大象装进冰箱只需要三步一样。看起来简单,但是每一步会涉及的很多细节。整个执行流程被拆分为几十个步骤