当当网重构交易系统:从微软.NET 到 Java 开源技术架构的转变

2024-07-23
来源:网络整理

出自:书人云

近年来,由电商巨头定义的购物节越来越多,双十一、双十二更是成为举国同庆的大日子。然而,当我们把烦人的“小妖精”放进购物车,等待那美好一天到来时,电商企业却在兴奋又忐忑地准备着一年一度的大考。

为了迎接去年的双十一,当当对已有的交易系统进行了重构。当当在2015年双十一之前就完成了新旧交易系统的切换,从微软.NET技术框架改为Java开源技术架构。我们知道交易系统是顾客购物过程中最重要的一环,其主要任务是完成获取购物车中的商品信息、拆分订单、计算促销、计算配送、计算运费、使用非现金支付、生成订单等操作。交易系统聚合了各种业务逻辑,计算非常复杂,响应速度直接影响购买转化率,是电商最敏感的核心系统。当当在重构如此重要的系统时,考虑到了哪些因素,总结出了哪些可以给人启发的经验?

当当网订单支付结算部负责人王胜军指出,系统重构的原因和选择路径,并没有固定的套路,“选择哪种技术,完全由公司业务驱动,不能为了技术而使用技术。”

具体对于当当网而言,将交易系统由微软技术架构转至Java开源技术架构主要有四个原因:第一,经过五年多的运营,维护成本急剧上升;第二,业务日益复杂,老旧的架构无法应对,功能扩展困难;第三,微软技术体系每年要花很多钱购买服务;第四,公司技术转型全面拥抱Java。

当当交易体系的重构包括PC结算、移动及数字阅读结算、小版结算、对外服务和运营五大部分。

王胜军指​​出,电商企业在系统重构时,需要特别注意几点。第一是代码的正确性,即重构的代码必须正确。第二,重构系统时,要尽量减少对上下游相关系统的影响;第三,新系统上线过程要平稳,不能影响用户订单。

考虑到以上几点,当当对系统进行了拆分,分批进行重构,同时采用在线并行比对方案,将新交易与旧交易系统进行比对,确保逻辑正确。比对之后,当当开发了分流功能,根据用户ID进行分流。正式分流前,对测试白名单中的用户进行预验证,预验证通过后,逐步由低向高切换。

新系统开发出来后,肯定不能直接上线,让用户试错。电商需要对比新旧交易的计算结果,把新交易和旧交易系统对比,确保它的逻辑正确。据王胜军介绍,当当网新交易系统是在2015年6月底开发完成的,之后对比了两个多月。“刚开始对比成功率很低,对比成功率达到100%的时候,我们才敢谈上线。”

用户请求到达旧交易系统;根据条件,将部分请求数据复制一份,发送给调用服务的新交易系统;新旧交易同时计算,结果分别存入各自数据库,但只对旧交易结果开放给用户;将新旧计算结果进行比对。这样,在不影响线上环境的情况下,达到了比对的目的。

比对完毕之后,新系统能不能对用户开放呢?还是不能,因为比对毕竟是模拟订单,并不能保证真实的订单能100%正确。

所以在比对之后,必须进行分流,只有分流完成后,才能停止旧的交易。

当当网支付手段_当当网支付方式_当当支付方式网上支付

整个导流过程从9月份持续到11月份,通过比价系统和导流系统,当当网推出了新的交易系统。

新交易系统上线后,流量由分流系统承担。也就是说,终端用户发过来的请求会先进入流控系统,流控系统会选择性地把一些东西发到旧交易系统和新交易系统(很少)。这样,新旧交易系统就能同时对外提供服务了。一开始只会把内部白名单系统分流到新交易系统,内部测试通过后,才能分流到外界。当当网按照0.5%的比例进行验证。后期,新系统处理的请求比例会逐渐增加,直到最后,所有系统都分流到新系统。

从上图可以看出,当当网把流控系统放在老的交易系统中,是为了不影响上层系统的运行。这也呼应了上文提到的开发原则,即在系统重构的时候,尽量减少对上下游系统的影响。

新的交易系统可以边运行边配置,基本不影响对外提供服务的能力。各自加载两台应用服务器。灰度发布时,改为只加载一台应用服务器,另一台可以部署。用户请求不会导向到正在部署的服务器上,因此不会影响用户订单。

集中配置模式,一点配置,所有实例可见,更易于管理,并且配置修改后,通过热加载立即生效,快捷方便。原有交易系统配置修改后,必须重启系统才能生效。

新系统的其他特点如下:

• 日志集中搜索

• 交易操作工具

• 诊断系统

• 高可用性交易(正在建设中……)

• 通用流量控制系统(正在建设中……)

王胜军总结称,当当网交易系统重构代码17万行,切换到Java开源技术架构,几十个后台操作,对外开放了几个API,这次重构为公司节省了大量成本,优化了架构,整体性能平均提升了25%。

分享