滴滴NodeX生态 ,让开发更高效

image

桔妹导读:滴滴NodeX是由滴滴普惠、金融、车服三个泛前端团队合力共建,致力于打造滴滴集团级的专业、高效、稳定的Node研发生态。帮助开发者降低服务搭建门槛,提升壁垒和快速闭环赋能业务,目前生态已覆盖滴滴大部分业务。

0. 前言

能用 JavaScript 编写的程序,都终将会以 JavaScript 编写。”这句话曾经听起来十分高傲,但是随著 Node.js 的发展,我们渐渐地明白到这句话的远见性──JavaScript 真的越来越强大了。

Node.js是一个非常新兴的开发工具,虽然它诞生自 2009 年,但是它确实有史以来发展最快的开发工具,没有之一。在这短短的几年间,我们看到了 Node.js 从当初的一无所有到如今的飞速发展,说明这背后的需求场景是巨大的。

1. 背景

早在前几年,滴滴前端技术团队就在探索 Node.js 的实践和落地,积极将传统的前端推向大前端领域,并在生产环境中考验自身以及 Node.js 的素质。无论是哪个团队,Node.js 在团队中都扮演了十分重要的角色,各个团队也结合滴滴内部的场景各自沉淀了大量组件和相关生态。

为了让我们历史沉淀的经验能够在滴滴内铸就更大的价值,并且能够输出给外部社区,我们成立了NodeX 跨团队FT,致力于打造滴滴集团级的专业、高效、稳定的Node研发体系。

2. 什么是NodeX

有些同学可能还不知道NodeX生态到底是什么,接下来就为大家介绍下我们的生态体系,若有疑问或想交流,欢迎评论留言。

一张图了解NodeX

image

上面的图简要的概括了NodeX做的事情和愿景,我们在生态内提供组件框架、研发支撑平台以及通用服务能力,同时也有辅助开发的滴滴Node指南,贯穿整个开发周期。目标就是为了让我们的开发者能够以更低门槛、更小成本、更高效率的开发Node服务,最终提升壁垒和闭环能力,快速高效的为业务赋能。就像下面这张图一样,开发者更多的只需要关心业务代码开发。

image

了解完宏观层面的思考之后还是觉得对NodeX了解不够清晰怎么办?那就看看下面这个架构图吧,图里包含了各个核心的能力点和组成部分。

全局架构图

image

从上面的架构图可以看出来我们主要由几块组成,分别是上面提到的组件框架、研发支撑平台、通用服务以及贯穿整个研发周期的文档体系,各个模块都是相辅相成,下面我们就将各个核心模块一一给大家介绍一下。

3. 组件

NodeX Components提供常用的 Node.js 基础组件模块,同时这些常用组件和滴滴各个服务进行打通,减少了很多不必要的重复底层联调对接工作。优质的组件往往需要经过大量的历史经验沉淀,以及流量的考验。

NodeX Component中的组件都在经历过真实的生产环境的鞭策,在历史的翻车和事故中沉淀了不少经验。大部分组件的解决方案都在线上跑了两年、甚至三年左右,持续不断的踩坑和维护,才锤炼出目前的稳定,同时我们也会持续优化迭代现有组件性能稳定性和拓展新的能力。目前已覆盖绝大部分场景约20余种组件,详情可以查看下面这张图:

image

整个组件工程是通过lerna来统一管理各个组件的开发、单测、发布等生命周期,同时提交代码也会有严格的规范,这块是通过commitizen来管理,代码格式则是通过Eslint+Prettier校验,感兴趣的可以了解下相关能力。

image

4. 框架

在组件之上,得益于egg灵活的lorder机制,我们基于它封装了一套适合滴滴生态的企业级框架。框架集成了常用的开发插件及中间件,打通了滴滴内基础设施、Node基础设施,并支持了服务滴滴部署环境的个性化配置的开发的应用框架。具备易用,快速部署,健壮,生态丰富等特点,是构建企业级应用的不二之选。

与之配套的则是我们提供的sls-cli脚手架,可以一键初始化标准工程,工程内提供了符合滴滴规范的编译构建脚本,无需改任何代码即可部署线下线上环境,同时集成了基础代码规范配置。开发者可以把更多重心放在业务开发上,而不需要关心更多基础和底层的问题,如果有需求也可以对基础配置和能力进行改造,大大降低了搭建服务门槛。具体架构可以详见下图:

image

5. 研发支撑

除了提供基础组件框架帮助开发者快速搭建服务外,我们还提供了一系列研发支撑的工具和平台,脚手架上面已经有讲到到,下面只介绍两个比较常用的。

性能分析平台

JS Runtime 对于绝大部分的开发者来说是处于黑盒状态的,开发者无法感知其运行状态,出现一些性能、内存问题时也没有很好的工具链进行更深入的支持。所以我们搭建性能分析平台正是为了解决这个问题,帮助大家更方便的解决Node性能问题、提升服务性能瓶颈、并且提供进程级监控告警能力,能够提前预知问题。

我们可以先通过性能平台的业务架构图了解它的基本能力:

image

从业务架构图里面可以看到,性能平台主要提供了进程级细粒度监控、告警及性能文件采集分析的能力,能够帮助开发者实时监控进程性能,及时发现并预警问题,让开发者能够前置处理性能问题,并且有很好的问题处理抓手点。

image

性能平台在我们滴滴内部总共经历了三个版本:第一个版本是基于PM2和V8 Profile的的采集监控版本,平台也只是支持火焰图分析;由于PM2的版本局限性太高,不能够很好的支撑各种Node工程,所以在今年我们重构了V1版本,底层换成XProfile(基于V8的能力,一个C++ addon)采集数据,这样就可以支持PM2、egg-cluster等各种进程管理的项目工程,只要是基于node8以上的版本都可以兼容。

目前是第三版,基于社区EZM的版本构建的,来自一君大神的佳作(XProfile也出自他手),后面主要会通过深度共建回馈社区和定制能力自研增强的方式双工迭代。

Markdown文档平台

文档平台的最开始是为了解决NodeX体系复杂的文档架构而生,在建设的过程中进行了通用化处理,为了能够给更多团队解决文档部署难、同步难的问题,提升构建文档效率,降低团队间沟通成本,同时也能形成沉淀文档的好习惯。

文档平台提供在线实时预览保存及本地编辑markdown能力,一键同步线上,无需编译,支持丰富的文档配置能力,既能满足轻量的文档编辑发布能力,又能满足复杂的混合文档能力,整体文档发布流程图如下:

image

而查看文档就比较简单了,整体实时渲染能力是基于开源的docsify的能力,基于它之上我们做了鉴权、样式升级、埋点等更多能力,具体查看文档流程如下:

image

6. 通用服务

除了基础能力之外,我们在生态内还提供了一系列的通用服务,这些通用服务都是用NodeX体系搭建,在大多数常见场景中抽离出来通用化,开发者可以通过接口直接调用通用服务能力,大大减少了不必要的重复建设,具体架构图这里就不详细展开了。

7. 滴滴Node指南

除了实质的基础生态之外,在提升认知和体系化能力方面,我们建设了滴滴Node指南,结合FT各团队多年的历史沉淀和内外部的一些最佳实践,形成一套覆盖开发前、中、后的各大核心知识体系。目的就是为了让开发者能够更轻松的从0到1搭建一个服务,并且体系性的了解一个服务的各个生命周期都应该干什么,如何学习Node、如何搭建服务、如何编译部署服务、如何运维服务、各种类别最佳实践以及如何保障服务的性能和稳定性等,从而为业务提供稳健的服务能力。目前这套指南正在完善中。

8. 落地情况

在我们的NodeX生态不断建设和推广传播下,令人感到兴奋的是,滴滴内越来越多的团队都在用node做着各种提效降本和业务赋能的尝试,其中不乏有C端业务诸如短域名服务、动态配置服务、埋点服务等,还有一系列中后台服务。未来我们也会将基础能力沉淀到Serverless,提供夯实的基础能力,同时也会沉淀各种类别使用场景解决方案,诸如BFF、SSR、微前端等,帮助开发者快速解决问题。

目前NodeX生态在滴滴内部安装量已突破20W+,服务接入量也达200+,覆盖了滴滴内绝大部分部门。当然上面统计的只是组件和框架的数据,体系内还有通用服务和研发支撑平台接入量也非常可观。整个生态大大提升了研发效率和自闭环能力,帮助越来越复杂的业务快速发展。

image

9. 总结

我们建立 NodeX 体系,是希望能够汇聚滴滴更多的泛前端团队,能够联动起来学习、沉淀、探索、建设、和分享大家历史沉淀的解决方案,服务滴滴的同时也能回馈外部社区,共同建设一个好的Node生态。

本文作者

作者简介

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容