点我达三年前端路暨点我达前端演变过程

前言

2016年8月份,我开始了人生第一份前端工做。直到今天,快满三年,愈发有些东西不吐不快。三年的前端变化很快,感受应该从新认清未来的方向,整理整理三年工做所得,为下一个三年谋定然后动。在点我达三年的前端生涯,同时也是点我达前端架构演变的三年,本身亲身经历了这些变化,能够说是很是幸运的。本身从一个前端菜鸟成长成可以独立负责并带领网关团队的前端老鸟,对一个创业公司如何从零基础的前端生态演变到一个比较完整的前端生态有了清楚的认识。同时也在这个演变过程当中发现不少问题,这些问题必然会一直存在,直到完全解决。前端

本文以点我达前端演变的过程为主线,附带说起一些想要说的感觉。java

本文同步发表在:豆米的博客node

一、点我达前端三年演变进程

上图简单地描述了演变的一些重要节点,从最开始的先后端紧密耦合到第一次应用nodejs,后面引入微服务化后,前端承担起网关的开发与维护,无时不刻在提醒咱们:前端可以胜任的工做会愈来愈多~面试

接下来详细说说每一个演变过程redis

1.一、原始混沌状态(2016年)

初到公司(2016年中旬),彼时的前端页面是和java一块儿打包发布的,不管是开发仍是发布,都透露着一种“生死都要在一块儿”的感受,因而咱们紧随时代潮流,开始了大刀阔斧的改革,引进Nodejs。typescript

1.二、初尝Nodejs(2016年末)

彼时(2016年末)对于Nodejs没有太多的深刻,只是拿公司官网初试牛刀。涉及到的后台数据都是在Nodejs层使用http去java端请求。这个时候开发和发布第一次和服务端解耦,第一次感受到了“分开,对彼此都是个好事”是句真话。前端没有太多束缚,而且还能接触到一些运维上的事情,何乐而不为呢?express

1.三、开始大规模应用Nodejs(2017年初)

初尝Nodejs发现开发提高的效率仍是很明显的,因而开始在全部的新项目中使用Nodejs,全部的中台系统开始使用Nodejs做为网关,这个时候网关BFF的概念开始出如今咱们的工做中。虽然开发效率是提升了,可是先后端在开发协做上仍是暴露出不少问题。毕竟使用http接口,网关层是没法感知到java端接口的变化。可是这个问题在随着公司的总体架构变迁而随之被解决掉。小程序

1.四、全面引入微服务,开始使用dubbo协议(2017年中旬)

引入微服务(2017年初)是一项巨大的工程,全部的java项目都须要改造,前端网关也不例外。前端网关除了须要有一个dubbo客户端以外,还须要解决上述阶段遇到的协做问题,因而解析javadoc成了后面全部项目的必通过程。在后面的演变过程,咱们能够全自动地下载并解析javadoc文档成js或者ts语法格式文件,尤为使用ts以后,全部的方法、参数均可以所有自动提示,可谓是解放了一大批生产力。后端

1.五、传统的express网关遭弃用,转而开始使用容器理念和AOP模型(2018年初)

在传统的express网关模型中,发现了不少弊端(毕竟经验不足),js弱类型、代码结构不合理,冗余代码太多,业务和框架没有解耦等等。因而咱们开始改造,使用inversify来制造容器,使用AOP来简化全部中间流程,剩余给开发的就是纯业务扩展。在这套全新的网关框架下,咱们所有使用typescript,借助ts语言的强类型特性,咱们作了不少之前很差作或者作不到的事情,好比api文档的自动化,好比先后端类型的统一化等等。api

1.六、网关生态以及前端开发流程再优化(整个2018年)

生命奔腾不止,折腾便不止。在当前nodejs大量应用的状况下,维护可持续的生态便成了重中之重。因而咱们不断在开发业务的同时,不断加固咱们的地基。从服务器性能监控到服务器告警日志监控,再到业务数据图表展现,用户行为跟踪(未作),无不体现咱们想要作好前端网关这一层的决心。

1.七、高并发的挑战-长链接网关(2018年末)

终于咱们仍是顺应了历史潮流,在2018年中旬的大量测试以后,开始引入了长链接网关,挑战同时10万骑手在线的压力。历史证实了,咱们仅仅用了四台常规的服务器就抗住了来自rocketMq 多达400QPS的消息处理以及线上10万骑手在线的压力,固然得益于nodejs优秀的并发性能,同时咱们借助redis解决了不少当时遇到的问题。

1.八、将来可期

将来,咱们指望在网关生态上作更多的建设,当前在作的即是引入Kong来解决项目庞大的问题,另外还有更多待解决的问题须要咱们继续折腾~

二、点我达网关生态

前端在服务器端的生态圈不如java那么齐全,不少东西也都是在摸索。通过了这么几年的打磨,多少对网关这个东西有必定的总体模型,下面的示意图即是当前点我达网关生态的模型,是当前在作以及将来要作的事情

下图是一张宽泛的网关架构图:

在当前实现的版本中,详细的生态应该是这样的,不只有可持续发展的业务能力,也具有稳定高效地地基,同时能够提供众多能力给开发的童鞋:

三、点我达网关开发流程

话说技术的积累离不开业务的拓展,没有实际项目的实战,一切都是纸上谈兵。因此有一套完善的开发流程不只能够改善开发体验,并且能够保障项目的质量。这几年的实战下来,为了达到上述的两个目的,咱们不断优化开发流程,从此仍然会不断优化。下图即是技术开发整个流程,仅供参考:

而技术开发流程离不开各类各样的评审,好比上述中的代码评审,从PM的角度来阐述这个流程多是这样的:

四、移动端技术栈

这里的移动端包括了移动端Hybrid H5和网关,这条技术栈包含了主要的技能点,每一个技能点都有对应的知识库在内部分享。里面的技术栈也会随着业务的演变和迭代进行微调。虽说大部分是网关开发,可是咱们也承担移动端H5页面的开发,目前点我达骑手端和商家端,仍然嵌入很多的H5页面。有兴趣的童鞋能够自行下载体验一番(如何区分是H5页面仍是非H5页面,这里就不用说了吧?)

五、团队管理

这是我第一次谈及团队管理。以前没有太多的经验,可是随着从2018年初开始负责移动端网关以后,我本身就常常反思,如何负责好移动端网关?虽然没有明确的title,可是本身的思想发生了很大的转变,作需求再也不是单纯作需求了,会考虑需求的合理性,需求与同时期需求的关联与冲突。每次需求排期,都要考虑好需求适合开发的人选,以及如何管理你们的任务?遇到大的项目,考虑的东西更多,什么兼容性、发布流程、技术方案选择,都会和开发人员讨论一番并在即将上线前再检查一遍。

有的人可能会说,这不是事无巨细地忙活吗?那还有时间开发吗?其实这些东西由于有了一套完善的开发流程,不少事情在流程上都被解决掉了,并不会花太多时间。技术毕竟仍是个人第一选择,在职的两年多,除了关注这些以外,还会和你们一块儿发现问题,一块儿解决问题,一块儿造轮子。咱们从无到有,不断给前端开发添砖加瓦~

5.一、分析团队以及当前开发遇到的问题

由于不是凭空进入这个团队,因此对于团队成员和团队项目有着不少了解,这对于我来讲是幸运的?而后除了分析你们的技能点以外,就是寻找影响你们开发体验的一些问题,因而有了这么一张图:

每过一个季度,咱们都会将这个季度遇到的问题再次从新更新一遍,哪些解决了?哪些解决了可是还不够完善?哪些是新增的问题?以此给你们一个”人人为我,我为人人“的积极心态。让你们彼此知道咱们团队的发展状况,有一种主人翁的意识去工做。通过一年多的改进,变化仍是很明显的:

5.二、输出统一的目标

在负责网关以后,创建的钉钉群里,公告上我就提出了团队的核心目标是“打造质量可靠、开发速效的前端网关团队”,而咱们一直追求的也是这样的一个节奏。没有可靠的质量保证,一切皆惘然。因此咱们在开发流程中植入了不少环节去保证这个目标能够有条不紊地实现,好比加入技术方案评审,在项目初期排除有风险的问题点,在分支测试环节,进行代码review,检查代码规范以及逻辑是否有问题,在灰测阶段,使用A/B测试来检查项目是否有别的问题,层层保障只为了每一个需求均可以交付一份满意的答卷。

保障质量的同时,咱们也但愿可以提升开发效率,可以机器完成的事情毫不要人为去作。包括一些检查,自动化测试等等,有了这些自动化行为,咱们才能体会到开发的丝滑顺柔,才能有时间去作些咱们本身想作的事情,而不只仅是业务。

如此两者正向循环,互补互惠,能够给团队带来极大的能量。

5.三、规范化开发流程

规范化开发流程是指从拿到需求到需求上线,这个流程在上面的图已经表达过了。曾经就有故障由于流程的某个环节缺失,致使bug直接反馈在线上,因此保证规范化开发流程是颇有必要的。

5.四、输出并维护团队共有的知识库

自从全组推行使用Notion软件以后,团队的协做变得更加顺畅。在Notion上咱们单独开辟出一个专栏,叫作“前端知识库”,上面能够放置你写的博客,也能够引用你看过的某篇很是有意思的文章,并造成分类,这些知识库也是对现有技术栈的学习。除了这些,咱们还会将各类前端规范、入门手册、项目介绍等等信息都维护在这里,不只方便团队成员查阅,更能够帮助新成员快速融入团队并上手项目。如图所示:

5.五、鼓励团队技术与业务创新

除了正常的业务迭代需求,内部时常会有一些新的系统须要开发。在新项目开发上,鼓励你们使用最新技术,好比小程序的使用、GraphQL的使用等等。而那些正常迭代的项目,也能够对某些模块进行升级,不断优化。在业务上,能够有造成本身的领域模型,帮助产品更好地规划需求的重构等等。团队毕竟不是独立存在的,咱们须要协做的第三方不少,有了本身的一套新技术基础,咱们才能够在面对需求的时候,抉择最佳的方案。

5.六、按期鞭策团队

前端知识变化太快,标准一年一次迭代。因此咱们为了更快成长,须要不断地更新旧有和新加的知识,因而咱们按期组织你们进行考试。是的,你没听错,就是像学生时代那样的考试。每一个人能够从各个渠道上搜罗题目,而后造成一份综合性试卷,这些题目要求和现有技术栈紧密贴近,能够很基础,也能够很开放。每次考试题目都会维护起来并分门别类,给你们有空的时候翻翻看。每次会议的时候,我都会这么跟你们说这样的一句话“未来万一你真的想离开团队去寻找更好的平台,这些知识或许能够帮助你面试经过,而不用去疯狂刷题背题,由于咱们天天都在面试”。

六、最后

好了,闲扯了这么多,最后欢迎关注个人我的博客:豆米的博客