移动极速交付体系

简介: 在云栖TechDay 活动第二十八期上,淘宝无线技术专家子之讲述了如何快速构建一套用于支撑营销类型产品的快速交付体系。

在云栖TechDay活动第二十八期上,淘宝无线技术专家子之讲述了如何快速构建一套用于支撑营销类型产品的快速交付体系。他提出具体的解决方案是通过不同复用类型的活动解决方案的组合,以最快的效率达成业务上的诉求。


业务特征

营销活动形式多样,且经常在双十一这样的焦点事件中。

1f42968e90aecc3df050a0c656d2c006ec8249f1 

上图很好地反应了营销类业务特色:以双十一为分界点,在此之前手淘用户在线整体流量比较平稳;但在双十一之后,整个模型发生突变,呈过山车式,流量在前一分钟激,在下一分钟又会下降;在这种业务特色下,开发团队面临着巨大的挑战:首先是超大规模流量,峰值达到百万,这对系统的性能、灵活性、稳定性都有很高的要求;其次,这类活动通常在线周期短,但活动频次由特别高,会面临很多活动临时叠加功能等各类问题。

无论是阿里这类的成熟公司还是小型创业公司,对于营销活动而言,都面临着共同的境遇:一是传统工程模式笨重、耗时,跟不上业务前进的脚步;二是营销活动在开展过程中,有很多事情单靠前端无法完成,还需要多个服务端、客户端配合;很多情况下都是拼体力、重复劳动,缺乏技术积累。

 

极速交付模式

经历了一系列痛苦之后,在2014年初,提出来释放生产力,规模化地快速解决此类问题的方案——极速交付模式。

20d7ff7e0586c3b764da3a668b48fc952a88673c 

从宏观上看,所有的公司拥有的资源和面临的环境都是一致的。因此,可以把活动进行分级,将业务和团队业务做了分开,其中一部分业务称之为模板,可以直接快速配置完成此类业务开发;还有一部分是插件组装业务,需要提前进行积累;剩下的业务就是真正需要研发的业务,每一级别的业务都对应着不同的解决方案。其中对于高复用类型的部分需要模板化,使得可以通过配置直接完成;部分复用的共性功能插件化,以便于快速组装;对于真正需要研发参与的业务,要做到提速不可复用类型活动的研发。

模板化

bbf70a673f759197e76d25503c9bb82e2d74ac15 

在模板化方面,首先需要将需求进行梳理,之后再将其输出到前后端的模板上,通过在该模板上添加一份数据配置生成活动。换句话说就是将活动拆为模板和数据配置两部分,线上所有活动都是由N个模板和M份数据配置生成NXM份活动。

模板基本上作为活动原型,需要通过平台进行实例化去生成活动,然后再通过数据配置完成差异化和素材内容的填充,最终生成线上活动,整个过程开发人员不参于。

1a542b1eb53082204ad4701efbebb8c18cd167c4 

在模板方面,对淘系业务而言,相对较为单纯,早期无非是各类流,如图片流、卡片流等。其中图片流失通过图片+链接可以完整表达所有信息,具体实现是将页面切成很多行,每一行都是一个小区块,在前端代码处理上,每一行内的图片会根据上传时的尺寸自动布局分割。

除了前端模板化之外,还向后端进行了延伸,在服务端进行模板化,首先将业务进行抽象,之后再利用服务加数据的方式生成对应的活动接口。通过服务端模板化,手淘团队也沉淀了一些互动系统,如抽奖系统、排行榜、淘口令服务、活动评价等等。

插件化

ba4a836ac8907d0e45228ba9755afb35235bd351 

模板化看起来是解决了很多重复性工作,但对于差异化的部分,模板是无法满足需求的。因此,手淘团队将这部分差异化的东西组件化,如淘长图、云中转之类,可以通过配置化的方式让被人将各个组件去合成最终的业务。

ca55ff79e3d5a3a4b09edea47ffe30fca058ec10 

这其中的核心点在于通过系统增加上数据配置,一般运营人员是不懂技术的,为了便于运营人员使用,开发了MT页面服务。在MT中,数据定义分为面相开发者和运营人员两类。

开发和运营人员操作完成后,如何将这套服务提供出去呢?实际上,数据平台本身作为一个独立的服务,该服务共分为几块,一块是小二后台,它只完成两件事情:数据的定义个数据的填充。小二平台做完后会把这些数据送给数据服务模块,数据服务模块将数据存储下来,并通过CDN、MTOP以及其他服务提供给他人使用,最终通过CDN或者其他安装服务,让客户端、H5页面都能够直接使用。   

研发提速  

对于Buy+这类产品,是没有任何组件可以利用的,属于一个全新的项目,能够做的就是研发提速:首先在服务端上化繁为简,进而使得客户端更加灵活和自由;同时希望前端互动开发更轻松一点,效率更高一些;还希望能够和业务公共成长,有一个数据看板即时反馈结果,能够在业务上做一些判断。

服务端上化繁为简

99e7c86561b639ee116b7708650e84d1ad49c3ad 

在服务端的接口层面抽象,将所有的API统一成一类API,这一类API分为三种:普通不可登录接口、普通登录接口、安全登录接口。在入参上面,将参数分为两种,第一种是活动标识;第二种是活动入口的参数。基于这个模型,把所有的API归纳成一个统一的API,前端只用这类API即可。这类API 沉淀为APLATFFORM平台,该平台使用Groovy作为开发语言,工程成本较低,内置了测试工具,可以快速完成API测试、脚本管理以及发布管理等等事情。

客户端更加灵活和自由

服务端问题解决后来看一下客户端问题。客户端的核心问题比服务端更严重,首先客户端上线以及下线的节奏会难上很多倍,通常而言服务端代码写完之后,还可以进行流量测试,判断哪些功能被使用,然后再进行相应的功能删减;但客户端不行,因为客户端不知道谁再用,也不可能把所有的用户日志全部记录下来,只能采用抽样的方式,去抽取一些核心指标。因此,一旦新功能上线之后,在客户端功能是不敢轻易下线的,进而导致手淘安装包的大小一直在增长。该怎么解决呢?我们通过额外的东西实现在不增加手淘版本的情况下完成对UI和API功能的扩展,对应的产品分别是Poplayer和Slience,现在来重点介绍下Slience(Poplayer在其他分享中会重点介绍)。

7621498013818f8f76937af91dddb05182c2ac35 

 

Silence项目是在2016年双十一之前启动的,之所以叫做Silence是因为它完全不需要用户主动更新,是一个纯静态的行为。Silence设计用来在无需发版的情况下,动态加载脚本来扩展客户端API功能;服务端通过配置下发脚本到客户端,客户端通过hotpatch/dexloader机制动态加载类,H5调用统一的jsBridge,通过路由调用具体的方法。Silence的好处是可以随时随地扩展客户端功能,而且不增加客户端安装包大小;下线后删除脚本不堆积在客户端,对于增加性能消耗的功能,只在脚本运行期间产生额外开销。当然,也存在不足之处,Silence是基于脚本设计的,它都C层的API几乎完全无力支持,并且性能会比原生更低点,不适合做太复杂的运算逻辑。

6e972473882e8a8da60837d37bdaf95ef60fd93f 

那么Silence是如何构建的呢?在Server端,通过在云端完成整个脚本的发布和打包,加密后再发送到CDN上,将CDN作为下载的入口;脚本准备好之后,同时再通过ORANCE推一份配置给到客户端;ORANCE会告知脚本管理系统需要下载所需的脚本,下载的前提示脚本要足够的小,在几十K到一两百K之间;对业务来讲,大部分是通过H5或Poplayer这两个入口进入,这两个入口通过jsBridge API调用Silence模块,然后该模块会根据活动标识判断是否存在此类活动,如果有此类活动,则会将该活动加载起来,这里可能会出现两个意外,一是没有得到配置,也就是脚本上不存在该配置,此时需要去服务端主动查询是否有该活动;第二是配置上有,但脚本不一定有,如果没有脚本会尝试下载脚本并且运行,通过这种方式可以非常静默的让手淘版本快速获得Native的功能。

 

互动常用的动画开发模式

f6f4a761f2d2aabed8f75a7e14801d263026950d 

在前端开发时遇到一个严重的问题,当在开发互动项目时,运营人员不断提需求,希望动画效果更加炫酷,有更多的互动。传统的方式需要设计人员先进行设计,之后再将设计成品导成视频文件或FLSH,便于技术人员使用。也就是说,在没有一个完整的动画解决方案之前,大概需要一个专家级别的工程师耗费一天才能完成这一个动画的制作,耗时耗力。

32d69b43024349ffe67fe679915d863ba1a1675a 

为了降低动画开发成本,我们提出了AFT解决方案,希望通过AFT解决方案,将动画描述变成一个API接口,降低开发成本;同时使得动画组件积累可复用,同时降低与设计师的沟通成本。

f8e3d19af86b49efc6dd92724e2c067c5d426f19 

基于AFT开发模式,我们希望在构建动画这件事情上有所积累,让技术同学真正从体力活中解脱出来,与设计师处于一个相对自然顺畅的沟通模式,让一线的施工者转变为设计者。因此,需要配合者整个设计工具和设计体系与工程师一道通过AE/AC等动画工具,去导出AFT可以消化成品。所以会将其进一步向DSL和解释器方向发展,最终的目是能够像做模板一样,将重复的简单耗体力的事情快速解决。

7a23649f786ec4a10cc3248795522e7fbf033081 

经过上述优化,目前可以做到产品5分钟上线,但是该产品的效果如何,并不可知,该怎么办呢?通过将上述系统所有数据结合,打通业务与行为数据,形成统一的报表,定义出在互动领域的模型;再通过该模型进行一些基础的数据分析;再加上实时的指标进行汇总。在整个过程中,数据埋点与收集全部自动化进行,开发与业务可以不用关心,可以通过数据看板即时查看反馈结果。

 

移动营销极速交付体系

426f04c9e344bbad78947e194c609ca5c3d12208 

上图是移动营销极速交付体系的技术层面的大概框图。根据需求进行模板化、插件化、测试支撑、投放支撑以及数据看板等等,形成了较为完整的解决方案。除了技术层面之外,也进行了其他层次的探索,例如根据前端和Native能力进行WebGL、WebVR、AR、3D等探索,旨在为未来应用降低成本,快速上下线。

         2f5662862070c8e1abb5df7dbba69458236e8c69

最后来看一个经典的极速交付实践案例。双十一期间红包项目发送总金额有九千万左右,这九千万分三天发放,每天几千万,双十一当天是六千万左右。整个项目是通过Poplayer提供的火山弹出渠道,在会场和首页弹出红包火山,在开发时首页和会场页都不知道红包火山的存在。

在整个过程中,Slience提供了与首页的联动能力,能够从首页滚动到底部;流量方面,利用APLATFORM承担流量中心,能承受瞬间百万量的级别;抽奖采用Wlp承担,同时采用AFT制作动画,加快了项目研发效率,可以说整个项目中几乎用到了所有的基础技术。

在双十一快结束时,交易额已经突破一千亿,当时老板希望整个交易额能够凑个整数,需要再发红包。老板的决策是在11点下达的,从需求到上线最终只用不到半个小时。如果采用传统的方式根本不可能完成,但通过Poplayer和投放系统合作,将红包火山再弹多次;其次在搜索中又添加了其他命令,瞬间完成任务。

总结来看,之前做营销活动,更多的是煎熬,是在拼体力;但是有了今天这些解决方案之后,创造了很多不可能。将精力从上线、发布、测试中解决出来集中于攻克技术难题,提高用户体验以及业务逻辑的完整性。

相关文章
|
11月前
|
运维 容灾 架构师
《云上容灾交付服务白皮书》——5.交付典型案例——5.3 交付流程标准化
《云上容灾交付服务白皮书》——5.交付典型案例——5.3 交付流程标准化
112 0
|
11月前
|
运维 监控 容灾
《云上容灾交付服务白皮书》——5.交付典型案例——5.5交付成果保鲜化
《云上容灾交付服务白皮书》——5.交付典型案例——5.5交付成果保鲜化
125 0
|
11月前
|
容灾 安全 云计算
《云上容灾交付服务白皮书》——4.交付标准化评估要素
《云上容灾交付服务白皮书》——4.交付标准化评估要素
78 0
|
架构师 Devops 测试技术
从交付产品到交付价值
从交付产品到交付价值
121 0
从交付产品到交付价值
|
敏捷开发
敏捷研发体系基础
敏捷研发体系基础
196 0
敏捷研发体系基础
|
敏捷开发
《规范敏捷交付:企业级敏捷软件交付的方法与实践》——导读
DAD是Scrum和RUP这两个极端之间的折中,而且恰到好处,因为Scrum是一个轻量级的过程框架,仅仅关注在交付过程中的一小部分,而RUP是一个涵盖完整交付周期的综合性过程框架。DAD注重敏捷交付的基础,而同时又保持充分的灵活性,企业可以对它进行定制,从而使其适应企业自身的环境。
2813 0
|
机器学习/深度学习 人工智能 缓存
将SAP纳入统一运维体系
将SAP纳入统一运维体系
将SAP纳入统一运维体系
|
运维 Kubernetes Cloud Native
高效研发运维体系构建的流程和方法论
云计算产品大多都会与云原生发生关联,云原生正在重塑整个软件的生命周期。但到底什么是云原生?云原生带来的最大技术创新和未来机会是什么?围绕云原生,是否可以构建出一套云上的开发&运维体系,打造新一代研发平台,实现研发效率的最大化?
高效研发运维体系构建的流程和方法论
|
项目管理 持续交付 前端开发
为什么你的高效交付,却没有好的业务成果?
11月中旬,作者在 TOP 100 案例和人人都是产品经理的两次大会上分别进行了两场关于价值交付的分享,结合分享后的反馈焦点,立足业务整体交付的价值最大化,特产此文。
1968 0
为什么你的高效交付,却没有好的业务成果?
|
监控 安全 数据库
构建完整的企业信息安全体系
对企业来讲,无论如何规划业务,信息安全作为保障企业关键数据的措施始终是最重要的一块。不过现在有另外一种划分业务的方法,IT决策者在决定如何规划信息安全这项业务的时候,会利用企业敏感数据的信息来提供安全情报,并据此来做出最合适的数据安全管理措施。
1913 0