关于后端:vivo-全球商城架构演进之路

3次阅读

共计 4615 个字符,预计需要花费 12 分钟才能阅读完成。

本文讲述 vivo 官网商城从单体利用到具备综合能力电商平台的演进,零碎架构往服务化、中台化的变迁历程。

一、前言

vivo 官网商城,是 vivo 官网的线上电商平台,主营 vivo 手机及专属配件。通过几年倒退,曾经实现了从单体利用到具备综合能力电商平台的演进,整体零碎架构也逐渐往服务化、中台化变迁。咱们在这条零碎架构降级的路线中,实际出了一些零碎架构教训。

通过本篇文章,能够让对电商感兴趣的小伙伴们,更为全面地理解最根底的电商业务模式,理解电商体系具备的技术和架构,理解零碎在不同期间的架构演进。

二、架构变迁史

“冰冻三尺,非一日之寒”。任何一个电商零碎的架构降级,都不是欲速不达的,都须要一个稳步发展的过程,不同阶段业务倒退的状态和体量决定着零碎架构。上面从一张图开始,给大家形容下商城近几年架构变迁的历史。

(图 1.1 vivo 官网商城架构变迁历程)

2015 年之前,vivo 官网商城是外包我的项目,采纳了市面上比拟成熟的 ECStore(企业级开源网上电商零碎)电商产品作为零碎根底,主语言是 PHP。

我的项目版本就是在此基础上进行二次开发迭代。

和大多数电商平台晚期的倒退一样,满足疾速部署、疾速上线。

同时弊病也很显著:

  • 性能很差,根本无法撑持稍大一点的经营流动。当有新品、大促流动,零碎负载高,业务根本处于不可用状态,无奈满足经营流动需要。
  • 需要沟通效率,研发效率低下,外包研发、产品异地办公,需要沟通艰难。
  • 外围我的项目受制于人,vivo 官网商城必须把握在本人手中。

为了解决这些问题,架构迫切需要降级、零碎须要重构。

2.1 商城 v1.0 单体期间

2015 年 5 月,vivo 官网商城正式启动重构打算。vivo 启用本人的研发团队,指标很明确,自研一套属于本人的 vivo 官网商城,为用户提供更好的购物体验。

在 2016 年 1 月,属于咱们本人的 vivo 官网商城正式上线了。

商城 v1.0 以支流的 Java 作为开发语言,采纳经典的 MVC 框架,开发出了一个囊括了各个业务模块的单体利用,整体业务模块如下图所示:

(图 2.1 商城 v1.0 零碎架构)

相比之前,这次重构最重要的指导思想就是“分层”。

业务上对各个模块进行逻辑分层。划分出了 商品模块、订单模块、营销模块、结算模块等等,使得代码逻辑更为清晰。

架构上也进行分层解耦:

  • 【体现层】– 最贴近用户的一层,次要用来解决数据展现逻辑并渲染数据;
  • 【服务层】– 负责体现层与数据层之间的业务逻辑;
  • 【数据层】– 负责数据的落地存储,存储介质应用罕用的 Mysql 和 Redis;

单体利用的期间,vivo 官网商城业务倒退尚处于初期,业务复杂度不高。首页、商详页、结算页逻辑比较简单轻量。

v1.0 的架构齐全可能满足撑持日常的新品及流动经营,且版本迭代更为疾速。相比于 ECStore 性能晋升了至多两个量级,所以商城 v1.0 的重构十分胜利。

2.2 商城 v2.0  服务化

官网商城 v1.0 架构降级之后,安稳地度过了一段时间。近两年,vivo 手机产品越来越多,线上业务开始迅猛发展。

随之而来的是用户量级的快速增长,商城 v1.0 的单体架构弊病也逐步裸露:

  • 飞速增长的用户拜访流量让性能再次出现瓶颈,单体的数据库和 Redis 难以抵御。
  • v1.0 架构对业务模块进行了分层,分层仅限于代码模块级别的拆分,没有从物理上进行隔离,单体利用愈发臃肿。
  • 所有研发保护同一套代码,我的项目工程保护变得艰难。疾速迭代的版本让模块之间分层的界线变得含糊,代码腐化重大,开发效率变得低下。

基于以上问题,咱们开始基于业务模块进行垂直的零碎物理拆分。新的零碎架构采纳支流的 SOA 架构(Service Oriented Architecture,即面向服务的架构)。

商城 v2.0 从 2017 年开始,以服务化为外围稳步进行拆分独立。咱们得保障既有的业务不受丝毫影响的状况下独立模块,有人形容这个过程为“高速换轮胎”,动作稍有不慎,对系统来说都是致命的。

最终在花了近一年半的工夫,咱们实现了流动、商品、订单、优惠券四大外围零碎的拆分。拆分进去业务线开始各司其职,提供服务化的能力,独特撑持主站业务。

(图 2.2 商城 v2.0 零碎架构)

上面将介绍各个系统拆分的整个过程。

2.2.1 流动零碎独立

官网商城作为 vivo 的惟一线上官网渠道,承载着所有新品的线上流动需要。每次的新品发布会,都是由商城零碎负责实现。大量频繁的流动需要,引起频繁的商城版本变更、上线,引发咱们的思考。

相比电商的外围交易链路,流动零碎自身比拟独立,不应与主线交易耦合在一起。因而在 2017 年年中,将商城中的专题页配置,新品发布会,抽奖,预约性能剥离进去,独立出了商城流动零碎。

2017 年 8 月,流动零碎独立上线。新的流动零碎开始承接新品、大促等各种促销流动需要。随着流动零碎一直迭代倒退,目前曾经成为电商平台一个重要组成部分。

2.2.2 商品零碎独立

商品零碎是撑持整个电商平台的外围,是电商零碎中最重要的组成部分。商品连贯着用户和平台,通过商品的详情页能够完满地向用户展现产品内容,诠释产品外延。

商城 v2.0 服务化,商品是这次整改的重点。

咱们在思考 v1.0 架构带来系统性问题的时候,也开始思考如何通过这次拆分来对应将来的业务增长。商城 v1.0 商品模块亟待解决的问题:

  • 商品的品类创立受限,只有垂直类的手机和配件,无奈反对全品类。
  • 商品不反对店铺、品牌维度,比拟繁多。
  • v1.0 商品模块的查问性能低下,单实例 Redis 无奈满足高性能、高可用。
  • 历史 v1.0 商品接口和模型曾经渗透到各个模块,残缺地剥离进去比拟艰难。

商品零碎的独立是带着以上的问题和思考进行的,大的指标是划清业务边界,彻底和商城解耦。咱们心愿拆散后的商品零碎可能更好、更疾速地承接将来全品类的扩大,全面服务化。为进一步服务好商城主体业务夯实根底。

2.2.3 优惠券零碎独立

优惠券是业界内罕用的营销伎俩之一,每到大促、节假日、新品,都会发放大量的优惠券。与内部广告商单干、内购福利、保值换新等也以优惠券的模式承载。

随着营销流动力度加大,优惠券应用场景增多,优惠券零碎问题也逐步裸露:

  • 海量优惠券的发放,达到优惠券单库、单表存储瓶颈。
  • 与商城零碎的高耦合,也间接影响了商城整站接口性能。
  • 针对多品类优惠券,技术层面没有积淀通用优惠券能力。

优惠券零碎独立须要解决的就是以上问题,独立后优惠券存储能力晋升,撑持将来 5 年内的优惠券发放量级。整体发券接口性能也失去晋升,发券由原来的异步发券、异步到账,优化到同步发券、实时到账。同时提供平台级优惠券能力,面向全公司业务,提供通用的优惠券营销能力。

2.2.4 订单零碎独立

订单零碎也有与优惠券同样的问题,随着用户量级的爆发式增长,性能问题逐步裸露:

  • 数据一直累积,快要达到单表存储瓶颈,导致订单的查问和批改速度很慢。
  • 单机 MySQL 解决能力无限,并发量上来时间接拖垮整个商城的所有业务。

订单零碎的独立,首次引入了 ES,Sharding-JDBC 等技术组件,解决数据量和高并发的痛点。订单零碎上线后,无论是订单的存储量级还是下单的并发量级,都进步了不止十倍,至多满足将来 5 年的业务高速倒退。

至此,商城外围零碎拆分实现,各零碎提供对立标准化服务,具备更纯正的业务根底能力,与商城主站解耦,迭代效率大幅晋升。

2.3 商城 v3.0  业务零碎拓展

商城 v3.0 是针对商城业务疾速倒退,进行的业务零碎欠缺。

这一阶段因为商城业务渠道一直扩大,促销玩法一直增多,商城衍生出很多独立的业务子系统。其中蕴含 代销零碎、CPS 零碎、促销零碎3 大业务零碎。

(图 2.3 商城 v3.0 零碎架构)

2.3.1 代销零碎:商城与代销商品纽带

为了丰盛本身的商品品类,撑持起更多的经营玩法,咱们开始摸索代销的业务,尝试对接品类优质的平台方。很多平台方也都支持系统对接,采纳以销定采的销售模式。

代销零碎就在此背景下诞生了。咱们心愿代销零碎可能成为内部平台方和 vivo 商城之间的“粘合剂”,并可能提供以下的次要性能:

  • 反对两个平台商品数据模型的转换,反对局部信息二次编辑,更加本地化。
  • 实时同步平台方商品库存、价格、订单正逆向信息的同步。
  • 反对 vivo 商城用户的商品浏览、以及下订单服务,满足用户购物的完满体验。

代销零碎是咱们对接内部零碎,引入内部商品售卖的一次尝试。代销的通用能力被咱们齐全积淀了下来,可能继续撑持后续其余平台商品接入。

2.3.2 CPS 零碎:商城返利平台

CPS 零碎的定位是 vivo 官网商城体系下的推广返利平台零碎。商城的业务一直扩大,商城的业务群体也开始向外拓展。次要针对一些带货能力强的大 V 以及一些内部推广平台,以返佣的模式,最大限度施展其带货能力。

随着用户群体以及推广平台接入,CPS 零碎逐步积淀一些根底能力,目前反对 toB、toC 通用接入能力。

2.3.3 促销零碎:商城营销百花齐放

促销零碎是商城的促销核心,承载着商城所有的营销玩法。

促销零碎的独立,源于商城 v2.0 架构无奈满足一直减少的流动玩法,它解决了商城原有促销的以下痛点:

  • 繁冗的流动堆砌,没有严格流动优先级关系。
  • 新的流动需要的退出,改变量和影响点范围广,无奈精确评估。
  • 促销性能无奈满足流动量级,往往会影响商城主站的性能。

促销零碎独立,与商城解耦,提供纯正的商城营销流动玩法。促销零碎还包含:商品计价与商品价格监控根底能力。

三、国际化

随着经济全球化日益加深,国产品牌纷纷布局海内,印度作为海内最大繁多市场,领有非常广阔的市场前景,适应当地市场的需要,上线印度版官网商城提上日程。

2017 年 12 月,印度 vivo 官网商城正式上线经营。

印度官方语言共有 22 种,目前已登记的语言超过 1600 种,反对多语言是国际化过程中首要课题。传统的 i18n 计划,可能解决根本的文案配置问题,然而我的项目须要走公布流程,保护老本十分高。

多语言文案零碎标准化了文案需要的提出、翻译、测试、公布等流程,极大地晋升了公布效率和文案品质。

(图 3.1  多语言文案核心)

2020 年 11 月,泰国 vivo 官网商城也正式上线经营。

与国内电商相比,海内电商业务须要笼罩多个国家 / 地区,每个地区都有本人的语言、时区、货币等等,如何应用一套代码同时反对多个地区,是咱们必须要面对并且解决的问题。

通过 3 年工夫的摸索和打磨,咱们打造出了一套通用的全球化解决方案,包含多语言文案零碎、多时区通用组件、多国家隔离框架、多机房域名部署计划等等,曾经可能较好的撑持以后业务的倒退须要。

(图 3.2  多时区通用组件)

(图 3.3  多国家隔离框架)

上述计划,形象公共配置的思维以及相应的隔离技术点,即便是在非国际化场景中,也具备较大的参考价值。

海内市场复杂多变,语言文字、文化差异、地区规范、法律法规等不尽相同,地区倒退阶段和基础设施成熟度也有较大差别。

挑战与机会并存,咱们既要全力撑持业务倒退,也要优先实现合规整改要求;咱们既要提炼一套通用的国际化架构,也要满足本地化定制需要;咱们既要正当利用发达地区高网速,也要兼顾欠发达地区页面加载性能优化。

“more local more global”,随着全球化过程的加深,咱们会持续锻炼全球化架构,锻造出更加强壮的国际化 / 本地化产品。

写在最初,本篇次要是简要的介绍 vivo 官网商城这 5 年来的一些大的架构历史变迁,不做过多的技术解读。

这里的介绍只是商城技术背地的冰山一角,后续咱们会出更多相干系列文章,去具体介绍每个零碎的架构与核心技术。

作者:vivo 官网商城开发团队

正文完
 0