十年磨一剑 | 淘宝如何打造承载亿级流量的首页?

 

阿里妹导读:手机淘宝作为整个互联网领域旗舰 APP 之一,装机量和用户访问量都是名列前茅的。而首页作为打开手机淘宝的门面,是淘宝电商领域的主要流量入口和服务消费者的核心阵地,其业务的复杂性之高、系统的稳定性之重都有着极高的要求。首页承载着非常重要的业务使命,负责整个阿里生态的业务分发和商业策略输出。随着淘宝无线化战略的升级,首页也从 PC 时代类目导航的导购模式升级为无线时代个性化推荐的导购产品,从传统的千人一面走向未来的一人千面,决定了首页多样性、创新性、多变性业务特点。

背景

和猫客、飞猪、盒马、闲鱼等APP一样,首页无论在哪个体系下都是主要的流量入口,分发效率一直是我们追求和解决的核心问题。

如何让最优的商品和内容高效的触达消费者侧,提升流量价值,一直是我们追求的目标之一,截止当前我们进行了不同方式的探索,实现和积累了一些策略来解决这个问题。

当前首页根据不同的地域、人群划分出“大陆版”、“亲情版”、“村淘版”、“海外版”的业务版本,这些版本即传承手淘首页的通用能力,同时通过自身运营的自由度和独立体系,展示自己的垂直区域特色内容,更加高效的触达自身服务范围的用户。

比如“海外版”是针对非大陆用户以外的香港、台湾等地区的页面投放,“村淘版”则是围绕乡村地区,实现村淘的业务目标的重要的流量分发渠道。“亲情版”则是针对家庭关系用户进行业务模块的精准分发。

 

图:首页大陆、亲情、海外、村淘版本

新的挑战

随着首页整体业务策略的不断调整以及技术栈的不断升级,我们尝试基于人群、地域等属性进行的细粒度的人货匹配的运营策略。

一方面通过为不同人群定制差异化的视觉样式、用户路径、货品供给培养特定的用户产品心智,另一方面通过平台能力快速灵活的进行页面布局调整,能让需求爆炸式增长的同时也能快速的响应。

同时在面对提升分发效率上面不断演进的运营策略升级,需要我们技术侧提供一套高效稳定的常态化的运营体系对其进行支撑,对我们技术系统的建设也提出了极高的挑战,这里的挑战既有业务的也有技术的。

多版本隔离运营

这里面有两个关键字“多版本”和“隔离”,其中“多版本”是基于业务诉求的考量和抽象,面向用户的基本实体就是页面,这些页面主要由页面布局、货品供给、素材渲染几个因素构成,而针对不同目标群体需要有所差异化的透出,所以就需要在页面级别、模块级别和坑位级别针对不同人群、地域进行多版本的搭建运营。

在完成“多版本”运营的业务诉求的一个大前提是基于稳定性的考虑,“隔离”很好的诠释了在多版本下首要去关注的稳定性要素,一方面要保证不同版本的变更所带来的跨域影响问题,另一方面是按业务租户的方式为不同的业务开辟独立的运营体系,基于以上两方面考虑我们整体采取容器化的隔离机制实现业务运营之间的操作带来的风险规避。

所以在打造运营平台体系首要考虑的就是如何支持多版本下的隔离运营能力,大陆版、海外版、村淘版、亲情版这些独立的业务版本下如何自由的、稳定的衍生自己的方案投放是我们首要考虑的问题。如下图所示,是我们经历一场大促不同时期首页需要备战的方案矩阵。

图:首页多版本运营

快速灵活布局搭建

说起搭建,阿里集团生态体系下不乏有一些优秀的产品,比如天猫 Zebra 系统、淘宝 TMS 系统等,都是在页面搭建领域具有极高的产品口碑,基于灵活的模块化机制,致力于让运营同学能快速地搭建出符合业务需求的页面。

手淘首页的页面搭建作为我们日常工作中一类高频率的运营操作行为,需要高效、灵活的平台化解决方案,才能提升我们整体的研发模式和产出效率。所以我们以提升效率为目标,提升协同效率为诉求,一方面可以拉动运营角色参与到手淘首页体系的日常建设中,另一方面可以更加高效的产出不同业务场景的页面布局。

如下图就是三套页面方案的模块差异。

图:首页搭建方案差异

流量运营闭环建设

在首页大流量的场景下,任何业务决策的调整就像一把双刃剑,一方面可以让业务在这样的体量下快速孵化快速迭代,另一方任何调整在这样大流量的冲击下问题都会被成倍放大,风险和收益共存。

所以首页缺少一套从运营策略、数据收集、业务决策的闭环体系来使业务快而稳的奔驰。在过去的时间里我们沉淀了很多能力孤岛,单看每个岛屿都是一个完整的生态,但是岛屿间横跨了无尽的大海,这样不构成流程化体系化的平台,无论运营、开发、测试都是相互割裂的实体。

从运营路径来看,这些单点能力只会让他们只有输入没有输出,走了一步不知道下一步该怎么办,所以我们要基于科学的运营体系构建流量运营闭环。

图:流量运营闭环

组件抽象和复用

何为组件?

组件(Component)是对数据和方法的简单封装,组件可以将 UI 切分成一些的独立的、可复用的区域,这样你只需要专注于这些单体的逻辑开发。

所以我们基于组件化协议将整个首页 layout 进一步拆分成多个组件,其中每个组件构成页面的基本单位,用于渲染单一业务的基本区块。

首页的组件渲染是典型的 MVVM 的模式,端侧( View )和服务数据( Model )通过组件化协议( ViewModel )进行双向通信,一方面通过抽象组件协议解耦两端的耦合性问题,另一方面通过实例化组件实体完成了页面间的复用问题。

那组件协议本身的抽象和定义是我们首先需要去面对的问题,设计过于复杂、抽象过于碎片会使协议难于维护前后端联调沟通成本放大,设计的过于精简、抽象过于大支又起不到解耦的效果,这些都是需要我们长期思考和解决的问题。

图:组件化协议

动态化和实时性

前面几项总结其实都是基于业务上的挑战,而技术层面真实要面对的主要可以分为动态化和实时性的问题,动态化是实现实时性的主要手段,实时性又是动态化的方案考虑首要因素。

首先从业务诉求上面讲,首页是一个典型的中心化业务场景,快速响应是我们首要面对的问题,日常需要频繁根据业务策略调整布局,以重新分配流量,特别是大促态下,调整尤为频繁,对动态化和实时性的要求极高。

现如今需求量与日俱增,变更迭代速度从过去天级别到现在小时级别,就是在动态化和实时性上面做了很多体系化的建设,其中一方面我们在端侧协议引入了新奥创和 dinamicX 的动态化解决方案,另一方面服务端上面做了很多诸如 FAAS 化的动态化数据编排的能力,使我们在实时性上面有着不俗的成绩,无论是业务上线、功能迭代还是异常回滚都是在秒级生效。

图.模块位置动态化实时调整

关键变革

面对诸上不同维度的挑战和难题,如果利用传统的技术架构和产品体系远远不足的,无论是在团队协作、流量管理、研发流程都存在很大的问题。

所以,我们需要变革,变革是对事物本质的改变,是对现在不完美的洗牌,是不断的选择妥协和修正,这个过程是痛苦的艰难的,但是我们坚持下来了。

端侧协议升级

在我们体系建设之前端侧协议还是面向场景的单向协议,前后端的耦合度十分高,改动周期按月计算,迭代成本巨大。为了更好沉淀运营体系,提升效率,我们客户端和服务端对协议做了深度的分析和抽象,从两方面进行了升级和改造。

一方面针对组件协议进行了更高的抽象和升级,彻底完成了首页体系下的组件化的改造,将面向场景的开发模式转变成面向容器的开发模式,从而降低客户端和服务端的耦合性,提升了组件的复用性和扩展性。

另一方面我们引入了端侧两大动态化解决方案,其一新奥创协议,该协议抽象了数据、事件、布局、模板的协议结构,核心是以页面动态化技术作为支撑,同时将动态化覆盖到native,h5等场景。另外一个是DinamicX的模板化解决方案,DinamicX在组件的粒度实现了布局的动态化,从而提升了业务整体的迭代效率。

图:端侧协议升级

试金石的产品体系建设是就是基于以上组件化协议和端侧动态化方案之上,扩展和沉淀了基于导购域特有的上行和下行标准,增加动态分页、导购域特有事件、 SPI 扩展等内容沉淀的一套面向运营闭环的平台化产品。

研发模式升级

前言中提到首页的第一要务是要在巨量 DAU 的挑战下满足整个阿里生态的业务分发和商业策略输出,所以势必决定了首页是一个典型的中心化开发模式场景,集团几乎所有的核心业务都需要在首页进行孵化和表达,在这样的背景下我们面临着两个主要矛盾:

中心化研发模式与业务需求爆炸增长的矛盾:一方面核心业务在首页的UI和业务逻辑发生变更的时候,大部分需求都会由首页技术团队来拆解和落地,另一方面首页产品自身也在快速迭代和创新。当大量的业务创新碰到中心化研发模式时,带来的必然是需求的堆积与迭代的变缓。而为了解决这样的问题,通常解法只有两个‘排期’和‘简化’,排期可以优先保障效果,带来的条件就是上线时间无法按时。简化可以快速上线,带来的条件就是效果达不到预期。

图:中心化研发模式

业务快速迭代与系统稳定性的矛盾:我们生活中做事情常常被要求更快更好,然而快和好本身就是矛盾体,常常只做到好或者只做到快。在需求体量到达一定程度之后,资源不够是一方面,单资源所能投入的精力也是有限的。要保障业务快速迭代,就需要频繁的变更和实时的生效,频繁和实时本身就会带来稳定性方面的问题,而且最为重要的在首页这种大流量下一些小问题不易暴露和发现。

涅槃重生

我们从问题本质出发,找到切实有效的解决方法来应对挑战和问题,借用一下梁宁老师钉子与洞的类比,用户需要打孔机,是不是给用户生产一个打孔机还是说为用户墙上打个洞,所以问题的关键是我们需要提供什么产品或服务让用户的墙上有个洞。

经过团队成员多次实践和尝试,围绕着复杂多变的业务场景,基于打破传统研发模式,构建出基于数据化运营的搭建、流量、资源和数据的闭环,试金石横空出世。

图:试金石架构组成

可视化组件搭建

将首页的业务形态进行模型抽象,分别抽象出页面场景、页面版本、页面方案三个维度对一个首页产品体系进行描述,基于这套模型体系进一步将页面模块进行组件化抽象,多个组件构建成一个页面方案,并且和流量运营侧进行打通。

可视化组件搭建能力建设核心要素是两个,一个是组件模型的抽象,上文中提过“设计过于复杂、抽象过于碎片会使协议难于维护前后端联调沟通成本放大,设计的过于精简、抽象过于大支又起不到解耦的效果”。

所以我们使用动态 schema 的方式定制化组件协议,由业务按需设计,既保证了协议标准又可以支持业务差异化;另一个要素是可视化能力,我们借助 DinamcX 的动态 H5 渲染效果完成可视化的能力建设。

图:可视化组件搭建示意图

系统化流量运营

首页核心是解决流量分发效率的,工欲善其事,必先利其器。

提供一套系统化的流量分配运营体系是我们构建试金石的初衷,也是试金石所能带给业务的最大价值所在,前文提到首页作为流量入口,几乎所有的核心业务都需要在首页进行孵化、创新和表达,在这个过程中不仅需要AB实验的这样的方案最优化途径,还需要灰度小流量上线模式,既要保证业务的迭代还要保证系统的稳定性。

我们主要从三方面建设,分别为:

  • 分流点设计,通过设计可扩展的分流模型,有效的把控流量的走势;
  • 投放规则沉淀,通过原子化的规则设计,保证流量的精细化;
  • 数据通路建设,通过进行埋点协议设计并进行数据回路实时反馈结果。

图:实验流量采集

标准化研发流程

试金石打破首页中心化的研发模式,重塑多角色使用路径,将需求迭代变更流程细化抽象,将开发配置流程拆分。

一方面让链路流程标准化,减少人的沟通协作成本。另一方面将平台产品化让更多的角色参与进来,达到提升研发效率的目的。同时接入测试的自动化工具,使业务频繁变更和系统稳定性达到平衡。

图:试金石标准化研发流程

总结

试金石体系具备了搭建、投放、分流、数据四个方面的平台产品化能力,共同构成一个以数据化驱动的运营体系,支撑了首页、轻应用产品的快速迭代,可承载业务策略秒级快速上线,承载同时亿级用户的流量冲击,在双十一狂欢节期间我们链接起18万品牌到6亿消费者的流量通道,保障狂欢节期间拿下 2135 亿的成交额 。在核心大促双十二、年货节、春晚期间为消费者购物保驾护航,提供稳定如丝滑般购物体验。

我们完成了阶段性目标,让运营和研发成本降低了一半、让运营可以参与到页面搭建、流量分配中来,使中心化的模式得以释放,提升了首页的整体的研发效率,后面还有很多优化和功能的迭代等着我们,还有更多的场景需要我们去支持,我们有信心我们有理由相信试金石会更好!


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

switchhosts 没有修改hosts的权限解决方案

使用swtichHost工具切换开发环境时候提示没有权限问题,如下图。。 解决方案有两点 1、进入 C:\Windows\System32\drivers\etc右键点击hosts的属性查看 属性的只读是否被勾选了,如果被勾选了将勾选勾去掉 上述完成后以管理员身份运行(管理员…

闲鱼亿级商品结构化背后的思考和演进

1. 缘起 闲鱼是一个典型的C2C场景的闲置交易平台。每个在闲鱼的用户都能享受到自由交易的乐趣。在这里,可能你只要简单的输入商品名,商品价格,库存等信息就能完成一个商品的发布。即便是发布以后,你也可以随时修改价格&#xff0…

QingStor NeonSAN跻身四强 新风口下的青云QingCloud正在厚积薄发

人类以日新月异的速度刷新着科技的成果,其中存储的发展历史尤其悠久,堪称万年进化史。自文明诞生以来,我们就一直在寻求能够更有效存储信息的方式,从4万年前的洞穴壁画、6000年前泥板上的楔形文字,到今天正在普及的SSD…

python3-pandas DataFrame 索引、bool索引、pandas 字符串方法

1、DataFrame 索引 1.1 普通索引取值 pandas 取行或者列的注意点: 方括号写数组,表示取行,对行进行操作方括号写字符串,表示取列,对列进行操作 import pandas as pd import numpy as np # pandas 取行或者列的注意…

记一次Cassandra Java堆外内存排查经历

背景 最近准备上线cassandra这个产品,同事在做一些小规格ECS(8G)的压测。压测时候比较容易触发OOM Killer,把cassandra进程干掉。问题是8G这个规格我配置的heap(Xmx)并不高(约6.5g)已经留出了足够的空间给系统。只有可能是Java堆…

程序员内功修炼系列:10 张图解谈 Linux 物理内存和虚拟内存

来源 | 后端技术学堂责编 | Carol封图 | CSDN 付费下载于视觉中国我们都知道,程序可没这么好骗,任你内存管理把虚拟地址空间玩出花来,到最后还是要给程序实实在在的物理内存,不然程序就要罢工了。所以物理内存这么重要的资源一定要…

阿里高级技术专家方法论:如何写复杂业务代码?

阿里妹导读:张建飞是阿里巴巴高级技术专家,一直在致力于应用架构和代码复杂度的治理。最近,他在看零售通商品域的代码。面对零售通如此复杂的业务场景,如何在架构和代码层面进行应对,是一个新课题。结合实际的业务场景…

Android Studio 安装教程

注意安装之前请配置好java 和 Android SDK 1、下载 官网地址: https://developer.android.google.cn/studio/ 点击下载后,需要同意协议: 2、安装 1、双击程序 2、一路 next,如果想修改路径可自行修改。 3、安装完成点击Fi…

Schedulerx2.0工作流支持数据传输

1. 前言 Schedulerx2.0是阿里中间件自研的基于akka架构的新一代分布式任务调度平台,提供定时、任务编排、分布式跑批等功能,具有高可靠、海量任务、秒级调度等能力。 Schedulerx2.0提供可视化的工作流进行任务编排,该文章将详细介绍如何使用…

应用实时监控 ARMS 上线用户行为回溯功能

随着前端技术日新月异迅猛发展,为了实现更好的前端性能,最大程度提高用户体验,支持单页应用的框架逐渐占领市场,如众所周知的React,Vue等等。但是在单页应用的趋势下,快速定位并解决JS错误却成为一大难题。…

Android Studio 创建第一个Android工程项目

1、打开Android Studio 2、点击 New Project 选择 Empty Activity 3、点击 Next 4、点击 Finish 等待加载完成,取决于网络,第一次加载可能要很久。。。 5、下载完成 可以在右上角切换为 Project 模式 6、创建一个虚拟设备 https://www.bilibili…

我竟然混进了 Python 高级圈子!

现如今,计算机科学、人工智能、数据科学已成为技术发展的主要推动力。无论是要翻阅这些领域的文章,还是要参与相关任务,你马上就会遇到一些拦路虎:想过滤垃圾邮件,不具备概率论中的贝叶斯思维恐怕不行;想试…

Tablestore + Blink实战:交易数据的实时统计

背景 交易数据的实时统计是电商网站一个核心功能,可以帮助用户实时统计网站的整体销售情况,快速验证“新销售策略”的效果。我们今天介绍一个基于表格存储(Tablestore)实现交易数据的实时计算,给大家提供一个新使用方式。 Tablestore作为在…

无标注数据是鸡肋还是宝藏?阿里工程师这样用它

阿里妹导读:针对业务场景中标注数据不足、大量的无标注数据又难以有效利用的问题,我们提出了一种面向行为序列数据的深度学习风控算法 Auto Risk,提出通过代理任务从无标注数据中学习通用的特征表示。这种思想与目前 NLP 领域前沿的 Bert 等预…

Android 控件 - TextView

1、TextView https://www.bilibili.com/video/BV13y4y1E7pF?p3 1.1、layout_width、layout_height match_parent:表示让当前控件的大小和父布局的大小一样,也就是由父布局来决定当前控件的大小 wrap_content:表示让当前的控件大小能够刚好…

为什么选择Cassandra

cassandra概况 为什么选择Cassandra?cassandra到底有那些令人印象深刻的特点呢?不防我们先来看下cassandra目前的大体概况。 理论扎实,师出名门 cassandra不仅吸收了dynamo论文中的如何做分布式,如何做副本复制,故障…

加速开放混合云技术开发,满足客户新需求,红帽打出这套组合拳!

云计算发展有几十年的历史了,随着科技的进步和发展,云技术慢慢渗透到各行各业,企业上云也不再是新鲜事,据《2020-2026年中国云计算行业市场分析预测及战略咨询研究报告》数据显示:2018年,以IaaS、PaaS和Saa…

系统性能提升利刃 | 缓存技术使用的实践与思考

导读 按照现在流行的互联网分层架构模型,最简单的架构当属Web响应层DB存储层的架构。从最开始的单机混合部署Web和DB,到后来将二者拆分到不同物理机以避免共享机器硬件带来的性能瓶颈,再随着流量的增长,Web应用变为集群部署模式&…

Android 控件 - Button

1、Button 1.1、新建 mybutton 模块 在原有项目基础上新建 mybutton项目 1.2、Button基础 在源码中Button继承TextView,所以TextView有的功能Button基本都有,重复功能不在赘述 1.2.1 设置button背景颜色 当使用background不起作用时&#xff0c…

通过SQL即可让监控分析更简单更高效

1.前言 阿里时序时空数据库TSDB最新推出TSQL,支持标准SQL的语法和函数。用户使用熟悉的SQL,不仅仅查询更简单易用,用户还可以利用SQL强大的功能,实现更加复杂的计算分析。 2. 为什么需要用SQL做时序查询? 2.1 SQL拥…