vivo浏览器的快速开发平台实践-总览篇
一、什么是快速开发平台
快速开发平台,顾名思义就是可以使得开发更为快速的开发平台,是提高团队开发效率的生产力工具。近一两年,国内很多公司越来越注重研发效能的度量和提升,基于软件开发的特点,覆盖管理和优化、团队工程实践、个人工程实践、优化流程四大方面。本文所讲的快速开发平台可以大幅缩短需求周期,给研发效能带来了开发快、上线快、风险低、成本低、门槛低的优点。
用制造业来做个对比,被誉为“工业之母”的模具可以大幅提升生产效率,而快速开发平台也可以做到在1分钟内完成需求的开发、上线;另外3D打印机给制造业生产带来了重要改变,快速开发平台也能换一种方式,用可视化拖拉拽完成需求开发。所有行业都在追求着化繁为简,快速迭代的能力。所以低代码大火的时候,大家都觉得这个概念近些年也见过,根因就是企业和技术人员都一直在追求更高的生产效率。
二、我们在做的事儿
目前行业内的快速开发产品大多都是为了解决企业级应用场景,vivo浏览器作为公司互联网核心产品,在敏捷开发的节奏下,需求千余运营后台的管控能力,另外又要求高性能、高并发、高可用以及需求的快速响应。所以我们在日常的工作中很频繁的接到一些任务:迭代版本要完成大量后台开发;紧急需求需要半小时内完成后台的开发上线;线上后台需要快速增加一项新功能。
在此背景下,为了支撑业务快速迭代,推出应用于配置和运营后台的快速开发产品。总体来说,我们不断升级我们的架构,就是围绕以下几点来实现快速开发:
支持后台快速设计开发,以及内容快速投放能力;
支持菜单、用户等多维度权限控制;
支持自定义数据流程;
支持开发者二次开发和快速上线的能力。
三、产品架构两步走
产品架构的演进都是服务于业务,跟随着业务发展和技术潮流不断发展变化的。起初我们就是从运营后台开发开始的,到现在持续为公司业务提供高效率、高标准、快速响应的开发解决方案。下面就正式开始介绍产品和架构。
3.1 一阶段(配置平台)
2017年底,随着内核版本升级,为了应对新内核的云控要求,配置平台应运而生,并发展成为内核的十大特色能力之一,并持续为浏览器等数十个业务提供服务,在一年内踏入百亿请求服务俱乐部。
3.1.1 平台简介
相较json-editor之类快速生成页面的产品,最大的不同就是平台化、服务化。基于统一的平台提供了表单设计器及数据存储的解决方案,支持20多种组件类型、上百种组件属性;并且提供通用后台接口;并在操作链路中预置了锚点,让开发者能方便的去做一些定制化需求的开发。
所以平台化给产品带来了更快速的集成和升级能力,使得可以不断丰富表单组件,让用户快速享受到强大的表单DIY及云端控制能力。服务化则带来了高性能的配置投放能力,通过各端SDK的通道,完成整个配置生产、投放、消费的生命周期。下面将从配置生成引擎和无代码高性能服务来分别介绍一下。
3.1.2 系统架构

3.1.3 表单设计器和渲染引擎
表单设计器是抽象后台表单,对组件进行归纳、设计、定义,提供一套可视化的操作来进行后台组件的增添设计的工具。后台生成引擎是我们快速完成后台的开发的利器,基于此可以1分钟完成一个后台的开发、上线。
我们将后台抽象为布局,字段、操作三块,基于组件+流程这样的模型进行无限的拓展,支撑复杂多变的业务需求。下面先简单列举下的:
1)在主体布局上设计出运营后台的通用模板,在此之上进行配置开发,更加迅速,更加标准化。
主要布局包括全局操作、条件查询区、运营规则、表格区、配置操作区。
全局操作是对针对表单的操作行为,如发布、添加、批量修改、导入、导出等;配置操作是对一条配置的查看详情、编辑、删除、预览、审核等操作。
2)后台定义可以帮助完成诸如表单名称、权限控制、数据模型定义、门户集成、后台表单操作等一系列后台设计功能。将数据结构拆分为基础组件和用于编排的复合组件。
基础表单字段主要有文本、数值、选择、图片、文件、时间、标签等组件,并对对应的组件有属性上的配置增强,如文本长度校验、正则校验、图片大小校验、是否列表隐藏,是否可导出等;
复合组件主要有支持树状数据结构配置的子表单组件,还可以对多个基础组件进行组合,以及多个组合组件的列表等等;
3)流程操作这块主要打造了运营后台的编辑、删除、发布、预览、审核的数据流程。
3.1.4 无代码平台服务
如果说后台低代码是我们实现快速开发的第一步,那融合低代码能力具备智能投放和云端控制的平台服务,则是从工具转换为平台的核心因素。
3.1.4.1 智能投放
智能投放是一种数据实时编排,动态计算的API技术,加上我们客户端和服务端SDK的通道建设,是快速实现需求的无代码解决方案。它可以给平台开发带来这样的能力:
A表单配置的内容,可以直接通过接口下发,对于后续新增、修改的字段,也可实现接口自动下发;
A表单拼接B表单,可进行编排打包一起下发,或者可拼接B、C、D等无限个表单各自独立的处理拼接逻辑;
A表单可联动B表单数据,进行逻辑处理(表达式)后进行组装编排,来实现更为复杂的业务需求;
数据的编排和玩法花样很多,这里就不再过多赘述。
3.1.4.2 云端控制
云端控制是实现线上智慧运营的解决方案,目前支持但不限于地区、运营商、人群画像、人群灰度、客户端版本号、安卓版本等等各种自定义控制元素来管控下发。
3.1.4.3 智能推送
通过结合自身的控制及配置能力和系统推送能力,来给运营提供这样一种从后台出发更实时的触达解决方案。
3.2 二阶段(低代码平台)
2021年,行业低代码之风袭来,我们意识到一些局限性,也期望朝着产品化和更广泛的管理后台更进一步,于是重新出发。
3.2.1 平台简介
后羿是符合低代码平台的定义的一款产品,提供了可视化编排能力的开发语言。相较于一阶段的配置平台,设计了首页门户、运营平台、开发者平台、技术文档平台,提供了二次开发和生态建设能力,支持各种数据通道开发方式,大幅提升了产品力。最终都是为了完成技术平台到技术产品的转变和将低代码开发变得更加简单易懂、更加快速开发。
3.2.1 系统架构图

3.2.3 系统说明
3.2.3.1 开发者平台&运营平台子系统
开发者平台是整个平台的核心产品,开发者也是平台的核心用户,我们为提供开发者提供了一站式的项目、模块、菜单、页面制作的能力。
用户可以在开发者平台创建项目。完成创建后,就会自动生成一个后台门户;
随后创建目录和菜单,即可进入编辑平台,就可以体验到快速可视化开发的能力。另外还可以通过预置的各种强大的模板来快速的完成开发。
3.2.3.2 通用存储子系统
通用存储则是给运营数据提供了个一套标准化的存储方案,支持用户灵活使用自有仓、在岸外部仓等各类数据源。
不同于低代码目前纯粹的表单驱动、模型驱动;在所见所得的可视化开发后,可以智能生成对应的数据模型;
系统有一系列通用的运营后台操作接口,去完成对应的操作行为;也提供一些通用的数据处理流程,并利用二次开发来增强业务。
3.2.3.3 开放平台子系统
开放平台则是我们平台和外部数据连接的一个纽带,它是一个数据双向同步的通道,提供了实时接收、异步批量等同步方式,配合有鉴权、频限等一些安全措施。另外该系统也是我们去适配对接第三方服务的窗口。
3.2.3.4 投放平台子系统
投放平台则是实现配置灵活下发的投放渠道,保留了配置平台成熟的下发能力和SDK集成能力,也会更多地去集成一些如内容库、广告这些业务能力,来丰富我们投放的业务属性。
3.2.4 产品展示
1)门户、运营、文档平台展示
门户:展示平台的介绍、能力,也同步集成了后羿其他的产品。
运营平台:汇聚接入系统,模块、菜单、tab,为各运营团队提供最简化的操作。
文档平台:维护后羿的操作文档、设计文档、部署手册等等。

2)编辑平台展示
提供了所见即所得的可视化开发的能力,也提供了众多模板方便快捷开发。

四、写在最后
在完成了上述两个阶段的能力建设之后,我们具备了运营后台的快速开发能力,可以快速完成后台的开发上线,极大限度的提升研发效能。与此同时我们也面临着配置语言是否标准,可视化操作是否易用,开发者是否容易上手,更复杂的后台需求是否可以达成,快速开发带来的对现有产品开发流程的冲击等等问题和挑战。尽管如此我们也必将在产品设计上保持简单、好用、边界的产品特性,始终坚持快速开发的理念。
后续也将在此系列继续更新通用接口、数据处理、存储方案,生态建设和二次开发能力、高性能API实战、灾备能力建设等等文章,敬请期待。
作者:vivo互联网服务器团队-Lu Xiaohu
vivo浏览器的快速开发平台实践-总览篇的更多相关文章
- SNF快速开发平台项目实践介绍
SNF快速开发平台分如下子平台: 1.CS快速开发平台 2.BS快速开发平台 3.H5移动端快速开发平台 4.软件开发机器人平台(目前是CS版本,后续有规划BS版本) SNF快速开发平台是一个比较成熟 ...
- SNF快速开发平台2019-权限管理模型-记录级-字段级权限实践
1.1.1 字段级权限 字段级权限适用于对不同人的能否查看或录入不同表不同字段的权限控制. 是否启用字段级权限配置 不启用字段级权限后,[用户权限管理]程序[字段级权限]按钮会隐藏,导致无法给管理其 ...
- SNF快速开发平台2019-用户安全控制-权限管理模型实践-权限都在这里
1.1 是否保存密码 勾选记住密码后,再次开启程序用户密码不需要再次输入,直接显示在密码输入框内,方便快捷. 图 4.1‑1 记住密码的登录页面框 1.2 是否自动登录 勾选自动登录后,再 ...
- SNF快速开发平台2019-权限管理模型实践-权限都在这里
其它权限实践系列文章: 1.角色.权限.账户的概念理解-非常全的理论讲解权限控制 https://www.cnblogs.com/spring_wang/p/10954370.html 2.权限管理模 ...
- JeeSite 企业信息化快速开发平台
平台简介 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台. JeeSite本身是以Spring Framework为核心容器,Spri ...
- 软件快速开发平台 WebBuilder 6.8
WebBuilder是一款开源的跨平台.数据库和浏览器的可视化Web应用快速开发平台.WebBuilder使用了多项最新的技术,使Web应用的开发更快捷和简单. 作为一款高效的Web开发工具,WebB ...
- JEECG 3.7.1 版本发布,企业级JAVA快速开发平台
JEECG 3.7.1 版本发布,企业级JAVA快速开发平台 ---------------------------------------- Version: Jeecg_3.7.1项 目: ...
- 1024程序员节宅男节日快乐 -- JAVA快速开发平台,JEECG 3.8宅男优化版本发布
JEECG 3.8 版本发布,系统全面升级,重构上传组件.优化代码生成器机制! 导读 ⊙平台性能优化,系统更稳定,速度闪电般提升 ⊙系统上传组件全面重构,使用plupload组件,解决flash的 ...
- Winform开发框架之通用附件管理模块 --SNF快速开发平台3.3-Spring.Net.Framework
最近项目太多都没有时间写文章了,实际项目需求一,CS端和windows平板都需要附件上传管理功能.以前做的都是BS的附件管理和上传功能.本来计划在Winform上嵌套一个浏览器直接用bs的附件上传功能 ...
随机推荐
- OAuth 2.0 扩展协议之 PKCE
前言 阅读本文前需要了解 OAuth 2.0 授权协议的相关内容, 可以参考我的上一篇文章 OAuth 2.0 的探险之旅. PKCE 全称是 Proof Key for Code Exchange, ...
- 记一次 IIS 站点配置文件备份和还原,物理路径文件批量备份
前言 上一篇文章实现了数据库的批量备份和还原,当然部署在服务器中的IIS站点备份也是一个十分繁琐的事,三四个数量不多的还好,像有一些服务器用了许久,承载几十个站点甚至更多,一个一个备份,再一个一个还原 ...
- Maven中所用的Dependency查找方法
用了Maven,所需的JAR包就不能再像往常一样,自己找到并下载下来,用IDE导进去就完事了,Maven用了一个项目依赖(Dependency)的概念,用俗话说,就是我的项目需要用你这个jar包,就称 ...
- Spark-StructuredStreaming 下的checkpointLocation分析以及对接 Grafana 监控和提交Kafka Lag 监控
一.Spark-StructuredStreaming checkpointLocation 介绍 Structured Streaming 在 Spark 2.0 版本于 2016 年引入, 是基于 ...
- js防止重复提交代码
if (checkSubmitFlg == true) { console.log("禁止频繁操作.."); layer.close(ide); return false; } c ...
- 解决fatal: unable to access '': Failed to connect to 127.0.0.1 port 1181: Connection refused的问题
今天把项目提交的git远程的时候遇到一个问题 fatal: unable to access '': Failed to connect to 127.0.0.1 port 1181: Connect ...
- 目前国内UI设计师的发展现状如何?
在分析这个问题之前,我们先来说说如何优秀的UI设计师所需要具备的素质是什么,只有做到了以下几点,才有资格在这个行业生存下去的能力,也才有机会展望行业的未来前景. 一位合格的UI设计师必须做到以下3点: ...
- CF1004D Sonya and Matrix
不要想当然. 考虑到我们一定有存在个数为\(4\)的倍数的数. 否则第一个不是的数即为\(x\). 那么我们设\(b\)为所有的数的最大值. 那么显然有\(|n - x| + |m - y| = b\ ...
- 洛谷 P3714 - [BJOI2017]树的难题(点分治)
洛谷题面传送门 咦?鸽子 tzc 竟然来补题解了?incredible( 首先看到这样类似于路径统计的问题我们可以非常自然地想到点分治.每次我们找出每个连通块的重心 \(x\) 然后以 \(x\) 为 ...
- 利用elliipse做相关图
参考资料:<数据探掘 R语言实战> p65-P68 install.packages("rattle") # 获取实验数据集 install.packages(&quo ...