PCon全球产品创新大会(北京站)来啦~了解最新日程 了解详情
写点什么

王海亚:淘宝交易系统演进之路

  • 2014 年 6 月 25 日
  • 本文字数:2687 字

    阅读完需:约 9 分钟

淘宝的交易系统承载了购物车、下单、订单管理等多项淘宝的重要业务,随着淘宝业务量的不断上升,交易系统也随之几经改造。InfoQ 此次专访了阿里巴巴架构师王海亚,另外作为 ArchSummit 深圳 2014 大会《电商,各走各的路》专题的讲师,王海亚将会分享淘宝交易平台的架构演变及并行化实践。以下为专访全文:

InfoQ:淘宝的交易系统,主要承载了哪些业务?

王海亚:从用户视角来看,交易承担了购物车、下单、订单管理这些功能;从功能视角来看,交易系统包括做业务规则和服务整合的交易平台以及支撑交易功能的底层服务,服务包括商品、优惠、库存、订单、物流等,业务规则主要是确定在不同的购买场景如何使用底层服务的不同功能,比如什么样的购买要走付款减库存,什么样的购买要走预售模式的价格体系和支付体系,什么样的购买要限制使用积分等等。

InfoQ:请您简单介绍下交易系统的架构演进过程。

王海亚:个人把交易系统的演化分成三个阶段,第一个阶段是单应用阶段,那个阶段淘宝的业务比较简单,业务量也比较少,交易系统相对还是很简单的,当时的交易系统只有一个应用,囊括了商品、优惠、物流、订单等功能,一个小的开发团队就能够完成交易系统的开发维护工作。

随着承载的业务越来越多,交易系统变得越来越复杂,需要投入越来越多的开发来维护这个系统。人员规模上去之后,内部沟通的成本、代码管理的越来越高,大家都针对一个代码库做更新,很难保证非常好的功能模块设计,经过持续的代码累积,满足业务需求并行开发越来越难。后来提出了服务化改造,从原来的单一应用中逐步做功能剥离,拆分出多个系统,每个子系统负责不同的功能,由不同的团队维护。交易系统的架构进入第二个阶段,交易系统采用分布式架构,存在多个后台服务系统,多个前端应用。商品、优惠、库存等功能逐步沉淀成纯粹的后台服务系统,原来的交易系统作为前端应用存在。由于组织结构的原因,当时是存在几个交易前端应用,比如说当时的商城也就是后来的天猫,无线团队等等,因为前端内容的差异,都有自己独立的前端应用。

服务化改造之后,从某种程度上缓解了第一代架构的缺陷,但是新的架构在落地过程中还是存在一些问题,比较突出的有两个问题,一是由于功能是从原有单核应用中剥离出来时,缺乏一个明确的功能边界定义,对业务规则和功能的识别没有统一的标准,导致业务规则和功能存在紧耦合,同一个业务的业务规则一部分在前端应用中,一部分在后端服务系统中,业务规则变化又比较快,任何一次规则变化都要涉及到多个团队做配合实施,沟通协调的成本比较大;另外一个问题是由于多个前端应用,前端应用做的比较重,业务逻辑都要在多个前端应用中重复实现,除了开发的人力浪费之外,也引发了很多由于落地节奏不一致导致的业务问题,即使耗费大量精力做沟通协调也无法完全避免此类问题。

在新的系统架构中,对业务规则和功能做了明确的识别,通过集中式的业务规则控制以及功能定制化机制,实现业务规则和功能的完全解耦,多数情况下业务规则变更不会引发后台服务系统的变更,后台服务系统的功能增加也能做到对前端应用的透明。另外在前端应用中引入新的编程框架,通过框架做纯粹的服务整合就能组织出要给用户披露的信息。前端做轻之后,针对不同终端提供统一的业务服务,或者针对不同终端根据单页需要披露的内容来做不同服务的整合,成本都降低很多。

InfoQ:没有改造之前的交易系统,大概遇到了哪些问题?

王海亚:问题主要可以分成三类,第一类问题是业务快速落地很难,由于交易的业务规则变更很快,通过 casebycase 代码修改,系统中功能与功能之间的耦合越来越多,系统维护成本越来越高。另外业务规则散布在多个前端应用和后端服务系统中,经常由于各个系统的规则不一致或者上线节奏不一致导致业务故障。第二个问题是系统接入的成本很高,由于业务的需要,会引入越来越多新的服务系统提供对应的功能,这些服务都是在一个前端系统中做服务的整合,一个点的不稳定或者性能瓶颈,都会影响整个系统的稳定及用户体验,想通过小成本的尝试来做业务创新的验证成本非常高。第三类问题是前端应用比较重,业务逻辑主要存在于前端应用中,前端应用的页面逻辑和后台逻辑职责边界又不是特别清晰,导致前端应用的开发成本非常大,另外又存在多个前端应用,业务逻辑的一致性很难保证。

InfoQ:新的交易系统是如何解决老系统的问题的?

王海亚:总结来说,可以从 7 个点来讲。

第一,通过服务治理,把业务规则从原有功能中剥离,明确各个服务所提供功能的完备性及独立性,从系统边界上确保功能之间无耦合。

第二,通过集中式的业务规则管控,保证交易全链路的业务规则统一及业务规则灵活可配置。

第三,通过标准化的交易框架及组件化设计,保证服务在交易平台快速接入。

第四,通过异步并行及容错,提升系统响应速度,减少单点服务故障导致的整体不稳定。

第五,通过开关及预案机制,保证代码的兼容性发布,业务降级容错。

第六,通过流量管控,防止雪崩,保证在正常情况或者某个服务集群能力波动时,整个交易系统不被压垮。

第七,通过在前端应用中做前后端解耦,通过约定的数据模型,前端开发只负责页面展示和交互,实现前端、后端的并行开发,也使得不同终端的自适应可以以较低成本实现。

InfoQ:新的交易系统是如何应对交易洪峰的?

王海亚:由于交易的调用链路比较长,从 Web 服务器到执行链路中的各个服务系统,包括缓存、DB 等存储系统,请求都是以队列的方式被处理。各个系统如果没有处理好容量控制,就会导致请求的堆积,对外呈现的就是响应时长增加。

在处理链路比较长的情况下,这种异常会被放大,链路后面的一个点发生堆积,前面的各个点也会逐步出现堆积。页面应用又是一个用户强交互类型的应用,如果用户发现慢就会刷屏,而后面的系统无法感知接下来要处理的请求是否是有效的请求,这种情况下可能会导致整个网站的瘫痪。我们目前是在前后端应用中都引入流量管控机制,主动拒绝超出自己处理能力之外的请求,保证每个应用都不会被压垮,有多少能力就能把多少能力提供出来。

另外在前端应用处理流控时,主动引导用户到低成本 / 静态化的页面上,增强用户体验,也能提高网站其它部分的曝光率。整个流量管控体系,除了应用框架的能力之外,还有一些配套的机制,比如自动化压测系统、容量计算公式、自动化扩容 / 下线等,整个一套体系,确保我们轻松应对交易洪峰。

ArchSummit 全球架构师峰会即将于 7 月 18-19 日在深圳举行,此次会议重点解析九个当前最受关注的领域,包括:SNS、 移动互联网、 金融、 大数据、 智能硬件、 游戏、 云计算、自动化运维、电商等专题。目前正在火热报名中,感兴趣的读者可以访问网站主页了解更多信息。

2014 年 6 月 25 日 08:3711945
用户头像
郭蕾 关注我视频号:极客时间小盖

发布了 219 篇内容, 共 120.1 次阅读, 收获喜欢 164 次。

关注

评论

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

C++ 动态新闻推送 第34期

很水

【高并发】不得不说的线程池与ThreadPoolExecutor类浅析

冰河

Java 并发编程 多线程 高并发 异步编程

四大研究成果入选 百度安全在Black Hat Europe 2021再创历史

百度安全

应用安全 百度安全 Black Hat 漏洞利用 恶意软件

Alibaba Druid 源码阅读(五)数据库连接池 连接关闭探索

数据库

区块链之共识算法系列——PoW(二)

Regan Yue

区块链 11月日更 趣讲区块链

C++ 动态新闻推送 第37期

很水

c++

Android C++系列:JNI引用管理

轻口味

c++ android 11月日更

C++ 动态新闻推送 第36期

很水

c++

接口调用的链路

卢卡多多

接口 11月日更

研发提效:通过设计稿自动生成前端代码。

石云升

大前端 自动生成 11月日更 研发提效

C++ 动态新闻推送 第35期

很水

JPEX 踏入足球領域 | 与西部联队成黃金伙伴

股市老人币圈新

用OpenVINO对图像进行分类

IT蜗壳-Tango

IT蜗壳 OpenVINO 11月日更

阿里灵杰产品全面拥抱云原生,双11优惠让企业体会上云便利

阿里云大数据AI技术

大数据 AI 云原生 阿里灵杰

Alibaba Druid 源码阅读(一) 数据库连接池初步

数据库

12 K8S之应用容器及Pod资源

穿过生命散发芬芳

k8s 11月日更

JPEX 踏入足球領域 | 与西部联队成黃金伙伴

股市老人币圈新

Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索

数据库

浏览器存储之 localStorage 和 cookie

devpoint

Cookie LocalStorage sessionStorage 11月日更

数据库自增ID用完了会怎样

喵叔

11月日更

Alibaba Druid 源码阅读(三) 数据库连接池初始化探索

数据库

无AI的五子棋Vue项目

空城机

JavaScript typescript 大前端 11月日更

sonar 使用常见问题总结

liuzhen007

11月日更

Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

不脱发的程序猿

Python qt GUI设计 窗口布局管理方法

JDK还是Google,正则表达式引擎孰优孰劣?

后台技术汇

正则表达式 11月日更

模块三-学生管理系统架构设计文档

迪马

C++ 动态新闻推送 第33期

很水

🏆【Alibaba中间件技术系列】「RocketMQ技术专题」帮你梳理RocketMQ或Kafka的选择理由以及二者PK

浩宇天尚

kafka RocketMQ 消息队列 11月日更

Alibaba Druid 源码阅读(四) 数据库连接池中连接获取探索

数据库

【Promise 源码学习】第五篇 - 实现 Promise 对异步操作的支持

Brave

源码 Promise 11月日更

Go语言,面试官问我go逃逸场景有哪些,我???

微客鸟窝

Go 语言 11月日更

TDSQL前沿技术进展和趋势——数据异常基础理论研究

TDSQL前沿技术进展和趋势——数据异常基础理论研究

王海亚:淘宝交易系统演进之路-InfoQ