作者:王胜军,当当网交易系统开发经理!
来自:数人云

近年来电商巨头定义的购物节变得越来越多,双十一、双十二已然成为举国同庆的大日子。然而,当我们把一件件磨人的“小妖精”放进购物车等着那个美丽日子的时候,电商们则怀揣着兴奋又焦虑的心情备战自己的年度大考。

为了迎接去年的双十一,当当网对固有交易系统进行了重构。当当网在 2015 年双十一前完成新老交易系统的切换,从微软.NET 技术框架全部变为 Java 开源技术架构。我们知道,交易系统是客户购物流程中最重要的环节,主要任务是完成购物车中商品信息获取、拆单、促销计算、配货计算、运费计算、非现金支付的使用以及生成订单等操作。交易系统聚合各方面业务逻辑,计算非常复杂,响应速度直接影响购买转化率,是电商最为敏感的核心系统。对如此重要的系统进行重构,当当网出何考虑,又总结出哪些可以给人启示的经验呢?

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

具体到当当网来说,将交易系统从微软技术框架转移至 Java 开源技术架构主要有四个原因:第一,运行 5 年多,维护成本水涨船高;第二,业务日趋复杂,老架构力不从心,功能扩展艰难;第三,微软技术体系每年要花费大量成本购买服务;第四,公司技术转型全面拥抱 Java。

当当网交易系统此次重构的内容包括五部分:PC 结算、移动端 & 数字阅读结算、小版本结算、对外服务和作业。
王胜军指出,电商在重构系统时有几点需要特别注意,首先就是代码的正确性,也就是说,必须保证重构的代码是正确的。第二,在重构系统时一定要最小程度的影响上下游关联系统;第三,新系统上线的过程必须时平滑的,不能影响用户下单。出于对以上几点的考虑,当当网把系统进行了拆分,分批重构。同时,使用线上并行比对方案,根据老交易系统比对新交易,保证逻辑正确。比对之后,当当网开发了分流功能,按照用户id分流,正式分流前,先使用测试白名单中的用户进行预验证。预验证通过后,再按比例由低至高逐步切换。
当新系统开发完成之后,直接上线让用户去试错肯定是不行的,电商需要将新老交易计算结果进行比对,根据老交易系统比对新交易,保证其逻辑正确。据王胜军介绍,当当网的新交易系统在 2015 年 6 月底就开发完了,之后进行了两个多月的比对,“最开始比对的成功率非常低,当比对成功率达到 100% 时,我们才敢谈上线的事情。”用户请求到达老交易系统;根据条件将部分请求数据复制,发送至调用服务的新交易系统;新老交易同时计算,结果存入各自的数据库,但只有老交易结果对用户公开;对新老计算结果进行比对。这样,既实现了比对目的,又不会影响线上环境。比对完之后能不能将新系统开放给用户呢?仍然不能,因为比对毕竟是模拟下单,真实下单能不能 100% 正确并不能保证。因此,在比对之后还要进行分流,分流完毕后,老交易才可以停止使用。整个分流从 9 月份一直进行到 11 月,通过比对系统和分流系统当当网实现了新交易系统的上线。在新交易系统上线之后,分流系统会承担流量。也就是说,终端用户发出的请求首先会进入流控系统,流控系统有选择地把一些东西发到老交易系统和新交易系统中(很少)。这样,新老交易系统就可以同时对外提供服务。最开始,只有内部白名单系统才会分流到新交易系统,而通过内部测试之后,就可以对外分流了,当当网是以万分之五的比例来进行验证的。再往后,新系统处理的请求比例就会逐渐增大,直至最后,所有的系统分流到新系统。从上图可以看到,当当网将流控系统放在了老的交易系统里面,这是为了不影响上层系统的运作,而这也呼应了前面提到的开发原则,那就是在重构系统时尽量少的影响上下游系统新交易系统借助了 Nginx 在运行状态下可以 reload 配置,基本不影响对外提供服务的能力。每个 Nginx 负载两台应用服务器,灰度发布时,将 Nginx 配置更改为只负载一台应用服务器,即可对另一台进行部署。用户请求不会导向正在部署中的服务器,从而不影响用户下单。集中化配置方式,一点配置,所有实例可见,更易于管理,而且配置修改后,通过热加载方式,立刻生效,快速便捷。而原有交易系统修改配置后,必须重启系统才能生效。新系统其它特色如下:• Log 集中搜索• 交易运营工具• 诊断系统• 高可用交易 (建设中…)• 通用流量控制系统 (建设中…)王胜军总结道,当当网此次交易系统重构代码 17 万行全部切换至 Java 开源技术架构,几十个后台作业,对外提供数个 API。此次重构为公司节约了大量的成本,并进行了架构的优化,使整体性能平均提升了 25%。

长按订阅更多精彩▼

如有收获,点个在看,诚挚感谢

重构当当网交易系统!相关推荐

  1. 疯狂android讲义第4版光盘_卧槽!当当网又又又可以 4 折买书了!!跟我一起薅羊毛了!...

    囤书囤书 我们一起阅读经典,紧跟前沿技术不掉队 这次继续给爱读书的你们最大的优惠力度 当当网自营图书大促 >> 每满100减50  << 满200减100 满300减150 满 ...

  2. 当当网---你怎么了?

    近几日,我们刚出的新书重构与模式一直迟迟未在当当网上架,包括第二书店都受到牵连,一直处于缺货状态,又过了几天才发现,整个人邮社的图书都被下架,处于缺货状态,这才知道,原来有原因的. 因为当当网七周年店 ...

  3. 【双11“超级工程”】当当网:细节决定成败——运维人双十一怎么过?

    点击蓝色字关注 "数据库技术大会" 一起玩耍哦~ 作者 | 徐莹 编辑 | 赵钰莹 卷首语 每年双十一,不仅是剁手族的狂欢节,更是各大电商技术团队技术水平与技术创新实践检验的舞台, ...

  4. 当当网双11超级工程:运维人双十一怎么过?

    每年双十一,不仅是剁手族的狂欢节,更是各大电商技术团队技术水平与技术创新实践检验的舞台,不断创新高的销售额.交易峰值.支付峰值,这些惊人数字的背后都离不开强力的技术支撑.IT168希望通过技术报道的形 ...

  5. jQuery - 当当网我的订单页

    <!DOCTYPE html> <html> <head lang="en"><meta charset="UTF-8" ...

  6. 当当网强烈谴责李国庆有关刘强东案言论

    雷帝网 乐天 12月24日报道 当当网今日发布声明,称李国庆是当当网联合创始人,他离开当当网管理层.决策层已有一段时间. "李国庆先生的言论是他的个人观点,当当网已经要求李国庆将当当logo ...

  7. 美媒评全球十家增速最快IT办事公司 当当网居首

    网易科技讯 2月27日动静,美国财经网站Cnanalyst周六评选出全球收益增速最快的十支IT办事行业股票,评选结局根据华尔街券商分析师对各支股票的每股收益年均增长率的预计.当当网.百度和文思信息三家 ...

  8. 在当当买了python怎么下载源代码-爬虫实战一:爬取当当网所有 Python 书籍

    图片来自 unsplash 我们已经学习 urllib.re.BeautifulSoup 这三个库的用法.但只是停留在理论层面上,还需实践来检验学习成果.因此,本文主要讲解如何利用我们刚才的几个库去实 ...

  9. 在当当买了python怎么下载源代码-Python爬取当当网APP数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于AirPython ,作者星安果 目标 场景:有时候通过传统的方法去 ...

最新文章

  1. Git + BeyondCompare
  2. 为Apache动态增加模块
  3. 关于开发人员数据库权限配置以及规范数据库升级流程
  4. 剪切板与正则表达式测试
  5. C#调用dll提示试图加载格式不正确的程序解决方法
  6. 用曼哈顿距离来巧解---输出菱形的问题
  7. vue js 定义对象_JS标准内置对象Proxy及Vue中的proxy.js文件
  8. 前端学习(1545):模型和控制器
  9. 在Linux中查看ftp状态,linux中ftp常见操作启动ftp状态,终止ftp会话
  10. Cardboard:虚拟现实怎样在国内最容易普及
  11. 《设计模式详解》创建型模式 - 单例模式
  12. 2017 科技大事件回顾:智能音箱大战、数据泄露于内贼
  13. QTP自动化测试从零基础到精通进阶(脚本测试、VBS语法、描述性编程、测试框架)...
  14. 内网穿透工具NatApp使用教程
  15. Qt QListView QStringListModel用法详解
  16. 3-产品经理学习笔记之产品经理的工作职责和能力模型
  17. 【vulnhub】---DC-6靶机
  18. 国开网电大 动物常见病防治 形考任务1-5
  19. ui设计现状与意义_UI设计师的前景与现状?
  20. 线性规划 - 数学建模

热门文章

  1. 【算法笔记】莫比乌斯反演(包含定理,两种形式的证明及入门经典模板)
  2. win7变成xp风格了怎么改回_揭秘:干掉了win7!为何win10屡被吐槽它却“永世留芳”?...
  3. matlab shortest函数,MATLAB函數graphallshortestpaths不返回對稱矩陣
  4. GO基础编程-自定义函数
  5. 在北京做Java开发如何月薪达到两万,需要技术水平达到什么程度?
  6. R语言 、Excel哪个更能胜任数据分析?
  7. springboot+kafka(ip地址瞎写的)
  8. 设计模式六大原则(5):迪米特法则
  9. Juniper SSH防护
  10. DevOps之旅:运维人员阅读源代码的实用技巧