「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

架构是一个共识:当当系统架构优化年终总结

2020 年 4 月 09 日

架构是一个共识:当当系统架构优化年终总结

随着移动互联网的进一步普及,网上消费购物比例不断提高,电商网站的系统规模随业务快速增长,承载每天数以万计的交易已经是主流电商网站的常态。不断膨胀的大型电商网站系统架构该如何进行优化,才能既满足业务需求,又进行技术方面的持续革新?


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%,经受住了双十一和双十二的考验。


在当当,有一些“类促销”业务,从广义上可以归入促销范畴,但业务与数据均不属于促销系统,在促销系统重构设计中,我们考虑将这类业务逐渐回收;另外,促销系统能不能承担一些营销的功能?带着这两点考虑,在促销基础上进一步抽象出活动模型。



促销系统重构上线后,使多渠道(终端)、多区域化营销成为简单易行的配置操作,显著提高了当当运营能力,当当双十一呈现出更多的可操作空间。


总结

综上所述,工欲善其事必先利其器,架构的优化和技术的进步为业务发展提供有力支持,为产品创新提供更多的可能性。提倡敏捷开发,架构的合理更为重要。


我们常说:“架构是由业务决定的,没有最好的架构,只有最合适的架构,架构不是规划出来的,是积累演化而来的。”


推进架构优化,不能松懈,要咬定青山不放松,重点是要做好沟通,在日常工作中贯彻始终,比如技术方案设计、讨论、评审、技术沙龙分享、项目复盘等等,清晰的共同目标能够减少内耗,激发工作积极性。


所以架构本身不是文档,不是蓝图,不是某个人说了就算,是此时此刻技术团队的一个共识,而且是不断调整的共识,是技术团队每一个成员的智慧结晶,是企业的技术核心竞争力。


《重新定义公司》中对共识有这样的定义:“共识”并不是指人人都必须同意,而是指共同达成对公司最有利的决策,并围绕决策共同努力。


不积跬步无以至千里,不积小流无以成江海,选择正确的方向,坚定的稳步前行,成就就在脚下。


本文转载自 IT 民工闲话 公众号。


原文链接:https://mp.weixin.qq.com/s/-lNA7TnT9aiOzZ8ir8gcwQ


2020 年 4 月 09 日 15:57533

评论

发布
暂无评论
发现更多内容

金融科技加速经济低碳转型 但面临政策、市场、技术等多方挑战

CECBC区块链专委会

架构实战营 模块六作业

netspecial

架构实战营

模块6作业 拆分电商系统为微服务

TH

架构实战营

这份神仙笔记覆盖了90%以上的大厂Java岗面试题

程序员改bug

Java spring 架构 编程语言

如何应对不好回应的沟通场景?

石云升

读书笔记 沟通 6月日更

四个决策树让你彻底掌握 HTTP 状态码

看山

HTTP 6 月日更

前端 JavaScript 之『节流』的简单代码实现

编程三昧

JavaScript 前端 js 防抖节流 代码实现

setTimeout(〒︿〒) 请原谅我一直以来对你的忽视

编程三昧

JavaScript 前端 定时器 基础知识

Dajngo网站开发---Task2

IT蜗壳-Tango

6 月日更

Three.js杂记(十二)—— VR全景效果制作·中

空城机

前端 前端进阶 three.js 6月日更

阿里内网资料泄露:多位大佬联合撰写的Java多线程手册被我拿到了

互联网架构师小马

Java 阿里巴巴 面试 多线程

模块6 学习总结

TH

架构实战营 模块六:课后作业

Ahu

架构实战营

备战618!分布式电商项目:天猫Java亿级高并发架构设计笔记

Java架构追梦

Java 阿里巴巴 架构 面试 亿级架构

经济日报刊评:数字人民币应用场景拓展

CECBC区块链专委会

电商系统微服务拆分设计

Lane

裸辞美团花两月吃透这Java岗798道真题解析,定级阿里P7

Crud的程序员

Java 程序员 架构 编程语言

手写一个简单的SpringBoot Starter

赵镇

🌏【架构师指南】分布式事务(XA)与一致性算法(Paxos、Raft、Zab、NWR)

李浩宇/Alex

ZAB raft协议 paxos协议 6月日更 6 月日更

太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)

云流

Java 程序员 架构 面试

现在后端开发都在用什么数据库存储数据?

Linux服务器开发

MySQL 数据库 中间件 后端开发 Linux服务器开发

双非渣本后端,三个月逆袭字节,入职那天“泪目”了

Java架构师迁哥

排序算法之冒泡排序

xcbeyond

排序算法 冒泡排序 6月日更

「SQL数据分析系列」8. 分组和聚合

数据与智能

数据库 sql 大数据 存储 计算

作为程序员,你会使用Notion吗?

Bob

程序员 Notion 笔记

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

云流

Java 程序员 架构 面试

Angular | 浅谈Angular错误处理方式

devpoint

angular.js angular 6 月日更

拆分电商系统为微服务

唐江

架构实战营

Redis入门一:简介

打工人!

数据库 nosql redis 6 月日更

模块6课后作业

方堃

堆与堆排序

Geek_571bdf

Java 数据结构 算法 堆排序 数据结构与算法

架构是一个共识:当当系统架构优化年终总结-InfoQ