快手前端发展:前端中台化、前端智能化,我们一直在追赶什么?
sinye56 2024-10-27 14:09 11 浏览 0 评论
从 2016 年开始招募第一名前端、从 0 开始搭建快手前端整体技术服务和脚手架,到前端团队贡献一份力量、支撑快手完成春晚任务:春晚红包互动总量达 639 亿次;红包站外分享次数达 5.9 亿次。快手春晚直播间累计观看人次 7.8 亿,最高同时在线人数 2524 万。在短短的 4 年时间里,快手前端团队经历了什么?快手 App 访问量的快速增长对前端团队带来哪些挑战?InfoQ 记者在 GMTC 全球大前端技术大会(深圳站)2019 期间采访了快手前端技术专家宋云路,一探究竟。
InfoQ:能否先请介绍一下快手 App 前端业务的发展历程、期间一些重要的节点?
宋云路:快手是 2016 年前后才开始招募专职的前端工程师的,之前前端工作都是由全栈工程师来完成。我也是 2016 年年中入职到快手的,2016 年起我们用小而精的团队从 0 开始搭建快手前端的整体技术服务和脚手架。
在 2017 年到 2018 年的时候,快手的业务量和 DAU 迅速增长,公司也逐渐孵化出一些产品矩阵,就像孵化器一样,“我们先孵化一个孩子,养大点就送出去独立闯荡了”。快手前端也从最开始的仅一个团队逐渐分化为近十个团队,从最初的几人,发展到目前近 200 人。
如果说其间的一些重要发展节点,2018 年起,我们逐渐开始做一些运营类的业务,然后前端访问量就逐渐开始变大。2018 年春节之前,快手 App H5 业务突破了亿级日访问量;到了 2019 年春节的时候,已经达到十亿级别的访问量;今年 2020 年春晚快手成为春晚红包独家合作伙伴,春晚红包活动中有一部分功能就是由前端负责实现的,我们也在用尽全力去保障前端业务的高可用性。
InfoQ:快手 App 访问量的快速增长,对您的团队会有哪些挑战?
宋云路:我们团队建立的时候没有什么历史包袱,最开始就是基于 Node.js 中间层做前后端分离的,后端只提供类 Restful API 接口,其他都由前端负责。从这个角度来讲,前端承担的职责是比较广的,包括 Node.js 开发、DevOps 等一些常规的页面端和服务端的事情都需要去处理。
一方面我们会去借鉴业界的一些优秀实践经验,另外会划分出一部分精力来做常规前端不太擅长的知识的沉淀和提升。比如高访问量 Node.js 服务和纯前端服务的稳定性保障等方面,我们通过每年春节活动等重大活动的验证,最高支持了十万级 QPS 前端项目的稳定运行,已经积累了一些非常成熟的经验。
InfoQ:回到前端中台化,当时为什么会决定要做这个事情?背景是什么样的?
宋云路:前端中台化的前提首先是快手从公司层面有一个整体的中台战略,它会从公司层面提供一套整体的中台通用技术服务,比如账号类、日志类、通用工具类的技术服务等。有了中台通用技术服务的支撑,我们就可以在上层去做具体业务中台化的尝试。
我们启动前端中台化的起因就是,伴随我们孵化的新业务越来越多,发现新业务中很多业务流程以及运营活动和主 App 的功能基本上 99% 都是相同的,然后不同点可能是样式方面会有些不同。另外因为涉及端能力的调用,在不同客户端调度能力有差异。所以我们遇到的主要问题就是,对于有端能力需求的 H5 业务,如何让它无缝地运行在不同客户端里面,这就是最开始的背景。
起初我们的处理方式是抽象一些适配器模块去做逻辑分支的判断,但是执行了一段时间发现当逻辑比较多的时候,到后面再改东西会比较难改、或者不敢改,因为我不确定它的影响范围会是多大。不可能为了改一个小功能,把所有已上线的 App 全部拿出来重新再回测一遍。
那个时候我们就在想,如何基于公司的中台化战略,去设计一个更好的通用服务来提高迭代效率?解决方案就是抽象一些 H5 的业务中台,每个业务中台都有一个 C 端页面和对应的后台管理功能。这样就可以动态的去控制该服务在某个客户端中的自定义行为表现。对于有客户端桥依赖的中台,我们会给每个业务中台定义一套 JS 桥 API 约定,如果某个业务或者说某个客户端想接入,它就按照我们这个 API 约定去开发相应接口来接入就好了。比如运行这个中台需要三个 JS 桥能力,我们提前把这三个 JS 桥的名字和调用方式约定好,就是说你要想接入进来,你需要在你的客户端里面去支持这三个 API 才能使用这些功能。
在此基础之上,我们会发现我们 H5 业务中台在实际接入的过程中,还是会需要每个业务做一些适配联调工作,或者说需要做一些接入层面的开发工作。基于一些开发和迭代成本的考虑,又设计了一个 H5 容器的技术中台,我们期望这些业务中台全都运行在这个 H5 容器中台里面。这样的话,只要在 H5 容器中台里面支持了这些通用中台桥依赖,刚才我说的每个业务自己去实现 API 就不用再做了。还有一个好处是,通过 H5 容器中台,我们可以很容易让新业务集成 H5 开发常用的端能力集合,比如离线包能力,动态鉴权能力,数据统计能力等。最终就实现了通过业务中台 + 技术中台组合的方式让前台业务以最快速度去接入相关的通用服务,最大化提高我们开发和迭代的效率,为业务赋能。
InfoQ:您认为前台中台化最大的挑战是什么?
宋云路:首先就是要明确中台化的边界:哪类业务要做中台化?哪些不需要中台化?其次,就是业务中台、技术中台的职责如何划分,最常见的就是端能力的依赖问题。比如一个 JS 的 API,我是在中台里面去实现,还是在业务中自己去实现,这个边界需要考虑;另外,前端中台化可参考的经验并不是特别多,我们相当于也在摸索中前进。
InfoQ:现在快手前端中台化做的怎么样?
宋云路:从业务中台方面,目前已经有接近十个业务中台的抽象,有的业务中台已经运行在大约 20 多个客户端里面了。技术中台是我们 2019 年的目标,比如 H5 容器中台我们从 2019 年年初开始开发,下半年开始上线,目前已经上线了包括快手在内的约 10 个客户端业务。
不过倒过来往回看,这里边还是有很多可以优化的空间的,主要是在协作分工上。因为前端主要承担的是表现层的逻辑,做中台的话要涉及到一些与客户端、后端的职责划分和解藕,所以其实有的中台功能是前端主导,有的是客户端主导,也有的是后端主导。
在我看来,理想的前端中台化,每个客户端只是一个载体,没有能力上的差异,各个业务功能都可以通过中台化的方式去独立运行,它们之间也可以非常灵活的组合,实现最大化的能力上的复用。
InfoQ:您认为中台这件事儿人的问题是否会成为瓶颈?
宋云路:其实是有可能的,因为中台不是开发完成就完事了,往往是一个需要长期支持的项目,所以其实这个里边就涉及到中台到底应该由谁来做的问题。可能有的公司会有一个中台的团队去负责所有中台的产出,有的公司会从组织架构上有划分。如果是从组织架构上没有划分清楚,一般我们建议就由最大的业务方去负责中台的孵化。这样的话就能保证中台的设计能够满足最复杂应用场景。因为如果是让一个比较小的业务方负责中台,很有可能他考虑的场景不够全面。所以在快手,主 App 相关团队承担的中台孵化和抽象相对多些。
InfoQ:您觉得前端中台化接下来会是大势所趋吗?宋云路:前端中台化只是中台化里面的一个分支,还是要看业务体量,所以不一定适用于所有公司。如果说业务还没有成型,复用场景还没有那么多,说明不确定性还比较多,可能就不适合做前端中台化。
InfoQ:快手的前端中台化,接下来的最大挑战是什么?宋云路:我认为挑战还是在与端结合的一些能力的抽象、复用和体验优化上,比如说如何处理端内 H5 功能与客户端能力的耦合关系等。对于我们 C 端业务,端内的 H5 页面总是免不了和客户端去打交道,那如何把 H5 和客户端结合起来去提供统一的、一致的,可扩展的能力,并且能够让业务使用得比较舒服,让我们升级迭代顺畅,这个是我们后面要去优化的。
InfoQ:除了中台,您的团队近期还有哪些正在探索中的工作?宋云路:我们在 2019 年进行过 Flutter 方面的探索,Flutter 现在在快手的几个业务线上都得到了落地。
从业务层面,因为我们已经实现了 H5 容器的端能力的统一,于是我们目前就在基于这个 H5 容器,探索中台之间服务打通的解决方案,让我们的业务方能够比较容易的去集成公司层面的整体服务。目前第一个落地的就是我们的 H5+ 客户端全链路性能监控,从客户端的行为,到 H5 的行为,再回到客户端的行为,我们会把性能的一些指标做统一封装,做一个更完整的监控解决方案。同时会通过数据分析,实现自动报警、自动预警。
InfoQ:2020 年的大前端领域,您最看好哪些技术趋势?宋云路:除了 Serverless 和 Flutter 等已经非常火热的概念以外,我个人会倾向于通过前端智能化减少重复劳动的相关解决方案。像服务的监控报警,如何让我们基于数据分析更智能的去做这个事情,而不是每次上线新业务都要写一堆报警条件、去人工检查等;另外比如如何通过 Low Code / No Code 的解决方案,帮助前端工程师节省简单页面的开发时间等也是我所关注的。
嘉宾介绍:宋云路,快手前端技术专家,2016 年加入快手,亲身经历了快手从千万级 DAU 到亿级 DAU 的前端架构演进全过程,目前主要负责快手主 App 相关的前端业务开发和架构优化。对前端中台、前端高可用性,前端性能监控、 Node.js 开发运维等方面有比较丰富的实践经验。
相关推荐
- 程序员:JDK的安装与配置(完整版)_jdk的安装方法
-
对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...
- Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置
-
一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...
- 麒麟系统安装JAVA JDK教程_麒麟系统配置jdk
-
检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...
- 学习笔记-Linux JDK - 安装&配置
-
前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 测试员必备:Linux下安装JDK 1.8你必须知道的那些事
-
1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...
- Linux 下安装JDK17_linux 安装jdk1.8 yum
-
一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...
- 在Ubuntu系统中安装JDK 17并配置环境变量教程
-
在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...
- 如何在 Linux 上安装 Java_linux安装java的步骤
-
在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...
- Windows和Linux环境下的JDK安装教程
-
JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...
- linux安装jdk_linux安装jdk软连接
-
JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...
- linux安装jdk,全局配置,不同用户不同jdk
-
jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...
- 运维大神教你在linux下安装jdk8_linux安装jdk1.7
-
1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...
- window和linux安装JDK1.8_linux 安装jdk1.8.tar
-
Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...
- 最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?
-
默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)