草庐IT

vivo平台化实践探索之旅-平台产品系列01

Yang Yang 2023-03-28 原文
作者 | vivo 互联网平台产品研发团队- Yang Yang

本篇为《vivo 平台产品》系列文章的第1篇。主要描述在业务高速发展的背景下,vivo软件工程师通过系统平台化建设等手段,逐步解决软件复用,快速响应业务变化等棘手问题的过程。我们从中精选出内容审核平台、AB实验平台、版本发布平台等具备代表性的平台产品,为大家对平台化的经历进行详细的介绍。

一、平台化

1.1 业务现状

vivo的互联网业务起始于2011年,经过多年的发展,vivo互联网各核心应用的日活均已达到千万级以上,截至2022年vivo累计用户数已经达到了5亿。以应用商店、浏览器、视频、游戏中心、钱包、官网商城为代表,逐渐形成了以广告、分发、游戏为核心的互联网商业模式。

1.2 问题

当今大型互联网企业的业务类型非常广泛,多业务单元并行发展,业务的复杂度越来越高,企业内部也在不断的进行技术上的升级和业务上的调整,比如引入微服务架构和业务边界重新划分。微服务的演化导致耦合于业务系统内的公共能力难以复用。业务边界的重新划分往往伴随着组织架构的进一步细化,这样的细化会导致同一类问题的重复性解决,造成资源的浪费。因此如何抽离多业务线公共的能力,集中管控与演进,以避免重复的投入,快速支撑业务的迭代,成为企业内部急需解决的问题。

1.3 平台化

平台化的架构演进是业务发展到一定规模必然要面对的选择,其核心就是将某一领域问题从业务软件中解耦出来内聚为一个独立平台集中管控,并不断演化出标准与边界都逐渐清晰的平台生态,一站式的解决一类问题,在组织内部实现高效的复用,支撑业务快速迭代。

在过去几年,vivo互联网经历了体系化的技术建设,从各个团队单体烟囱到服务化,再到如今平台化,vivo逐渐形成了自己的一套平台生态体系(如图一)。在过程中我们也遇到了很多技术、组织等诸多方面的挑战。我们即将为读者带来一个专题文章系列——vivo平台化建设,本篇则为专题系列文章的启航篇。

二、优秀案例

经过多年的发展,vivo互联网在平台化建设上取得了非常显著的成效,已经完成多个平台产品的建设,并涵盖了多个业务领域。活动运营方面有悟空平台;质量管控方面有内容审核平台和监控平台;策略分析方面有版本发布平台和AB实验平台。本节主要从中选择一些优秀的平台化建设案例进行简单介绍,后面专题文章系列会对这些平台进行更加全面和深入的介绍。

2.1 内容审核平台

2.1.1 背景

2016年以前,vivo的互联网业务开展之初,与用户交互的各个系统(比如帐号、游戏论坛、官网社区)都建立了自己的敏感词过滤能力,实现简单的违规内容拦截功能,随着vivo互联网业务的迅速崛起,vivo生态的内容开始变的多样化起来,从最开始单一的文本内容到现在文本、图片、资讯、视频,内容发生了翻天覆地的变化。文本/资讯数据量大,违规场景复杂,非专业团队审核难度极大;图片场景多种多样,违规图片层出不穷,更是涉政涉黄重灾区;音视频/直播场景日益丰富,主播素质参差不齐,违规内容泛滥成灾,严重影响了品牌形象。

2.1.2 自研内容审核平台

原先vivo的内容主要是依赖第三方平台来进行审核,随着业务的快速发展,这样的模式已经不能满足vivo业务发展的需求,加之整个行业都在加大对内容审核的投入力度。为了更好的保证vivo内容的安全,让我们的用户获得更加极致的体验,同时为了提高系统能力的复用,vivo决定从零开始自研内容审核平台。

2.1.3 内容审核平台现状

vivo内容审核平台具备内容安全审核、内容质量识别、数据标注和舆情收集等能力。运用"机审+人审"双重保障的方式为业务的安全和质量保驾护航。机审能力主要包含AI判断、黑/白名单体系,敏感词体系,直播流实时监控机制以及前台举报机制,目前图文判断准确率达到98%,已达到业内领先水平。人工审核则配备具有相应专业知识和技能的专职人员几百名,7*24小时进行互联网信息的审核过滤,确保网络信息安全。

2.2  AB实验平台

2.2.1 背景

互联网企业经历过野蛮生长期之后,逐渐越发重视产品发展的科学化、精细化,从粗放型向集约型转换。在美国,增长黑客等数据驱动增长的方法论,正在帮助如Google、Microsoft、Facebook等全球科技巨头实现持续的业务增长;在国内,通过数据精细运营、AB实验分析来驱动业务有效增长也逐渐成为共识,成为企业存量数据运营的核心手段之一。其中,AB实验作为典型代表,自然成为了国内主流公司中必不可少的核心运营手段,有效的提升流量的转化效率和产研的迭代效率。

2.2.2 什么是AB实验

所谓AB实验,亦被称为"对照实验"或者"小流量随机实验"。为了验证一个新策略的效果,准备原策略A和新策略B两种方案。随后在总体用户中取出一小部分,将这部分用户完全随机地分在两个组中,使两组用户在统计角度无差别。将原策略A和新策略B分别展示给不同的用户组,一段时间后,结合统计方法分析数据,得到两种策略生效后指标的变化结果,并以此判断新策略B是否符合预期。

2.2.3 vivo  AB 实验平台

vivo互联网持续重视科学的实验决策,这意味着所有对用户的改动的发布,都要决策者以相应的实验结论作为依据。比如,修改顶部广告的背景色、测试一个新的广告点击率 (CTR) 预测算法,最终哪种方案被选择,都需要根据实验结果进行科学化的决策,那么一个强大的AB实验平台就越发重要了。在过去的几年,vivo互联网从烟囱林立的小实验系统,逐渐开始走上平台化建设之路——搭建、完善AB实验平台,AB实验平台已经从一个单一系统成长为了解决A/B实验相关问题的公司级一站式平台,助力互联网核心业务的快速、准确实验,高效推动业务增长。

2.3 版本发布平台

2.3.1 什么是版本发布

版本发布平台,顾名思义,主要用于发布手机APK版本。自从公司开发手机应用以来,系统升级对用户来说过于重度并且升级率偏低,而互联网兴起带起的快速迭代势头,让自升级能力成为了必不可少的能力之一。vivo版本发布平台最初就是以手机内的APK自升级为起点建设起来的,毫不夸张的说,有了vivo智能机就有了vivo版本发布平台。版本发布平台的主要业务可以简单的理解为:传版本、配规则、分发包。

2.3.2 业务范围

当然,随着手机业务的逐步扩展丰富,我们平台的范围、平台的控制粒度、平台的数据分析能力也越来越完善。

一方面,我们承接了“APK自升级”以外的很多升级能力,如各类组件、快应用、原子组件、SDK包、插件、SO库等等;另一方面,我们对下发规则做了更多兼容和细致的扩展,如量控量止、多维度正反交并差&分群、标识符分群、各种灰度策略、多语言、多渠道、全局规则、一键拦截、一键分析等等;此外,安全合规脱敏、降本增量算法、流控算法【愚公平台】、星云埋点质量分析、crash告警分析、发布趋势等也在vivo版本发布平台的附加价值之内。

2.3.3 业务目标

我们的目标是:为公司打造安全合规、智能稳定、提效降本、锐意创新的全链路发版平台。提供一流的使用体验,树立公司级平台产品口碑标杆。本次系列文章我们会着重介绍vivo版本发布平台在带宽智能优化这个领域中一些探索与实践,欢迎广大读者一起交流,探讨。

2.4 云服务

2.4.1 什么是云服务

vivo云服务,主要提供两项关键能力。首先是面向C端用户,vivo云服务为vivo手机用户提供了文件备份、数据同步等功能。这部分能力使用户能够方便的在本地和云端管理照片、视频、联系人、短信、便签等重要数据。另外,在vivo云服务的建设能力中,还包含了为vivo内部其他业务提供快速便捷的C端文件上传下载的能力。同时,我们在构建C端用户数据备份同步能力的同时,建设了自身的云服务平台,完善了平台相关的备份同步功能。此项平台功能使得vivo内其他兄弟业务,也能快速方便的使用云服务平台的能力进行自身业务C端用户的备份同步能力。

2.4.2 云服务与安全

众所周知,云服务业务需要为用户存放海量的数据文件,除了需要保证服务的稳定性之外,还特别需要关注数据的安全性,文件的持久性等等。可能不少读者也知道,曾经某些厂商的云服务曾经出现过用户数据泄露,居然可以通过搜索引擎直接查询到用户的私人文件,这种事件对于企业品牌的打击和影响非常巨大。在后续的文章中我们会为读者详细的介绍vivo云服务在软件设计上是如何兼顾产品功能、服务稳定性以及数据安全的。

2.4.3 云服务与降本增效

随着vivo手机用户数量的不断攀升,用户存储在云端的文件体量也越来越庞大,据统计,vivo云服务中云盘能力构建完成后短短三年,云端的文件存储总大小已经超过了百PB级别,增长速度可以说是非常迅速。那么随之而来的非常严峻的考验就是成本问题。我们如何能在保证用户体验不受影响的前提下控制成本?这是个困难且长期的现实问题,后续将给大家带来我们这边的解决方案。

2.5 积分

2.5.1 什么是积分

积分作为互联网内的一种存量用户运营的有效激励工具,承载了刺激用户活跃和留存的使命。作为积分体系,vivo积分主体同样是围绕获取与消耗展开,随之延申的业务能力包括:积分商城、礼品中心、签到中心、任务中心、活动中心。

2.5.2 积分生态

vivo积分贯穿整个vivo生态下的互联网应用,同时手机厂商互联网业务的独特性(不仅局限于单一类型业务)也造就了vivo积分的与其他行业生态积分体系的差异性,这些差异性着重体现在vivo积分是与各个业务形态紧密合作,相互渗透。通常积分的获取行业内都会基于任务来实现,而达成任务的完成基于特定行为完成来判断,最终完成积分发放,基于“福格模型”,我们可以发现促使用户完成某个行为的三要素:动机、条件、触发。这为任务的建设提供了理论支撑。

2.5.3 积分任务

任务作为积分获取最重要的途径,vivo生态内的应用接入积分任务,引导用户完成高价值行为任务,有助于其达成业务方核心KPI指标,同时用户因完成任务得到积分奖励,有持续产生高价值行为的动力,最终形成正向循环。那么vivo的任务体系是如何搭建的呢,系统建设又走过了哪些历程?在本次的系列文章中,我们将为大家揭开其神秘的面纱。

2.6 帐号

2.6.1 什么是帐号

对于我们的用户,vivo帐号是用户畅享整个vivo生态服务的通行证。vivo生态服务内容涵盖生活、游戏、娱乐等方方面面。同时作为手机厂商的帐号体系存在,需肩负起用户设备资产保护重任,保障用户的用机安全。对于我们服务的各个业务,帐号是最基础平台服务、是业务得以开展的基础保障。而vivo帐号也不止于服务于我们自身手机用户,在微信、ios等跨平台、多生态环境下都可以让用户享受到vivo帐号带来的便捷服务。

2.6.2 帐号全球化

伴随公司手机业务在海外市场的拓展,帐号已经在全球7大机房完成了跨洲部署,用于服务我们的全球用户。每个机房的服务都严格遵循服务地区的相关个人数据隐私和安全的法律、法规。且为了应对政策变更带来的风险,GDPR区域的服务具备动态国家数据隔离等能力。确保在外部环境因素干扰下继续保持一定服务能力。

2.6.3 稳定性建设

随着业务的快速发展,我们服务的用户数很早就破亿,服务的日均调用量更是突破了百亿。帐号已然成为一个典型三高(高性能、高并发、高可用)属性的系统,再加上基础平台服务的定位,大量工作都会围绕如何建设系统的稳定性展开。在本次的系列文章中,我们会和大家一起聊聊帐号系统在稳定性建设方面做出了哪些尝试与努力。

三、写在最后

本篇为vivo平台化建设系列文章的启航篇,旨在介绍vivo进行平台化道路的背景和平台化建设的价值以及一些成功的案例,抛砖引玉。后面的系列文章会深入的介绍vivo互联网的平台化产品的探索、建设与创新,结合过程中的具体实践,分享遇到问题及思考。希望能帮助读者了解到平台化建设的意义与方法、建设前的可行性评估及过程中应当避开的陷阱等等。

vivo进行平台化建设之后在软件复用、研发效率提升等方面有显著的提升,但是平台化也不是软件架构演进道路上的一颗银弹,能够包治百病。平台可能由于前期考虑的不够充分,亦或前期的业务模式较为单一,从而导致平台在未来可能难以满足业务需求的变化。不要指望当下设计的平台能够完全满足未来不可预知的变化。但是对于未来的不确定性,我们也不能坐以待毙,我们需要对未来业务的发展进行一定的预判,为未来预留扩展点。除此之外,还需要尽量的保证扩展点与当前系统是解耦的。平台化和业务多样性的矛盾会一直存在,只是在某个阶段这种矛盾可能暂时达到了平衡。

有关vivo平台化实践探索之旅-平台产品系列01的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  3. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  4. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  5. ruby-on-rails - Rails 中同一个类的多个关联的最佳实践? - 2

    我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来

  6. ruby-on-rails - 向 Rails 3 添加 Ruby 扩展方法的最佳实践? - 2

    我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion

  7. Ruby 最佳实践 : working with classes - 2

    参见下面的示例,我想最好使用第二种方法,但第一种也可以。哪种方法最好,使用另一种的后果是什么?classTestdefstartp"started"endtest=Test.newtest.startendclassTest2defstartp"started"endendtest2=Test2.newtest2.start 最佳答案 我肯定会说第二种变体更有意义。第一个不会导致错误,但对象实例化完全过时且毫无意义。外部变量在类的范围内不可见:var="string"classAvar=A.newendputsvar#=>strin

  8. ruby-on-rails - 2个用户之间的产品订单 - 2

    我有三个模型:User、Product、Offer以及这些模型之间的关系问题。场景:用户1发布了一个产品用户2可以向用户1发送报价,例如10美元用户1可以接受或拒绝提议我现在的问题是:用户、产品和报价之间的正确关系是什么?我如何处理那些“接受或拒绝”操作?是否有更好的解决方案?用户模型:classUser:productsend产品型号:classProduct:usersend提供模型:classOffer提前致谢:)编辑:我正在使用Rails3.2.8 最佳答案 警告:小小说来了第1部分:设置关联我建议阅读Railsguideo

  9. ruby - 存储外部 API 的密码 - 最佳实践 - 2

    如果我构建了一个应用程序来访问来自Gmail、Twitter和Facebook的一些数据,并且我希望用户只需输入一次他们的身份验证信息,并且在几天或几周后重置,那会怎样是在Ruby中动态执行此操作的最佳方法吗?我看到很多人只是拥有他们客户/用户凭证的配置文件,如下所示:gmail_account:username:myClientpassword:myClientsPassword这看起来a)非常不安全,b)如果我想为成千上万的用户存储此类信息,它就无法工作。推荐的方法是什么?我希望能够在这些服务之上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。

  10. 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一) - 2

    前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型

随机推荐