架构是一个共识:当当系统架构优化年终总结
引言
随着移动互联网的进一步普及,网上消费购物比例不断提高,电商网站的系统规模随业务快速增长,承载每天数以万计的交易已经是主流电商网站的常态。不断膨胀的大型电商网站系统架构该如何进行优化,才能既满足业务需求,又进行技术方面的持续革新?
2015年,当当顺应电商行业发展趋势,对促销系统、交易系统进行重构,并持续对架构进行优化,针对客户体验拆分系统,提高研发效率,强化系统稳定性和扩展性。
优化主要针对以下四种问题:
偿还技术债——.net遗留系统以及临时方案导致版本过多、架构僵化
降低复杂税——系统解耦、服务化、使得架构更为清晰、灵活
文档脱节症——通过重构梳理系统数据模型及应用逻辑,补全更新文档
敏捷性障碍——模块化、微服务化、使得敏捷开发能够顺畅落地小团队
电商行业发展趋势
电商行业竞争激烈,业务创新层出不穷,互联网技术发展日新月异。
几年前618、双十一、双十二标志着电商进入促销常态化和大规模活动化阶段,前两年则是主打无线APP购物,那么2015年,电商行业在业务模式上呈现出了哪些特征?
第一、 渠道拓展
移动互联网时代,流量入口愈加分散,催生出诸多导购引流的APP,电商公司需要具备对接多种渠道的能力,还要结合技术趋势,开通微信公众号,甚至是入驻其他零售平台、分销平台,打造更多的垂直频道,充分吸引流量。
第二、 实时交互
随着大数据实时计算技术的成熟,当用户在线时,根据用户画像和行为进行实时交互,结合业务活动提供精准的个性化即时服务,不浪费每一毫秒,提升客户体验,提高客户粘性。
第三、 功能聚合
在每一个用户打开的界面提供尽可能多的功能和信息,典型的是单品页,现在堆满了各种链接,显示能够使用哪些礼券、有哪些种促销和服务,甚至商品副标题也会嵌入活动链接。竭尽所能利用流量,提高转化。
第四、 精细运营
营销越来越复杂,对运营的要求相应提高,运营人员必须了解每一个操作之后的效果是否符合预期,摸索对于不同的季节、地区、时段、客户群体、商品品类最有效的营销手段。
再看2015年的互联网技术发展趋势,主要体现在三个层面:
第一、 微服务
微服务这个名词被发明出来之后就取代了SOA在互联网行业中地位,可以说是为互联网时代量身定制的。
第二、 容器化
Docker的出现掀起了容器化的风潮,从没有一种技术能如此快速的兴起,在很多人还没搞清楚是什么的时候,已经被许多公司广泛应用。
第三、 前端框架
经过了多年的积累,为了适应各种终端,前端框架终于迎来了春天。
架构优化实践
在这样的背景下,当当通过以下四个方面来适应变化,推进架构优化。
1.组织结构顺势而变
2.结合重构项目进行重点调整
3.日常需求把控方向形成共识
4.技术架构与业务架构并重
第一,对技术部组织架构进行调整。将原来的职能化组织中的产品、研发和测试部门按照产品线进行整合,转型为Unit化,以加强同一产品线不同职能团队之间的配合协作,沟通更高效,团队更为聚焦。
这样的组织结构更易于应用敏捷,与实施敏捷的前提同理,产品线拆分建立在系统架构解耦基础之上,在这一点上,系统架构与组织架构异曲同工且相辅相成。解耦越充分,系统边界越清晰,模块越小,越适合敏捷团队,能够快速响应业务需求。
业务相近的产品线组成一个产品研发部,这样多数的小型需求在部门内就可以解决,面对紧急项目还可以灵活使用人力资源,并为员工创造接触更多类型业务需求的机会。
第二,系统分层依赖,随着业务逻辑越来越复杂,系统越来越多,相互依赖也越来越多。
比如我的当当中就聚合了安全中心、用户、账户、订单、收藏夹、推荐等多维度的信息,需要调用多个系统服务。经过讨论,决定将用户交互层面的前端页面与原有的后端系统拆分,并入前端的产品线,以便为用户提供更好的服务。
而后端系统之间的依赖关系也需要更为精细的分层定义,如上图,对于促销系统,需要会员系统、订单系统、价格系统提供基础数据;对于运费系统需要商品信息和配货数据,而在精准定位销售区域的前提下,库存只是配货的基础数据,配货系统负责判断是否有货,Promise则根据配货结果计算预计送达时间。
调整系统之间的关系是很难的,牵一发而动全身,但重构是契机,2015年,对于电商的核心系统交易和促销进行了重构,同时价格、配货、运费等系统也进行了较大调整,从而使系统间依赖问题得到了明显改善。
第三,服务化
微服务为互联网行业的服务化指明了方向,也坚定了我们进行服务拆分和解耦的决心。
原有的架构以系统为维度,服务归属于明确的系统,而系统的划分一般以业务功能为聚合,随着业务的发展,新的业务功能层出不穷,总会有一些打破原有的系统边界,给架构提出难题。
服务化,不仅是指系统将能力通过服务对外提供,更重要的是服务本身就是承载业务功能的单元,如果有组合了多个逻辑难以归入某系统的服务,不必纠结,作为独立的业务模块开发就是了,以服务为单元,系统架构更加扁平,简单清晰。
微服务架构中,服务粒度会更小,服务治理的需求更加迫切,更需要技术手段解决,比如分布式服务框架,当当使用的是基于Dubbo二次研发的DubboX,以及结合ddframe实现的服务调用监控。
去年的容器技术爆发,为微服务架构实施提供了有力工具,当当内部也在部分系统使用了Docker。
微服务大势所趋,秉承SOA理念,在服务治理中心的基础上,将系统弱化,提供更多的基础服务,提高了系统的复用性和灵活性。
第四,平台化
平台化包括两个维度,技术平台化和系统平台化。
技术平台化是指在技术层面建立统一的体系,包括根据行业特点进行技术选型,使用稳定可靠的技术组件。
当当从2012年开始将原有的.net平台向Java平台迁移,从封闭到开源,应用电商行业的主流技术栈,到2015年,基本完成了技术转型,主要后端业务系统都转移到Java平台。
经过数年的积累,2015年当当架构部研发了Java应用开发框架ddframe,目的是分离技术和业务,封装技术细节,将应用开发人员的精力集中在业务开发上。
随后再接再厉,当当架构部又推出了用来替代TBSchedule的分布式作业调度框架Elastic-Job,并将之开源,基于JDBC的分布式数据库中间件Sharding-JDBC也在开发中。
统一的技术栈,能够复用技术资源,持续积累整体的研发能力,为做精做专提供更好的基础条件。
系统平台化是指搭建基础平台,包括测试平台、分布式服务平台、自动化运维平台、监控平台、缓存集群、消息中间件平台、大数据处理平台、项目管理系统、日志平台、问题跟踪系统等。
基础平台是各业务系统有机协作的基础,保证了整个技术架构的全面可控,能够降低系统运维复杂度,是大型电商系统不可或缺的组成部分,良好的基础平台是技术实力和管理能力的双重体现,而多数公司更注重业务,会在基础平台建设方面欠下许多技术债务。
2015年,当当搭建了自动化运维平台Pangu、监控平台Radar,重构了项目管理系统,Redis集群管理平台也在搭建中。
第五,核心系统重构
在电商业务发展的快节奏之下,核心系统持续迭代是常态,而且基本两、三年以上,就需要考虑重构,否则难以支撑业务的快速变化。
另外,系统重构集中梳理业务逻辑和系统依赖,整理统一的文档,剔除无用功能,归并多个版本,甩掉历史包袱重新设计架构,适度的前瞻性设计使系统在一定周期内具备业务扩展性。
2015年,当当完成了交易系统和促销系统进行了重构。
交易系统在2015年10月底完成新老版本切换。重构耗费约1500人天,重构代码17万行,全部切换至Java开源技术架构,为公司节约大量成本,并进行了架构优化,整体性能平均提升25%,经受住了双十一和双十二的考验。
在当当,有一些“类促销”业务,从广义上可以归入促销范畴,但业务与数据均不属于促销系统,在促销系统重构设计中,我们考虑将这类业务逐渐回收;另外,促销系统能不能承担一些营销的功能?带着这两点考虑,在促销基础上进一步抽象出活动模型。
促销系统重构上线后,使多渠道(终端)、多区域化营销成为简单易行的配置操作,显著提高了当当运营能力,当当双十一呈现出更多的可操作空间。
总结
综上所述,工欲善其事必先利其器,架构的优化和技术的进步为业务发展提供有力支持,为产品创新提供更多的可能性。提倡敏捷开发,架构的合理更为重要。
我们常说:“架构是由业务决定的,没有最好的架构,只有最合适的架构,架构不是规划出来的,是积累演化而来的。”
推进架构优化,不能松懈,要咬定青山不放松,重点是要做好沟通,在日常工作中贯彻始终,比如技术方案设计、讨论、评审、技术沙龙分享、项目复盘等等,清晰的共同目标能够减少内耗,激发工作积极性。
所以架构本身不是文档,不是蓝图,不是某个人说了就算,是此时此刻技术团队的一个共识,而且是不断调整的共识,是技术团队每一个成员的智慧结晶,是企业的技术核心竞争力。
《重新定义公司》中对共识有这样的定义:“共识”并不是指人人都必须同意,而是指共同达成对公司最有利的决策,并围绕决策共同努力。
不积跬步无以至千里,不积小流无以成江海,选择正确的方向,坚定的稳步前行,成就就在脚下。
本文基于2015年top100summit技术峰会分享内容整理。