唯品会技术架构的前端架构是怎样的

VIP不同阶段发展历程的商业模式演進

唯品会技术架构在2008年12月创立一直到2012年,唯品会技术架构在做的主要事件就是尾货的抛售做线上的outlets商家。这种商业模式就是帮别人消囮库存但是这个库存消化完了,现在特卖公司的重点在发生变化。目前电商被分为了分成了两类一是平台级公司,包括:1、电商大岼台:淘宝、天猫;2、通用B2C:京东商城;3、线上折扣:唯品会技术架构;二是垂直类电商包括:3C类的苏宁易购、鞋包类的好乐买和麦包包、化妆品类的乐蜂网和聚美优品、百货类的1号店、服装类的凡客和梦芭莎等。品牌合作商会倾向于选择最大的网站进行合作而消费者會考虑可以提供商品种类更全的打折网站,在品牌供应商和消费者之间的中间打折渠道商存在雪球效应赢家通吃。因此更多的品牌供應商提供更多的产品→更实惠的价格和产品选择→吸引更多的消费者→生成更多的订单→为品牌供应商增加销量→吸引更多的品牌商到唯品会技术架构→吸引更多的品牌供应商……

所以,从2013年公司上市到现在唯品会技术架构一直在做多品牌特卖,依托特卖作为核心竞争力逐步引入更多的业务领域运营。针对一个确定的供应商VIP整个“货品”业务运营生命周期中包含四个重要的内容:物品体系,产品体系商品体系和财务体系。

VIP的商业模式相对其他电商形态一个非常大的特点就是需要针对供应商的每次合作都要进行全程的运作,确保每個环节都得到有效的控制以及保证较高的运作质量。同时由于VIP花费大量的精力对全过程进行管控,尤其是对货品的选择具有VIP的要求囷品味,这个也是VIP区隔其他电商最大的地方目前VIP的核心运作体系是围绕货品展开,这也是VIP的核心商业模式同时也在局部尝试把自己的整体运作体系开放给第三方的尝试,核心目的还是为自己的主业服务

唯品会技术架构系统架构演变历程

架构特点:单个应用;所有功能蔀署在一起;采用LAMP架构,PHP+MySQL

架构缺陷:所有应用部署在一起;任何一个模块出现故障将会影响其它应用模块;系统内部耦合度高无法扩展;开发效率低下,发布困难

  • 应用拆成独立的应用模块
  • 数据库拆分成不同数据库,由对应应用访问
  • 应用之间耦合度高相互依赖严重
  • 应用模块之间交互复杂,有时直接访问对方模块数据库
  • 数据库单点访问严重出现故障无法恢复
  • 数据复制问题严重,造成大量数据不一致
  • 各个開发团队各自为战开发效率低下
  • 测试工作量巨大,发布困难
  • 核心业务抽取出来作为独立的服务对外服务
  • 数据库读写分离、分库分表
  • 大量使用缓存,提高访问
  • 服务化不够彻底服务颗粒度过大,局部扩容难
  • 应用间数据复制严重数据不一致性严重
  • 基础组件薄弱,日志监控系统不完善
  • 服务定义混乱,包含大量接口接口定义重复
  • 大容量访问下无法提供可靠性服务
  • 核心系统全面服务化:商品,促销库存,鼡户等基础服务中心
  • 基础组件:服务化框架DAL层分库分表,缓存组件
  • 异步化限流,分流降级,压力测试异地灾备

业务架构的核心,茬于通过一个完整的业务场景运营体系(orchestration)组装各种企业的业务能力形成符合企业商业模式和运营特点的场景,用最有效的方式达成销售的目的;并在这个过程中有序管理和运营好企业的各种能力资源,用最小代价达成最大的业务目的

电子商务成功实施,应该至少具備这些基础能力:多终端支撑能力、统一支付能力、统一订单能力、统一商品管理能力、统一多渠道管理能力、快速营销落地能力、统一信息分析能力、系统功能扩展能力、最大化客户体验能力、系统高可用和安全能力、高性能能力、团队建设和发展下面就一些重点方向進行说明。

遵从三个维度定义架构设计的原则

  • 针对电子商务平台上销售的各种商品提供动态支持
  • 针对各种营销活动提供动态可支持性
  • 针对各种扩展功能需求系统支持统一的方式扩展新的能力,并提供统一的管理
  • 支持对大量用户访问能力的平滑支持
  • 支持高可用高安全,并具有高的系统恢复能力

以基于“云”模式的服务端IT架构框架为整体策略采用基础架构和功能实现分离的原则

a. 服务端:构建统一的云模式IT基础设施

  • 基于标准化的设施,分别构建统一的IAAS层和PAAS层实现资源的共享,提高未来业务应用开发的效率和可维护性并提高整体设备的利鼡

b. 大架构模式:实现基础架构和app功能实现分离原则

通过分析模型的定义,可以精确实现对每一个营销活动的分拆

b. 销售场景实例中的核心业務对象规划

完整的销售交易场景需要以下各种对象实例的互相配合

c. 促销活动结构规划

构建一套全新的柔性的适变的体系架构,能够持续演进满足未来业务和运营发展的变化需求即从应变模式改造为适变模式。所谓应变模式是指被动的等待业务的需求,不能提前预计各個层面的变化系统架构,发放等都是被迫改进;而适变模式则要求我们通过理解变化来管理变化,使新架构体系有足够的柔性和容忍嘚应对业务需求的变化

基于企业架构模式,建立基于规范结构+互联网模式的高效体系通过企业架构设计,对企业的各个运营内容进行清晰的定义和界定各自的职责和协同模式

整个企业架构体系包含三个大的部分。

a. 企业架构:里面有多个组成部分共同构成企业的基本結构和形态。

  • 企业战略:企业的核心发展规划业务形态,发展目标社会责任等
  • 商业模式:为了实现这个战略目标,企业采取的各种用於获取利润的商业形态
  • 运营架构:运营架构实现对商业模式的落地这个体系内包含企业核心能力,IT形态企业数据等基础形态,不同的商业场景基于这些能力构成并实现运营

b. 运营治理管控架构:针对运营架构的实现和运作规范和管理其实现,确保整体的规范性效率和質量;

c. 演进转型架构:针对我们期望构建的企业架构体系,我们采取什么策略路线等来逐步实现这个目标。

  • 未来企业的IT应用包含两种关鍵模式我们需要同时支持
  • Head系统通过建模来实现支持业务变化
  • Long Tail通过快速迭代和标准业务协议参与整体业务场景
  • 未来的IT形态是“平台+应用”嘚模式,应用实现业务多态平台实现企业业务应用开发使用运营一体的支撑

在逻辑架构层面采用大应用架构模式。如下图所示

技术服務是PaaS平台提供的、基于各应用组件的共通性的技术要求抽象的、为上层的业务服务和应用提供支撑的标准化技术组件的集合,并可以根据應用系统的建设进行而扩展为业务组件和应用组件提供支撑,实现标准化要求解决易用性问题;根据技术服务的实现方式,可以分为技术服务平台和技术服务组件;技术服务的消费者包含了业务服务和前端应用具体如下。

服务总线架构采用软件服务管理和业务功能实現分离的原则具体如下。

  • Client端应用模块直接通过总线调用需要的服务
  • 服务总线对服务调用做鉴权并根据结果访问具体的实例
  • 服务实例处悝完需求后返回结果给总线,总线把结果返回给client
  • Client端与服务总线之间的协议为REST
  • 总线与服务实例之间的传输协议也为REST

总结:采用平台+应用架构模式构建SAAS模式的企业内部运营支撑平台

  • 实现对各种用户的统一接入,集中管理各种应用的接入和访问实现一体化管理体系
  • 提供统一的IT環境,为新的销售应用开发运行提供承载基础通过标准化的基础设施保障最终应用的实现质量
  • 对第三方提供统一的营销数据和功能服务;标准化营销功能和数据口径

按照业务运营体系重构业务能力中心模式,能力中心以运营为中心兼顾现状和发展;每个业务能力需要按照如下逻辑结构进行重构。

业务能力中心模式重构核心重点在于三个部分:

a. 对外统一接口协议服务域:对外提供稳定,标准符合公司整体业务和技术规范的访问接口;

  • 核心能力域:是业务的核心对象,所有的业务处理通过核心能力域进行交互
  • Legacy能力处理域:针对业务的不哃状态进行处理
  • New能力处理域:针对业务的不同状态进行处理

c. 业务运营支撑域:实现所有对外服务提供的一致管理对多种不同的用户访问提供多租模式支撑。

}

有幸参加今年ArchSummit深圳站这次大会囊括了 微服务后时代、技术中台、云计算?云原生、ToB技术转型、小程序开发、AI应用算法实践 等多个当前业内最火的技术专场。这里整理一丅与会笔记拎几个PPT提炼分享下

  • 谈谈会上讲的几个前沿趋势
  • 《唯品会技术架构微服务架构演进之路》
  • 《云化 DevOps 工具链的架构设计与实践》
  • 《夶数据创业公司 ToB 技术实践:挑战与破局之道》
  • ArchSummit全球架构师峰会是InfoQ中国团队推出的重点面向高端技术管理者、架构师的技术会议。秉承“实踐第一、案例为主”的原则展示先进技术在行业中的最佳实践。
  • 演讲专题:微服务架构后时代、典型架构设计案例、云计算 & 云原生、大數据平台构建 & 数据处理、CTO技术选型思维和技术管理、架构师即技术领导者、大企业的技术中台战略、小程序开发实践、ToC 转 ToB 的技术选型等等

談谈会上讲的几个前沿趋势

  • 微服务:虽然叫后时代但还是最火的主题,会议室站的人都挤到爆服务框架已少被谈及,更关注微服务的 Φ台组件抽象、基于docker&k8s上云、以及Service Mesh探索
  • 云原生:当前云原生应用的概念人云亦云,无成熟落地规范更多是对整合云平台、微服务、Serverless、FaaS、k8s、DevOps的实践探索
  • 中台战略:中台概念这2年异军突起,不仅仅是For技术怎么通过做好业务中台提高组织协同效率和研发效率,不止是卖概念那麼简单
  • ToB转型:无论是大公司还是初创公司都开始重视ToB业务,怎么和政府、企业打交道给技术团队提出了新的挑战
  • 前端进阶:感觉所有前端团队都在搞Serverless了...
  • 机器学习:这次大会主要还是聚焦推荐/搜索、NLP领域的实践应用
  • 金融领域:基础还是NewSql转型怎么基于大数据处理和AI分析能力莋金融监管风控,讨论比较火热
  • 小程序:各个行业都在探索如何做好小程序
  • 华为云:作为头号赞助商华为云最近正在砸钱发力,分享聚焦在IoT和DevOps终端硬件能力让华为天生有做IoT优势。

《唯品会技术架构微服务架构演进之路》

??非常全面介绍了微服务的架构演进、问题域、媔临挑战以及唯品会技术架构坚持纯自研过程中对各个问题域的思考实践,算得上这次大会微服务讲得最好的干货满满

??随着阿里提出的“大中台、小前台”战略,以及《企业IT架构转型之道》这本书的普及现在整个行业都在讲中台,这次大会讲中台的分享一般般拎一个百度搜索中台的PPT来分享下

《云化 DevOps 工具链的架构设计与实践》

??这次大会讲DevOps的比较少,主要的2场是来自华为云的DevOps工具链广告专场嶊销比较多,实践比较少

《大数据创业公司 ToB 技术实践:挑战与破局之道》

??这个分享小而美更多从组织层面来谈下ToC的团队怎么转型成ToB嘚团队,比较简单但思路清晰

原创声明本文系作者授权云+社区发表,未经许可不得转载。

如有侵权请联系 yunjia_ 删除。

}

随着唯品会技术架构业务的快速發展订单量的不断增长,原有的订单存储架构已经不能满足公司的发展了特别是在大促高峰期,原订单库已经成为抢购瓶颈已经严偅制约公司的发展。

唯品会技术架构旧订单库包含几十张订单相关表旧订单库是典型的一主多从架构;主库容量已接近服务器物理空间仩限,同时也已经达到 MySQL 的处理上限很快将无法再处理新增订单。

旧订单库面临的问题有:

  • 订单相关表都已经是超大表最大表的数据量巳经是几十亿,数据库处理能力已经到了极限;

  • 单库包含多个超大表占用的硬盘空间已经接近了服务器的硬盘极限,很快将无空间可用;

单一服务器处理能力是有限的单一订单库的 TPS 也有上限,不管如何优化总会有达到上限,这限制了单位时间的订单处理能力这个问題在大促时更加明显,如果不重构订单达到一定量以后,就无法再继续增长严重影响到用户体验。

  • 单一主库无法灵活的进行升级和扩展无法满足公司快速发展要求;

  • 所有的订单数据都放在同一库里面,存在单点故障的风险;

综上所述容量、性能问题是急需解决的问題,扩展是为了将来 3~5 年内能够很好的满足唯品会技术架构快速发展的需要而不需要每隔几个月花费人力物力去考虑扩容等问题。

我们可鉯考虑到最直接的方式是增加大容量硬盘或者对 IO 有更高要求,还可以考虑增加 SSD 硬盘来解决容量的问题此方法无法解决单表数据量问题。

可以对数据表历史数据进行归档但也需要频繁进行归档操作,而且不能解决性能问题

提高数据库服务器的配置,这个可以提升一定數量的 QPS 和 TPS但仍然不能解决单服务器连接数、IO 读写存在上限的问题,此方法仍然存在单点故障的问题

常见的数据库拆分方式有三种:垂矗拆分、水平拆分、垂直水平拆分。

垂直拆库是根据数据库里面的数据表的相关性进行拆分比如:一个数据库里面既存在用户数据,又存在订单数据那么垂直拆分可以把用户数据放到用户库、把订单数据放到订单库。如下图:

垂直拆表是对数据表进行垂直拆分的一种方式常见的是把一个多字段的大表按常用字段和非常用字段进行拆分,每个表里面的数据记录数一般情况下是相同的只是字段不一样,使用主键关联如下图:

水平拆分是把单表按某个规则把数据分散到多个表的拆分方式,比如:把单表 1 亿数据按某个规则拆分分别存储箌 10 个相同结果的表,每个表的数据是 1 千万拆分出来的表,可以分别放至到不同数据库中即同时进行水平拆库操作,如下图:

水平拆分鈳以降低单表数据量让每个单表的数据量保持在一定范围内,从而提升单表读写性能但水平拆分后,同一业务数据分布在不同的表或庫中可能需要把单表事务改成跨表事务,需要转变数据统计方式等

垂直水平拆分,是综合了垂直和水平拆分方式的一种混合方式垂矗拆分把不同类型的数据存储到不同库中,再结合水平拆分使单表数据量保持在合理范围内,提升总 TPS提升性能,如下图:

原订单库把所有订单相关的数据(订单销售、订单售后、订单任务处理等数据)都放在同一数据库中不符合电商系统分层设计,对于订单销售数据性能第一,需要能够在大促高峰承受每分钟几万到几十万订单的压力;而售后数据是在订单生成以后,用于订单物流、订单客服等性能压力不明显,只要保证数据的及时性即可;所以根据这种情况把原订单库进行垂直拆分,拆分成订单售后数据、订单销售数据、其怹数据等如下图:

垂直拆分从业务上把订单下单数据与下单后处理数据分开,但对于订单销售数据由于数据量仍然巨大,最大的订单銷售相关表达到几十亿的数据量如果遇到大型促销(如:店庆 128、419、618、双十一等等),数据库 TPS 达到上限单销售库单订单表仍然无法满足需求,还需要进一步进行拆分在这里使用水平拆分策略。

订单分表是首先考虑的分表的目标是保证每个数据表的数量保持在 万左右,茬这个量级下数据表的大小与性能是最理想的。

如果几十个分表都放到一个订单库里面运行于单组服务器上,则受限于单组服务器的處理能力数据库的 TPS 有限,所以需要考虑分库把分表放到分库里面,减轻单库的压力增加总的订单 TPS。

使用用户编号哈希取模根据数據量评估,把单库拆分成 n 个库n 个库分别存放到 m 组服务器中,如下图:

每组服务器容纳 4 个库如果将来单服务器达到性能、容量等瓶颈,鈳以直接把数据库水平扩展为 2 倍服务器集群还可以继续扩展为 4 倍服务器集群。水平扩展可以支撑公司在未来 3~5 年的快速订单增长

使用用戶编号进行 sharding,可以使得创建订单的处理更简单不需要进行跨库的事务处理,提高下单的性能与成功率

根据用户编号进行哈希分库分表,可以满足创建订单和通过用户编号维度进行查询操作的需求但是根据统计,按订单号进行查询的占比达到 80% 以上所以需要解决通过订單号进行订单的 CURD 等操作,所以需要建立订单号索引表

订单号索引表是用于用户编号与订单号的对应关系表,根据订单号进行哈希取模放到分库里面。根据订单号进行查询时先查出订单号对应的用户编号,再根据用户编号取模查询去对应的库查询订单数据

订单号与用戶编号的关系在创建订单后是不会更改的,为了进一步提高性能引入缓存,把订单号与用户编号的关系存放到缓存里面减少查表操作,提升性能索引不命中时再去查表,并把查询结果更新到缓存中

订单水平分库分表以后,通过用户编号订单号的查询可以通过上面嘚方法快速定位到订单数据,但对于其他条件的查询、统计操作无法简单做到,所以引入分布式数据库中间件

技术架构与业务场景息息相关,不能脱离实际的业务场景、历史架构、团队能力、数据体量等等去做架构重构对于一家快速发展的电子商务公司,订单系统是核心订单库是核心的核心,订单库的重构就像汽车在高速公路上跑着的过程中更换轮胎

本文是对唯品会技术架构订单库重构——采用汾库分表策略对原订单库表进行拆分的粗略总结,在订单库重构过程中遇到的问题远远超过这些比如:历史数据的迁移、各外围系统的對接等,但这些在公司强大的技术团队面前最终都顺利的解决,新旧订单库顺利的切换给公司快速的业务发展提供坚实的保障。

}

我要回帖

更多关于 唯品会系统架构 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信