首家大数据培训挂牌机构 股票代码:837906 | EN CN
阿里巴巴菜鸟级数据产品经理半年回顾总结篇
干货教程:如何绘制业务流程图(二)
干货教程:如何绘制业务流程图(一)
技术贴:如何在数据库中秘密地查询隐私数据
攻略教程:信息图(infographic)是怎么做出来的?
分析师一定要看!用数据讲故事的五个步骤
技术篇:怎样玩转千万级别的数据?
北漂书生:大数据时代SEO数据如何搜集和分析
干货,从十大问题重新认识并读懂互联网
相似图片搜索、算法、识别的原理解析(下)
相似图片搜索、算法、识别的原理解析(上)
制作信息图时请遵循这10条原则
提高表格可读性的一些技巧,适用于Excel、PPT等数据报表
实用教程:如何让Excel图表更具“商务气质”?
一张数据信息图是这样制作完成的
菜鸟读财报,如何从上市公司财报中挖情报?
北大数据分析老鸟写给学弟们一封信
如何一步一步制作出高品质数据信息图?
总结:海量数据分析处理的十个方法
【实战经验】数据分析师如何了解老板真正想法?
零售业数据分析那些事儿
数据分析时l常用电子表格公式【大全】
用数据来告诉你 上市公司财报的秘密
这12个数据能 帮你搞定淘宝店铺
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(四)
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(三)
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(二)
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(一)
淘宝网店从激活到挽留,4步走玩转数据营销
文案怎样写才有意思、不空洞、打动人?
入门级扫盲贴:数据分析的步骤有哪些?
关系即数据,论社交媒体的关系转换
数据的力量,苹果教你用数据鄙视竞争对手
谁说文科生不能做数据分析?数据分析入行→技能提升→优势
产品运营数据分析——SPSS数据分组案例
如何追踪iPhone和iPad等移动设备的用户行为数据?
阿里巴巴中国站:用户满意度指标权重计算方法
广告中的AdNetwork、AdExchange、DSP、SSP、RTB和DMP是什么?
信息图制作教程:关于数值的表现
为什么大数据会如此轰动?(值得深度的文章)
多图技术贴:深入浅出解析大数据平台架构
面板数据分析中标准误的估计修正——根据Peterson (2009)的归纳
财务官、投资人、CIO看过来:给企业数据定价
推荐系统中常用算法 以及优点缺点对比
探索Weotta搜索引擎背后的大数据技术
如何识别虚假数据?
为什么我们像驯化小狗那样驯化算法
程序员必须知道的10大基础实用算法及其讲解
电子商务:最影响转化率的九大要素
如何迅速成为一名数据分析师?
想从事大数据、海量数据处理相关的工作,如何自学打基础?
如何用亚马逊弹性MapReduce分析大数据?
译文:机器学习算法基础知识
给hadoop新手的一封信:Hadoop入门自学及对就业的帮助
从入门到精通,我是这样学习算法的
小商家,从老客户身上获取的数据才更有意义
13页PPT讲述:大数据下网站数据分析应用
40页PPT详解:京东大数据基础构架与创新应用
67页PPT解密搜索引擎背后的大技术:知识图谱,大数据语义链接的基石
营销洞察力——10个营销度量指标
技术篇:前端数据之美如何展示?
董飞:美国大数据工程师面试攻略【PPT】
easel:如何制作好的信息图——来自专家的顶级技巧
大数据实操:以3D打印机为例,如何知道卖点有没有市场需求?
大数据建模 需要了解的九大形式
用户画像数据建模方法
从规划开始,公司or企业如何入手和实施大数据?
干货:商品信息数据分析和展现系统的设计与开发
高手教你用Excel制作百度迁徙数据地图
50篇干货:淘宝店/电子商务如何玩转数据分析?
精华索引:大数据实际应用案例50篇
验证最小化可行产品 (MVP) 的 15 种方法
干货:数据分析师的完整知识结构
大数据技术Hadoop面试题,看看你能答对多少?答案在后面
用SPSS做数据分析?先弄懂SPSS的基础知识吧
怎样做出优秀的扁平化设计风格PPT? 扁平化PPT设计手册#3
解答│做大数据过程中遇到的13个问题
40页PPT│社交网络发展的新动力:大数据与众包
以Amazon、豆瓣网为例,探索推荐引擎内部的秘密#1
怎样做出优秀的扁平化设计风格PPT?#2
怎样做出优秀的扁平化设计风格PPT?#1
36页PPT│大数据分析关键技术在腾讯的应用服务创新
如何丰满地做SWOT分析?
【35页PPT】TalkingData研发副总阎志涛:移动互联网大数据处理系统架构
27页PPT|以珍爱网为例,如何构建有业务价值的数据分析系统?
国外数据新闻资源分享
21页PPT重磅发布:Mariana——腾讯深度学习平台的进展与应用
从0到100——知乎架构变迁史
PPT解读:百度大数据质量保障方案探索
45页PPT|大数据环境下实现一个O2O通用推荐引擎的实践
从数据看豆瓣兴衰
深度学习系列:解密最接近人脑的智能学习机器——深度学习及并行化实现(四)
重磅推荐:129页PPT讲述移动时代创业黄金法则 via:腾讯企鹅智酷
重磅推荐:大数据工程师飞林沙的年终总结&算法数据的思考
OpenKN——网络大数据时代的知识计算引擎
大数据下城市计算的典型应用
技术贴:大数据告诉你,如何给微信公众号文章取标题?
你的QQ暴露了你的心——QQ大数据及其应用介绍PPT
如何从企业报表看企业的生存能力?
实用的大数据技巧合集
技术帝揭秘:充电宝是如何盗取你的个人隐私的?
重磅!50页PPT揭秘腾讯大数据平台与推荐应用架构
原创教程:饼图之复合饼图与双层饼图(1)
PPT:大数据时代的设计特点——不了解这个你做不了今天的设计
教程贴:如何用方程式写春联?
原创教程:如何用Excel制作简易动态对比图
深度译文:机器学习那些事
教程帖:数学之美——手把手教你用Excel画心(动态图)
董老师走进斯坦福,聊聊硅谷创业公司和大数据的事儿(附课件PPT下载)
【限时】年度钜献,108个大数据文档PDF开放下载
董飞专栏:大数据入门——大数据相关技术、Hadoop生态、LinkedIn内部实战
亿级用户下的新浪微博平台架构
一张图了解磁盘里的数据结构
浅析数据化设计思维在阿里系产品的应用
美团推荐算法实践
一个P2P创业公司有哪些部门,都是做什么的?
一个P2P平台的详细运营框架是怎样的?
机器学习中的算法——决策树模型组合之随机森林与GBDT
神经网络简史
58页PPT看懂互联网趋势,大数据/物联网/云计算/4G都有了
广点通背后的大数据技术秘密——大规模主题模型建模及其在腾讯业务中的应用(附PPT)
微信红包之CBA实践PPT——移动互联网海量访问系统设计
一文读懂机器学习,大数据/自然语言处理/算法全有了……
搜狐新闻客户端的背后大数据技术原理——推荐系统(PPT)
原创教程:用Excel做动态双层饼图
半小时读懂PMP私有广告交易市场
怎样分析样本调研数据(译)
PPT:支付宝背后的大数据技术——DataLab、Higo的实践及应用
大数据技术人员的工具包——开源大数据处理工具list(限时下载)
计算机视觉:随机森林算法在人体识别中的应用
24页PPT:机器学习——支持向量机SVM简介(附下载)
互联网高手教你如何搜集你想要的信息
深度:对地观测大数据处理、挑战与思考
原创教程:用Excel做饼图之复合饼图与双层饼图(2)
移动大数据时代: 无线网络的挑战与机遇(附pdf下载)
Excel使用技巧——25招必学秘技
【年度热门】加上这些 Excel 技能点,秒杀众人(多图)
原创教程:用Excel做纵向折线图
知识图谱——机器大脑中的知识库
何明科专栏:用数据化的方式解析投资条款
DT时代,如何用大数据分析创造商业价值(23页PPT)
MIT牛人梳理脉络详解宏伟现代数据体系
你的老婆是怎么算出来的?揭秘佳缘用户推荐系统
飞林沙:商品推荐算法&推荐解释
PPT:如何成为真正的数据架构师?(附下载)
开源大数据查询分析引擎现状
董飞专栏:打造数据产品必知秘籍
译文:如何做强大又漂亮的信息图
如何使用Amazon Machine Learning构建机器学习预测模型
如何运用数据协助货架管理(内附26张PPT)
SVM算法
主流大数据系统在后台的层次角色及数据流向
PPT:阿里全息大数据构建与应用
人脸识别技术大总结——Face Detection & Alignment
教程:用Excel制作成对条形图
易观智库:大数据下的用户分析及用户画像(18页PPT附下载)
技术向:如何设计企业级大数据分析平台?
电商数据分析基础指标体系
IBM SPSS Modeler 决策树之银行行销预测应用分析
拓扑数据分析与机器学习的相互促进
基于 R 语言和 SPSS 的决策树算法介绍及应用
用php做爬虫 百万级别知乎用户数据爬取与分析
另类新浪微博基本数据采集方法
以10万+阅读的文章为例 教你做微信公众号的运营数据分析
破解数据三大难题:变现?交易?隐私?
微店的大数据平台建设实践与探讨
阿里巴巴PPT:大数据基础建议及产品应用之道
基于社会媒体的预测技术
人工智能简史
技巧:演讲中怎样用数据说话
马云和小贝选谁做老公?写给非数据人的数据世界入门指南
掘金大数据产业链:上游资源+中游技术+下游应用
原创教程:手把手教你用Excel做多层折线图
销售分析:如何从数据指标发现背后的故事
如何一步步从数据产品菜鸟走到骨干数据产品
也来谈谈微博的用户画像
行走在网格之间:微博用户关系模型
如何拍出和明星一样美爆的自拍照?斯坦福大学用卷积神经网络建模告诉你
运营商如何玩转大数据? 浙江移动云计算和大数据实践(PPT附下载)
大数据分析的集中化之路 建设银行大数据应用实践PPT
腾讯防刷负责人:基于用户画像大数据的电商防刷架构
创业提案的逻辑
友盟分享 | 移动大数据平台架构思想以及实践经验
寻路推荐 豆瓣推荐系统实践之路
“小数据”的统计学
重磅!8大策略让你对抗机器学习数据集里的不均衡数据
小团队撬动大数据——当当推荐团队的机器学习实践
微博推荐架构的演进
科普文 手把手教你微信公众号数据分析
信息图制作的六个注意点
【权利的游戏】剧透新玩法:情理之中?意料之外
推荐系统(Recommender System)的技术基础
核心算法 谷歌如何从网络的大海里捞到针
Quora数据科学家和机器学习工程师是如何合作的
阿里巴巴PPT:大数据下的数据安全
数据建模那点事儿
全民拥抱Docker云–Lhotse系统经验分享
实时股票分析系统的架构与算法
架构师必看 京东咚咚架构演进
什么叫对数据敏感?怎样做数据分析?
推荐系统基础知识储备
刘德寰:数据科学的整合与细分 数据科学的七个危险趋势(视频)
实际工作中,如何做简单的数据分析?
分布式前置机器学习在威胁情报中的应用(附PPT下载)
数据科学 怎样进行大数据的入门级学习?
扛住100亿次请求 如何做一个“有把握”的春晚红包系统?(PPT下载)
从 LinkedIn 的数据处理机制学习数据架构
大数据会如何改变管理咨询公司(I)
优秀大数据GitHub项目一览
生硬的数字和数据新闻:这么近,那么远
经典大数据架构案例:酷狗音乐的大数据平台重构(长文)
揭秘中兴大数据在银行领域的系统部署
基于大数据的用户画像构建(理论篇)
【R】支持向量机模型实现
数据图处处有陷阱?五个例子教你辨真伪
如何用R绘制地图
你确定你真的懂用户画像?
数据模型需要多少训练数据?
【接地气】01 数据报表的颜色怎么配
游戏价值和数据分析新思路
【R】异常值检测
快的打车架构实践
豆瓣还是朋友圈:大数据、新方法和日常问
PPT数据图表,怎么做才好看?
大道至简的数据体系构建方法论
数据的误区及自身业务
新浪微博的用户画像是怎样构建的?
面试干货!21个必知数据科学面试题和答案part1(1-11)
易观智库:中国大数据产业生态图谱2016(附下载)
Airbnb的数据基础架构
50PB海量数据排序,谷歌是这么做的
大数据时代工程师如何应对–今日头条走进硅谷技术讲座
D3.js教学记(下)
D3.js教学记(上)
飞林沙:企业级服务公司如何赚钱?只有平台级产品才有大数据的理论
一个母婴电子商务网站的大数据平台及机器学习实践
7大板块 组成数据分析师的完整知识结构
干货:SaaS领域如何分析收入增长?
学术 | 词嵌入的类比特性有实用意义吗?
6个用好大数据的秘诀
一个数据库外行眼中的微信优化 (附专家补充)
大数据调研,如何实现快全准?
数据大师Olivier Grisel给志向高远的数据科学家的指引
数据堂肖永红:数据交易的是使用权或数据的增值,而不是数据本身(PPT附下载)
淘宝商品详情平台化思考与实践
刘译璟:百分点大数据理念和实践(图文+PPT下载)
如何快速搞定一份看起来还不错的演示文档?
【BABY夜谈大数据】决策树
数据驱动设计:数据处理流程、分析方法和实战案例
美图数据总监:Facebook的法宝,我们在产品中怎么用?
树的内核:量化树结构化数据之间的相似性
拿到用户数据之后,LinkedIn怎么赚钱?
GrowingIO张溪梦:增长黑客的核心 企业应该重视产品留存率(附PPT下载)
[译]Airbnb是如何使用数据理解用户旅行体验的?
微博推荐数据服务代理: hyper_proxy的设计和实现
星图数据谷熠:消费领域DaaS 大数据重构未来商业游戏规则(附PPT下载)
鲍忠铁:TalkingData大数据技术与应用实践(PPT下载)
【干货教材】数据分析VS业务分析需求
九枝兰专访:数字营销的核心—企业如何使用数据管理平台(DMP)进行精准营销
我们的应用系统是如何支撑千万级别用户的
R应用空间数据科学
Excel进行高级数据分析(上)
Excel进行高级数据分析(下)
国内各大互联网公司2.0版技术站点收集
网站数据分析思路导图
大数据分析报表设计开发要素
大数据需要的12个工具 推荐
YARN/MRv2 Resource Manager深入剖析—NM管理
YARN/MRv2 Resource Manager深入剖析—RMApp状态机分析
Hadoop 1.0与Hadoop 2.0资源管理方案对比
Hadoop 2.0中单点故障解决方案总结
Hadoop 2.0 (YARN)中的安全机制概述
Hadoop 新特性、改进、优化和Bug分析系列1:YARN-378
Hadoop 新特性、改进、优化和Bug分析系列2:YARN-45
Hadoop 新特性、改进、优化和Bug分析系列3:YARN-392
Hadoop版本选择探讨
探究提高Hadoop稳定性与性能的方法
《Effective C++》读书笔记(第一部分)
Hadoop分布式环境下的数据抽样
Hadoop计算能力调度器算法解析
如何编写Hadoop调度器
数据结构之红黑树
Hadoop pipes设计原理
《C++ Primer plus》学习笔记之”类”
《C++ Primer plus》学习笔记之”类继承”
《C++ Primer plus》学习笔记之”C++中的代码重用”
《C++ Primer plus》学习笔记之”异常”
《C++ Primer plus》学习笔记之”RTTI”
Hadoop pipes编程
Hadoop Streaming高级编程
《C++ Primer plus》学习笔记之”标准模板库”
《C++ Primer plus》学习笔记之”输入输出库”
Linux Shell 命令总结
算法之图搜索算法(一)
awk使用总结
素数判定算法
《C++ Primer plus》学习笔记之“函数探幽”
使用Thrift RPC编写程序
如何在Hadoop上编写MapReduce程序
怎样从10亿查询词找出出现频率最高的10个

淘宝商品详情平台化思考与实践

于2017-04-01由小牛君创建

分享到:


1.现状背景

Detail当前的问题可参见《Detail2.0介绍》(2014年7月),本文不赘述。而Detail新平台的目标是提升协作效率/稳定性/扩展性,倡导商品详情业务归一,能横向复用在其它Detail也能运用在非Detail场景。从产品到研发等各维度均展开梳理和重构,采取模块化、SDK/API等方式来定义协作和扩展机制,并提供合成和分组两种部署模式,以应对创新业务快速多变的需求。并在稳定性和性能方面进行统一封装管理和工具的插件式注入,使之常态化和标准化。

2.名词定义

什么是模块

模块是具备可部署、可管理、可重用、可组合、无状态等特性,遵循统一规范且提供对外接口的软件单元。

什么是平台

平台是一套完整的技术体系和架构,具备可重用、可维护、可扩展、可协作等特性,能规范研发阶段的各项工作,最终支撑物种多样化、个性化等业务目标。

模块与平台

可以发现模块的特性与平台所追求的特性是一致的。模块是微观的具体实现单位,而平台则是宏观上的体系架构。模块化是构建平台的基本元素和方法,故两者并不冲突。以模块化理念解决当前面临的各项问题,对系统进行模块改造,再对模块库进行组织、调度,并提升除研发外其它各维度的能力以实现最终平台化。

3.设计理念

(仅针对当前场景,普适原则不赘述)

分而治之

是解决复杂问题的有效方式,模块化便是具体的实现方法。模块更具可重用性、可维护性,控制复杂度、易于理解等,特别是共建(多团队协作)和需求多变的场景下。而当今Java平台,无论OSGi或Jigsaw等都还在发展中(细节不赘述) ,但模块化理念和模式是通用的,只要对系统进行良好的设计和拆分,无论采用何种模块化方法都能受益。所以,自主设计一套轻量级模块规范是本次平台化的切入点。

框架治理

事实证明,以口述或文档等方式制定的技术规范都是弱规范,会被日积月累的无序行为致使架构积重难返。所以推崇通过框架定义标准,使研发过程和实现得以规范化。但框架除了按规范去约束,也要允许在同样规范下开放。对无序行为的治理,就如同大禹治水,并不能完全的堵也要疏。所以,模块框架是规范的具体体现,框架会很轻很薄的对基础部份规范,但框架更多的是支撑开放和扩展。

模块粒度

在本方案的模块认定中,一个模块是无关逻辑封装粒度、表现形式的,而是只要可被重用、接受模块框架管理的便是模块。不关心内部逻辑、代码分层等,只关心真正对外暴露的部份是否遵循模块规范。

平台定位

相对IC/TC/UIC等,商品详情绝非一个同类型的基础平台,因其并非位于淘宝架构的底层,且没有直接属于自身的数据,而是基于后端服务通过“逻辑再封装(注)”及“编排各服务“实现的上层业务系统。从更优雅长远的角度,就只应承担后端逻辑服务的“编排者”一职,不能有具体的业务逻辑实现。

注:商品详情的业务逻辑主要靠后端服务化接口提供,但因后端接口封装度较低等历史原因,仍有约10%以上(比率视各后端接口而不同)的逻辑“残留”在Detail上。虽然Detail系统内部也可分出业务逻辑层、数据访问层等,但从淘宝大架构视图分析,Detail仅是各业务系统和基础平台的表现层之一。

4.平台化

4.1.前后端分离

Detail因历史问题,有大量业务逻辑散落在包括JS代码和VM模板在内的前端层。使得前端层复杂而又臃肿,可维护性差;也使得后端对逻辑的控制能力减弱,可重用性低;同时前后端在协作时因边界模糊和过程依赖,使得研发效率降低。为解决这些问题,商品详情平台化项目首先便进行了前后端分离(或称解耦)。

针对浏览型系统,可将逻辑划分为:后端的业务逻辑、前端的展现和交互逻辑(统称体验逻辑)。业务逻辑产出业务数据,展现逻辑负责模板渲染、交互逻辑响应用户行为。前后端分离就是要将业务和体验逻辑解耦,将业务逻辑完全下沉由后端控制,提升可重用性,将展现和交互的表达交给前端层负责,各司其职。

前端
前后端分离只将逻辑解耦,但前后端并没有因此而失去互动,后端的业务数据接口便成为前后端的通信管道。所以平台化项目接着便对接口进行了规范性定义,包括:模型定义(入参和结果模型等)、安全机制(授权与鉴权等)、调用协议(HTTP/RPC)、返回格式(JSON/JSONP等),并支持且推荐Java本地的原生方式。

商品详情前后端分离之后,后端在业务规则和功能领域便更具操控性,而前端也能专注于用户体验,且前后端在协作时只需遵循统一规范,即可并行展开各自的逻辑实现,如下图,职责边界清晰,有助效率提升。

后端
前后端分离也请关注Midway

4.2.模块改造

平台化项目中设计实现的模块规范和框架,用于将整块架构的应用(monolithic)拆解为模块服务级应用。模块框架是通过对源类的轻量级再封装以实现统一管理,包括管理类的生命周期/输入/输出/调用模式/稳定性等。不侵入逻辑不关心类的分层和设计模式等,事实上不依赖模块框架,如将框架废弃源类仍能运行。

核心构成

AbstractModule 是所有模块的基类,每个模块加载到独立的Classloader以避免冲突

通过LifecycleListener 可以监听模块生命周期

ExtensionPoint 是可扩展入口,以注解(@annotation)方式声明

Extension 是扩展实现的基类

代码实现

模块基本定义

public final class ExampleModule extends AbstractModule /*implements LifecycleListener*/ {

@Override

protected ExampleResult execute(RunData data, ModuleContext context) throws ModuleException {

//…

}

}

模块最少描述

#module.properties 需与模块同层

Module-Class=ExampleModule@1.0.0

Module-Requires=XxxModule@1.0.1,YyyModule,ZzzModule

#or Module-Local=XxxModule@1.0.1,YyyModule,ZzzModule

Module-Description=anything

生命周期定义

生命周期
生命周期监听(optional)

public interface LifecycleListener extends EventListener {

public void changed(Event event);

}

模块容器

模块容器主要将原本已通过模块框架暴露的本地接口,发布为服务化接口,提供了丰富的远程调用协议,并对服务化后的接口进行安全包装,支持服务化后的批量处理等功能,即未采用模块容器的模块只支持本地调用。除服务化一系列的支持外,模块容器也提供了模块管理的钩子,但模块管理这部份暂时尚未实现。

容量
配套工具

针对模块的生命周期和版本进行管理,以及开发阶段的IDE插件等工具。还在开发中。

插件体系

将日志工具(如slf4j)、稳定性工具(如Switch)、参数校验、模块流程编排等常用的类库,以插件形式融入模块框架,保持各模块在开发时能使用一致,以降低开发成本和提高可维护性。类库在统一定义的接口下适配成插件,目的是保障如果需要替换或升级一款类库后,模块内的代码不用任何改动。现日志、开关框架已完成插件化。

(近期针对模块化进行部份改造优化,后续会针对模块规范和框架实现再单独详细介绍)

4.3.代码重构

详情项目基于上述模块规范,再对业务逻辑重新梳理、对原有代码彻底重构,并按共建型、模块化、可扩展的设计思路重新分层。在新的层次中,每一层内的每一点在逻辑实现后,凡向上暴露接口时均以模块方式表达,上层通过模块描述发现下层能力。整个平台运行在模块容器上,模块容器运行在应用服务器之上。

代码重构
4.4.稳定性

淘宝商品详情前辈们在多年稳定性实践中积累了丰富的经验,并沉淀了包括静态化/异步化/单元化等全局架构,平台化项目在继续受益延用的同时也在代码层做了统一性和标准性的优化,目标稳定性治理常态化。

模块的安装卸载,保障模块级稳定性,使得最少有一层保护

模块被手工或自动卸载后,可降级其它许可版本或触发容灾

模块内有否实现容灾会在模块安装前被校验,使之成为必然

在批量执行模块时(常见场景),模块框架可并发执行并为每个模块设定不同的超时时长以提升性能

因各层通过模块框架组织,而模块框架支持稳定性框架以插件的形式嵌入,使得各模块能统一使用

新的平台分层里,上层调用二方服务必需通过Adapter层(此层不开放共建,主要是将外部服务进行符合模块规范的适配并未有多余的逻辑)。在适配层进行对外部服务的统一稳定性治理,包括开关降级/容灾/超时控制等。使之前但凡要调用外部服务就直接使用就造成需多次稳定性治理的情况得以改善,降低维护成本。Adpater层内各模块或其它各层的模块,也能针对来源设定不同的限流阀值

4.5.测试体系

Detail受历史原因也碍于代码的分层结构和代码的不规范性,未能实现行之有效的测试方案,所以测试工作回归量大、重复劳动、枯燥无味、效率低下。而平台化项目针对现状重新整理了Detail的技术质量体系。

测试体系
分层测试

根据代码分层,技术质量维度也进行了对等的分层单元测试。各层主要包括:基础服务层(如DAO/Util等)、业务逻辑层(如Service/Manager等)、对外接口层(此层进行接口级测试)、页面展现层等。而Detail场景大都是依赖更后端的服务化接口,所以在Detail新平台的单元测试中为提升效率引入了PowerMock框架。

自动方式

除页面展现层外,其它各层均实施自动化测试方式,而页面展现层更多的还是需要通过手工介入方式来进行功能测试。能够代替手工测试、找出重复测试工作是进行自动化方式的思路。而在衡量自动化测试目标时,也应从追求自动化覆盖率,到追求正确率、关注运行时间、测试脚本可重用性等,进行全方位的提升。

持续集成

基于分层单元测试、自动化测试,才能实现最终的持续集成。持续集成平台通过跟踪代码库的变更而自动执行测试用例、静态扫描等,这样便能快速发现问题,当然也要在环境部署之前触发,同时持续集成平台还应支持执行对应的用例,比如,只修改了AbcUtil.java那么则只执行AbcUtilTest.java。将持续集成定义为常态化,设进标准流程,融入日常工作,不断有所追求,最终高效保障淘宝商品详情平台的技术质量。

4.6.研发模式

没有规矩,不成方圆。商品详情平台作为一个设计完整的平台,还针对各维度定义出一套规范(或称标准)、针对各阶段设计出一套流程,以指导平台化后的研发模式。包括:模块开发规范、提测标准、质量标准(包括业务逻辑质量标准、性能标准、稳定性标准、安全标准、可维护标准也包括运维)、发布流程(含紧急发布流程)、线上问题处理规范,这些规范和流程面向参与平台建设的所有前后端开发、测试、运维等各角色。

规范是必需要建立起来的指导原则,在通过商品详情平台化的实践后,针对规范的落地也更有理由相信:

1、设计再良好的架构,也是需要依靠合适的组织结构去保障的;

2、架构的认同、执行、维护,最终需转变团队成员的思想,这是一个过程;

3、尽量将规范和流程用以工具、示例等更形象更直接方式表达。

另一方面,在共享共建大背景下,平台在搭建之初也针对共建进行设计,无论是共建理念定位、模块逻辑结构、物理部署方式,再到各维度能力的协同。以下便是经过模块化改造后商品详情平台的共建研发模式:

研发模式
商品详情新平台提供两种协作模式:

1、 独立模块级共建

默认共建方式。各方基于Aone二方库进行共建,一个二方库即一个模块,二方Jar包即模块单元,二方库内代码实现需符合模块规范才可被识别和部署。该方式在研发过程和部署方式上更灵活,更可管理,共建方的可控性更强,但对于Detail主维护团队所提供的平台底层扩展能力(即SDK)要求较高。

2、 源码分支级共建

多人基于同一个源码工程,通过开多个分支的方式,在各分支上实现业务逻辑,最终各个分支在整体合并后进行部署。优势是允许从底层能力至上层业务更大范围内进行编码,更具连贯和顺畅性,但缺点是分支和流程冲突大难以协调、业务理解能力和编码实现习惯各有不同,容易逐渐造成架构被腐蚀。

商品详情新平台更加关注“共建方体验”,在新架构和新研发模式的基础上,共建方将得到如下体验和权力:

共建方
4.7.部署结构

平台逻辑架构和部署物理结构,因所面临的问题领域和解决方式各不相同,所以不能互相限制对方的最终形态,即不能因为平台逻辑架构而绑死最后部署结构,这是平台化项目的架构设计基本原则之一。更何况在业务高速发展,需求多变,团队协作的特定场景,更是要求部署模式也一样的灵活,按需定制,可组合。

部署结构

5.Use Cases

成功案例

农业Detail全部承载

挑食Detail全部承载

虾米Detail全部承载,暂未上线

旅行Detail部份后端接口

等等……

其它业务场景

高速业务场景:针对大型的垂直业务或快速发展的业务,在除主站Detail集群即主平台外,只需采购所需的业务模块(也可远程调用),就可以在独立集群再进行部署,业务方只需关注自身模块的开发迭代,其余的模块包括基础框架均由Detail团队负责推送更新,便可自行掌控所有权限和节奏,还能共享同一套CDN静态化体系。如当业务成熟、需求逐渐减少,认为有必要时,只需向Detail团队提供模块即可回归主平台。

无线终端场景:某APP或HTML 5端需要部份接口,Detail直接提供远程服务或将所需要的模块接入MTOP

非详情的场景:某页面需展现SKU,可将Detail前后端的SKU模块拿走,从后端数据到前端渲染及SKU选择计算就统统包括;某页面非商品详情但需展现卖家档案可结构略不同,则复用卖家档案模块,前端部份自行实现。复用时可直接拿走卖家档案模块包自行部署提,也可找Detail团队先沟通后直接调远程服务

等等……

via:aliyun

End.