4月的一个周五傍晚,刚刚结束一场语音会议的明哥,拿起桌上的咖啡,一口灌了下去。同时,翻了翻摊在右手边的笔记本,思考即将抛给他的一些问题。
在华为已经工作第15个年头的他,目前是华为云官网研发团队的技术负责人,看护着华为云对外的“门面”。
作为技术管理者,明哥有个小习惯,“每天给自己留一些静默时间,在这段时间内,尽量不处理邮件、工作信息,能够做一些代码开发、review、技术研究的工作。”
他还习惯把事务性的工作都安排在前半周,后半周能有相对完整的时间,和团队的架构师、设计师系统讨论比较大的技术方案。
在钻研技术这块,明哥喜欢往下走,去看它的底层运行机制,它的源码。他也是 “一万个小时定律”的拥趸者,始终坚信积累足够的时间和精力,一定能在技术上有所建树,触类旁通。
所以,他能和团队仅用半年多的时间,完成一次几乎不可能的挑战。
再难,官网“门面”不能倒
在华为南京研究所露天长梯的二层平台上,一直竖着一块海报板:二战中被打得像筛子一样、浑身弹孔累累的伊尔2飞机,依然坚持飞行,终于安全返回。
两年前的下午,明哥双手环胸站在办公室的落地窗前,紧紧盯着这块海报,思绪却停在十分钟前接到的任务上:他的团队需要在有限的时间内,完成官网内容生产平台的全部自研重构,且达到业界领先的水平。
这是一次走出技术舒适圈的挑战,放弃他们非常熟悉的技术架构,一切从头开始,好比明明有一条高速公路通往终点,但是你不能走,你得自己新建一条。
这期间,华为云官网团队既要保证日常业务的正常运转,按部就班解决各种业务需求,又要抽调出足够的人手搭建新的内容平台,时间紧、人手少、任务重。
在不断的技术研讨,重写代码,验证测试后,项目的最小可用版本完成了showcase,彼时大家都很有成就感,也觉得终于能缓一缓了。然而一个更紧急的任务再次抛向他们:为了快速催熟产品,接下来的大促期间将直接使用自研系统。
此时离大促还有两个月,开发团队除了要分出一部分兵力生产页面(为了确保用户体验,页面要全新设计),还要补齐高并发、高可用、安全可信等产品化所必须的能力。通常,这样的能力一般至少需要3到6个月,才能打磨完善的差不多。
明哥和团队只有背水一战,那段时间里,任务板上写满了被拆分的工作细节,新的方案不断覆盖旧的版本,会议室里坐阵的技术专家走了一波,又新来一波……大家拒绝妥协,一门心思埋头往前冲。
比如,为了保证生产出来的页面在任何情况下都不能丢,设计团队翻阅了大量资料,与安全、可用性、性能专家多次讨论和原型验证,然后选择了最‘冗余’的方案,最终成功应对多次突发情况,经受住了大促的考验。
历时8个月,从项目启动到第一个基于自研的内容生产页面诞生,官网团队交出了一份漂亮的成绩单。
“挑战非常大,但我们成功了。”
与此同时,他们还“顺带”开发了一个PQP页面质量平台,负责自动检查页面上线前的内容质量,包括页面的404、敏感字词、中英文单词的拼写、图标的设计元素是否符合规范等等。
从接手华为云官网开始,质量就是悬在明哥头上的达摩克利斯之剑。用他的话说,“质量这个东西,不出问题的时候大家不会觉得多重要,但凡发生问题,就会成为众矢之的,所谓善战之将无赫赫之功。”
如何保证页面质量稳定,这一点往往是不少前端技术人员忽视的。“我们找咨询公司,合作伙伴问了一圈,大家都没有这样的工具,更多的是靠流程保证,比如发现问题通知oncall,再逐层找到负责人。虽然管理手段能够运行下去,但效率太低了。”
所以,将这种“人拉肩扛”的问题处理方式,转化为工具能力,做成平台去赋能,再贯穿到整个页面的发布流程,是一件成就感与挑战并存的事情。
当前,PQP平台已在华为内部“开源”,包括华为官网在内的80多个网站都已经接入,用于看护网站的内容质量。
谈及质量,不仅是页面内容的质量,还有官网稳定性的质量。试想,12306的每一次崩溃,后面是多少用户的吐槽骂声。
为了维护华为云官网的稳定性,他们也针对高可用做了多层保障,比如多副本的容灾备份,数据多活等等,在全球4个地区的6个机房都安置了华为云官网的服务器,并且采购了4家不同的CDN厂商规避可能出现的任何主客观风险。构建多个逃生通道,一键完成流量的快速切换。就像剥洋葱一样,剥开一层里面依然保证完好无缺。
“华为云官网是我们的门面,控制台、后台服务或许可以挂,但官网就像上甘岭的那面旗帜,哪怕是个光杆司令,我也不能倒,一定要竖在那里。”
云原生藏在业务里
门面不能倒,为了这个目标,华为云官网的架构以及生产发布流程也在不断优化完善中。
以前端框架为例,React性能强大且灵活,Angular有丰富的组件,Vue简洁易构建,选起来颇有些乱花渐欲迷人眼。
明哥也曾陷入选择何种技术框架的纠结中,团队经过一番讨论,选择了一个折中的方式——他们和web能力中心定下原则:基础能力团队维护一套主流技术框架和组件库,各业务团队有自己的选择权,可以直接使用,也可以根据需要选择其他技术栈,但核心是遵从统一的设计规范,达到即使不同技术栈生产的页面也能让用户无感知差异的效果。 正所谓好马配好鞍,让开发人员根据各自看护的业务特性找到最匹配的框架。
但问题随之而来,如何将这些新、老技术栈,以及不同技术框架生产的页面放在一起呈现给用户?
华为云引入了微前端框架,让各个小团队,不同的技术栈都能共生。 微前端的目的是低耦合,它把各模块之间的影响降到最低,各模块能按需使用不同的技术栈,从而降低技术栈切换的成本,确保产品平滑过渡,避免一刀切带来的质量风险。
同时,所有的服务都部署在容器里的,一切皆代码。诸如应用程序、中间件、底层操作系统都被打包成标准的包,不管在什么环境,什么时候部署,模块都是一样的,不会出现因为系统、中间件版本、配置不一致引发的研发环境和生产环境状态不同的情况。这也是持续交付、快速迭代的基础。
从人拉肩抗的低效率开发,到如今标准的页面发布流程,华为云官网的架构也进入到一个新的阶段:后台采用微服务架构,前端采用微前端架构,页面上线遵守标准的DevOps流程,化繁为简,充分利用技术的特性,破除实际业务的瓶颈。
举个例子,以前的网站开发不管是页面功能,还是页面内容的变化,都绕不开发人员,网页上任何一个细微的变化都得去修改html代码或者CSS脚本。这种情况下,随便修改一个字,开发需求排下来,小半个月过去了。
为了让大家都能得到“解脱”,所以有了页面生产平台,可以让业务人员自助完成页面修改;有了可视化搭建,拖拽组件即可完成所见即所得的网页制作;有了系统的内容质量检测平台,能够保证页面的安全上线。通过IT化,让所有上线动作都高效可控,打通官网内容DevOps的最后一环。
这也是明哥对于云原生的理解,“云原生本身并不能算一套架构,它更像是一个定义,一套方法论。 打开来看,云原生无非这几个关键元素:微服务、DevOps、持续交付、容器化。”
目前,DevOps方面,华为云有一套统一的发布流水线平台,所有服务均通过这个平台发布到生产环境;持续交付方面,华为云官网有65%左右的特性是通过按特性独立发布的,每周都会有几百个特性发布到生产环境上。
让子弹再飞一会儿
康威定律里曾提到,组织的架构决定了整体的技术架构。由于华为云的前端和后端组织相对分离,双方各司其职,技术沟通中难免会产生一些小的摩擦。不过,当前端技术浪潮汹涌而来之时,它也在试图用技术去弥合人为原因造成的各种沟通问题。
以Node.js为例,通俗点说它是运行在服务端的JavaScript,可以让懂JS的前端人员写出简单的后端服务,完成一些接口的拼装。“通过Node.js,如果一个程序员针对一个简单的需求,从前端到后端都由他自己来实现,由于省去沟通成本以及同步版本发布的动作,效率能提升30%。”
明哥表示,这就是我们常说的“大前端”、“全栈开发者”。而全栈能力就是消解一些组织团队互相配合产生的损耗,减少损耗,自然可以给开发效率、模式带来质的提升。
谈到开发效率的提升,时下大火的Serverless正在掀起一场云计算领域的革命,这场风暴也波及到了前端,对于此,明哥显得谨慎很多。
Serverless勾勒了一个不需要搭建环境、部署中间件,没有特定使用场景、业务类型,只需部署代码的世界。这是技术人员的“乌托邦”,但明哥认为当前的Serverless技术有一定的局限性。开发团队不可能只使用一种技术或者组件,而不少技术或者框架,是需要在中间件、操作系统层面进行分析调优工作,Serverless目前没有达到这个灵活性和适配性。
华为云官网团队也尝试过应用Serverless提高开发效率,比如把一些后台执行不敏感、可用性要求较低的服务部署上去,再通过定时器触发,也能达到一定效果。但是只要涉及到全场景,尤其是多部件的解决方案,就不会考虑首选Serverless服务。
“可能我比较谨慎,有先进或者新的技术,习惯性观察一阵子,让子弹再飞一会, 技术成熟稳定后再跟上,那个时候也不晚。”
明哥在技术栈选择这条路上也走过不少弯路,他认为,前端团队选择技术栈一定要结合实际业务需求,再去观察技术栈的生态是不是持续演进中,人云亦云、好高骛远不可取,如果没有合适的,宁愿自研也好过妥协。
冲破技术标签,视野决定高度
回望前端技术的迭代,可以说是瞬息万变,新的框架、组件库层出不穷,新的编程语言一波波袭来……
涉猎不同技术栈的明哥一直在思索,技术的目的是什么?在建设华为云官网的过程中,他似乎找到了答案。
以JAVA为首的后端技术栈,在几十年的迭代中,无论是技术语言,还是框架都趋于稳定。相较之下,前端还朝着技术成熟曲线的峰顶狂奔中,未来也会逐渐从百花齐放过渡到一两个成熟稳定框架一统江山,一步步补全整个生态的阶段。
目前一些主流框架本质上也是大同小异,选择一个领域或者技术栈深耕,愈往下探,愈会发现其中的一致性规律。
大浪淘沙中,明哥认为比较有潜力和探索空间的三个技术方向是沉浸式、智能化以及低码化。
首先是沉浸式的效果,所见即所得的前端正在追求更丰富的展现和互动形式。比如工业制造领域的仿真模拟,可以对孪生的数字模型进行各种测试验证。同样,在前端领域,也能把产品可视化地呈现在网站上,让用户直观地感知解决方案的运作模式。
说到这里,他在空气中比划了一下,“你想象把后台看不见摸不着的一些组网解决方案搬到前台,方案中的流程、数据流动都是可以看得到的,很神奇, 但也非常考验后端数据和前端渲染能力的结合,不过我们正在努力。”
第二个是智能化,一方面华为云官网团队会在搜索和推荐中进一步优化智能算法和策略,达到精准的千人千面智能化推荐,提升用户的注册转化率;另一方面,团队会在内容的智能生产方面,包括文章、图片、广告等,做出更多的探索,协助运营人员、业务人员生产出更高质量的内容。
第三个方向是低码化,现在多数业务人员可以自主生产简单的页面,涉及一些复杂页面才有开发人员介入。以后,无论是面向运营人员,还是最终用户,越来越多的页面、接口、流程都会通过低码化或者无码化的方式实现。
前端新技术的出现,最终目的还是为了能够响应业务,快速地解决生产、运营的需求,这也是所有技术都在探索的方向。
到了这个阶段,大前端的范畴也在扩充,明哥也更习惯站在架构师的角度去看面前呈现的这些网页,观察它们背后的一系列逻辑。“但凡涉及到用户可感知的内容,其实都是大前端要关注的,对于前端人员来说,前端不仅是一个技术,它更像是一个目的。”
最开始,前端这个概念在业界比较模糊,前端人员都自嘲“切图仔”,也没有现在流行的三大框架,混沌初开,大家都摸着石头过河。
这个时代已经一去不复还,如今的前端人员,技术是基础,在此之上的思维和视野则决定了技术的高度。
“比如大家常常在论坛上为哪个编程语言最好而争得面红耳赤。其实,囿于一个技术的优劣,就是在给自己贴标签。就像有的前端人员会纠结技术路线,认为写页面看不到发展空间,这是把自己困在‘前端’的标签里。”
“如果你的定位是一个简单的开发,一项技能足矣。但想要成长,得学会跳出那个圈子,换种思路,比如以提高用户体验为目标,可以学的技术就不只是某一个框架或语言。在此过程中,将自身的技术能力和定位从开发人员向架构师,乃至CTO的标准去提升。”
心中有教堂,月亮和六便士,都可以拥有。
福利时间到,欢迎大家踊跃留言互动,赢取我们精心准备的前端技术大礼包。
福利一: 看完华为云官网的业务实践,以及明哥对前端技术的思考,如果你也有业务或者技术上的疑惑,在评论区留言,明哥将空降评论区,现场答疑解惑。
福利二: 分享本文到朋友圈,截图私信【华为云社区精选】,小编将按点赞数选择前3位赠送前端大礼包,内含首次公开的华为云官网内部资料,以及明哥推荐书籍《领域驱动设计》一套。