Serverless 带给 Node.js 开发模式的改变

案例来源:美团
会议地点:深圳
分享时间: 2019-06-22 09:00-10:00

龙佳文  |

美团 金融服务平台 技术专家

美团高级前端工程师。目前主要负责公司内部 Node.js Serverless 云函数平台和工具链建设。致力于提升开发者效率和用户体验,曾参与前端工程化方案建设,推动了来自多个BG 的近两百人的前端团队的开发模式的升级,也参与日均亿级前端离线化和增量更新方案的。热爱开源,在 Github 有千级 Star 的开源项目。目前关注 Flutter 和 Node.js 以及 Serverless 方向。

课程概要

【案例背景介绍】
团队大量使用 Node.js 开发前后端分离项目,包括服务端渲染、数据聚合处理、graphQL等场景 当前使用 Node.js 遇到的挑战 服务端编程成本,相对于浏览器端的 JavaScript 编程,服务端对开发者能力有更高的要求 - 需要对 Node.js 运行机制有一定了解 - 需要对引入的框架、SDK 组合的复杂系统有足够了解 服务运维成本,对于前端开发者,服务端运维更加是陌生的领域 - 引入 Node.js 后增加服务链路长度 - Node.js 服务的运维 - 服务器资源和基础运维 其中 Node.js 和系统运会维占用不少精力,并不是所有前端团队成员都有足够丰富服务端编程和运维经验,所以有能够隔离底层系统的维护成本、微服务化和轻量化的项目架构是我们一直期望的。

【解决思路/成功要点】
简单,统一 Nodejs 应用开发、部署、运维中的基础过程,降低 Nodejs 应用非开发成本 高效,通过动态分发、分布式集群处理的机制,实现按需弹性运行,减少占用服务器资源 函数执行,worker 基于 Node.js 的 thread_worker/ child_process 的实现线程/进程隔离的安全业务函数执行环境。 分布式,通过抽象 API Gateway、Worker 模块,API Gateway 接收请求,将请求上下文分发到相应 Worker 执行函数调用,实现动态、按需调用。 优化点: 冷启动问题 根据历史调用记录,对高频函数制定了函数的实例保留机制,尽可能让热点函数访问都来自热启动 函数体积优化 针对 Node.js 有好用但黑洞般的 node_modules 的实际场景,我们制定了在通过基础依赖复用机制来减少了函数包的体积,根据现有几种类型项目的制定基础依赖集合,在构建函数中排除基础依赖的打包,通过这个机制,函数包体积平均下降 70%,大多项目在 5 MB 以内。 函数监控 通过 hook node 运行时的相关原生 binding,实现 node 应用级别的数据指标采集,对函数的执行时长、执行异常、CPU 时间、内存占用、网络带宽、磁盘读写等实现了函数粒度的监控

【成果】
目前托管团队内多数的 node 项目,稳定性 99.99,具备异地多机房容灾能力。极大提升了项目开发效率,降低运维成本;节省了 70% VM/容器资源。

听众收益

1. 老项目如何迁移到 Serverless 中以及迁移过程中的常见问题
2. Node.js 项目如何更高效运行在 Serverless 架构中的几个优化动作
3. 我们在轻量化 Serverless 方案在优化冷启动、函数包大小、Node.js 函数状态监控的实现思路

龙佳文  |

美团
金融服务平台 技术专家

美团高级前端工程师。目前主要负责公司内部 Node.js Serverless 云函数平台和工具链建设。致力于提升开发者效率和用户体验,曾参与前端工程化方案建设,推动了来自多个BG 的近两百人的前端团队的开发模式的升级,也参与日均亿级前端离线化和增量更新方案的。热爱开源,在 Github 有千级 Star 的开源项目。目前关注 Flutter 和 Node.js 以及 Serverless 方向。

课程概要

【案例背景介绍】
团队大量使用 Node.js 开发前后端分离项目,包括服务端渲染、数据聚合处理、graphQL等场景 当前使用 Node.js 遇到的挑战 服务端编程成本,相对于浏览器端的 JavaScript 编程,服务端对开发者能力有更高的要求 - 需要对 Node.js 运行机制有一定了解 - 需要对引入的框架、SDK 组合的复杂系统有足够了解 服务运维成本,对于前端开发者,服务端运维更加是陌生的领域 - 引入 Node.js 后增加服务链路长度 - Node.js 服务的运维 - 服务器资源和基础运维 其中 Node.js 和系统运会维占用不少精力,并不是所有前端团队成员都有足够丰富服务端编程和运维经验,所以有能够隔离底层系统的维护成本、微服务化和轻量化的项目架构是我们一直期望的。

【解决思路/成功要点】
简单,统一 Nodejs 应用开发、部署、运维中的基础过程,降低 Nodejs 应用非开发成本 高效,通过动态分发、分布式集群处理的机制,实现按需弹性运行,减少占用服务器资源 函数执行,worker 基于 Node.js 的 thread_worker/ child_process 的实现线程/进程隔离的安全业务函数执行环境。 分布式,通过抽象 API Gateway、Worker 模块,API Gateway 接收请求,将请求上下文分发到相应 Worker 执行函数调用,实现动态、按需调用。 优化点: 冷启动问题 根据历史调用记录,对高频函数制定了函数的实例保留机制,尽可能让热点函数访问都来自热启动 函数体积优化 针对 Node.js 有好用但黑洞般的 node_modules 的实际场景,我们制定了在通过基础依赖复用机制来减少了函数包的体积,根据现有几种类型项目的制定基础依赖集合,在构建函数中排除基础依赖的打包,通过这个机制,函数包体积平均下降 70%,大多项目在 5 MB 以内。 函数监控 通过 hook node 运行时的相关原生 binding,实现 node 应用级别的数据指标采集,对函数的执行时长、执行异常、CPU 时间、内存占用、网络带宽、磁盘读写等实现了函数粒度的监控

【成果】
目前托管团队内多数的 node 项目,稳定性 99.99,具备异地多机房容灾能力。极大提升了项目开发效率,降低运维成本;节省了 70% VM/容器资源。

听众收益

1. 老项目如何迁移到 Serverless 中以及迁移过程中的常见问题
2. Node.js 项目如何更高效运行在 Serverless 架构中的几个优化动作
3. 我们在轻量化 Serverless 方案在优化冷启动、函数包大小、Node.js 函数状态监控的实现思路

CopyRight © 2008-2019 Msup & 高可用架构