QQ空间是腾讯于2005年推出的社交平台,拥有数亿用户。它提供日志、相册、说说等多种功能,让用户能个性化展示自我。其发展历程历经技术架构的多次演进与优化,从石器时代的艰难起步,到冷兵器时代的功能磨砺,再到现代战争时代的不断拓展,逐步成为国内领先的SNS社区产品。
QQ空间业务网 - 空间业务网
QQ空间重构背景与原因
重构背景:QQ空间作为腾讯海量互联网服务产品,经过近七年的发展,实现了从十万级到亿级同时在线的飞跃,随着业务的不断扩展和用户需求的变化,原有的技术架构已经难以满足日益增长的业务需求,为了提升用户体验、提高系统稳定性和可扩展性,QQ空间团队决定对系统进行重构。
重构原因:
代码劣化:由于前期架构扩展性不高,导致异化的业务代码无处安放,开始侵入底层技术组件,由于缺乏编程范式,各团队的代码耦合在一起,代码风格迥异,增加了维护成本。
维护成本高:随着业务的复杂化,代码逐渐劣化,历史bug难以收敛,即使不改代码每个版本也会新增历史bug30+,这使得维护成本不断升高,开发效率低下。
技术债务庞大:面对如此庞大的历史债务,QQ空间已经到了寸步难行的地步,不破不立,重构势在必行。
渐进式重构的实施
先拆解后治理:QQ空间团队并没有立即对旧代码进行重写,而是先基于团队的RFW-Part框架对老代码进行拆解,通过这种方式,将一个复杂的大问题分解为许多个小问题,可针对小问题重构和回滚,保证了系统的可用状态。
架构融合:在重构过程中,QQ空间团队彻底抛弃了空间老的技术组件,与团队内部沉淀的RFWComponent进行架构融合,积极接入手Q统一的UI体系,保证开发能专注于业务中间层开发。
提效前置简化运行环境:在进行业务重构前,团队还了一部分技术债,包括去插件化、进程统一、工程结构优化和编译优化等,这些工作简化了空间代码的运行环境,提升了开发效率,保证了重构工作的敏捷性。
架构的扩展性与复用性
业务层打薄专注中间层:为了避免代码跨层级污染,QQ空间对架构的分层比以往更细,隔离做得更严格,底层技术组件基于RFW框架,中间层负责对RFW组件和手Q运行环境做桥接,并对底层组件进行扩展,实现一些空间相关但与具体场景无关的功能,这种设计提高了架构的扩展性和复用性。
RFWComponent组件库:RFWComponent是一线开发在实际业务中沉淀出的一套组件库,目前由空间和小世界团队共同维护,所有组件都经过了线上业务的验证,保证了易用性和扩展性,组件也很完整,开箱即用,最重要的是,RFW的核心组件都可由上层注入代理实现,这使其并不依赖于手Q的运行环境,也避免了业务侧逻辑入侵底层代码。
降低复杂度并长期可控
避免代码跨层级污染:通过细分架构层级和严格的隔离措施,QQ空间避免了代码跨层级污染的问题,这使得各层代码职责明确,降低了维护成本。
复杂度长期可控:通过引入先进的架构设计理念和技术手段,QQ空间确保了系统的复杂度在长期内得到有效控制,即使面对未来业务的不断变化和扩展,系统也能保持高效稳定的运行状态。
QQ空间通过渐进式重构、架构融合、提效前置等措施成功解决了历史遗留问题并提升了系统性能,通过细分架构层级、引入RFWComponent组件库等手段提高了架构的扩展性与复用性,最终实现了降低复杂度并长期可控的目标为未来的发展奠定了坚实的基础。