导语
本文阐述了基于Serverless搭建一站式node服务管理平台过程中,在开发框架、日志、监控、部署等方面遇到的问题及技术方案。
背景
Serverless是一种无服务器架构,它的弹性伸缩,按需使用,无运维等特性都是未来的发展方向。但是如何充分的利用Serverless的优势是一个需要探索实践的问题。本文介绍的SFF(Serverless For Frontend)一站式node服务管理平台,基于Serverless服务提供一套node服务整体解决方案,解决目前公司内node服务的以下痛点问题:
1、node服务无法根据负载弹性伸缩,突发流量大时有雪崩风险。
2、node服务无法平滑高效迁移Serverless函数型服务。
3、全栈项目无统一规范,无统一构建部署流程及工具。
4、node服务运维困难,无完整监控、性能分析、故障排查手段。
让开发者专注业务开发,提升开发和运维效率。本平台整体功能结构如下:
下面对其关键功能实现进行阐述。
全栈工程开发方案
SFF的脚手架提供了全栈开发的项目骨架,其中包含了前端工程和后端工程,这里面的问题是如何进行前后端工程的文件组织?传统的开发中,前端工程开发页面时需要mock后端工程的api数据,后端工程开发api时依赖前端页面的请求,如何在本地高效进行前后端项目的开发联调?如何在部署阶段进行前后端项目的统一部署?我们的解决方案如下:
1、前端工程与后端工程分别存放在client与server文件夹中,拥有独立的package.json文件,优点是对于依赖的npm包及运行时的文件依赖可以做到解耦合。
2、node端开发了静态资源插件egg-wb-static,该插件能够实现前后端工程无需mock数据或者mock api请求,达到开发阶段即联调的效果。
其原理是在本地开发时访问后端工程服务,这样本地开发和线上部署访问方式一致,该插件将静态资源的请求代理到前端工程的dev server,所以拥有前端工程本地开发的热更新等能力。在部署阶段,静态资源部分上线到cdn,模版资源放入node项目中,该插件又提供了渲染页面的能力。
3、结合 npm script + 构建部署命令 + 不同部署环境的环境变量 + docker镜像,实现了构建阶段的依赖安装、打包,产出上线静态资源包+部署镜像。
前端工程化方案
我们采用webpack作为前端工程的构建工具,面对的问题