ServerlessDev+云效流水线迁移Express+NodeJS前端应用至函数计算

简介: 笔者所在的公司,PC端页面使用了NodeJS进行部署。由于函数计算(FC)对nodejs有非常优秀的支持,笔者就将整个前端项目由ECS部署迁移至函数计算。

背景

公司内部的PC站页面(www页面),使用了Express+NodeJS对后端资源进行统一请求并渲染,部署在ECS上。由于前段时间接连出现突发请求,使得负载被打满。公司不得不紧急购买了多台ECS进行扩容。同时,我关注到FC对于NodeJS有着相当优秀的支持,基本可以起到秒级启动和秒级扩容。故尝试将项目迁移至FC中。

同时为了解决项目CI/CD的问题,我们同时使用了ServerlessDEV组件并结合云效“流水线”功能,完成了项目的自动打包上线的一系列操作。

需求

  • PC站迁移至函数计算,并可通过HTTP访问
  • 通过云效流水线进行打包和发布。

过程详解

迁移函数计算

得益于Express框架的易用性,整个代码发布到函数计算上还是比较容易的。在函数计算的“应用”中,有线程的模板。(如果大家嫌自己配置麻烦,不如直接使用该功能进行部署,再参考其s.yaml文件对自己的服务进行配置)

image.png

具体的参数配置可以参考下图

image.png

关键参数说明

  • 内存规格大小:通过ServerlessDEV中的性能工具,测得在1GB的内存规格下,可以得到成本和响应时间的最优值(内存规格继续上升,响应时间只有非常微小的下降;而内存规格下降会导致响应时长大幅上升)
  • 启动命令:这里要和项目中package.json内的scripts块相匹配。
  • 执行超时时间:由于是一个PC前端应用,执行时间一般不超过5s(超过5s用户会没有等待的耐心)。考虑到一些异常情况,故配置15s。超时会返回504

踩坑说明(注意事项)

  • Custom Runtime运行环境,默认HTTP端口为3001,部署时要更改NodeJS的默认端口
  • 以前项目是通过nginx进行gzip压缩的,迁移到函数计算后,需要启用NodeJS的gzip压缩配置,不然后期流量会很喜人(压缩后流量约为压缩前流量的1/5)

使用流水线进行发布

完成部署后,就要去搞定流水线发布了。(总不见得每次都黏贴代码吧)。好在通过ServerlessDev能够完成一些CI\CD操作,同时“流水线”内又内置了对ServerlessDev组件的支持。我们只需要准备对应函数的s.yaml文件即可。

文件如下(已经做了脱敏):

edition: 1.0.0services:  cn-hangzhou-lyh_dt_pc-main:    component: devsapp/fc
    props:      region: cn-hangzhou
      service:        description: pc站(生产环境)
        role: acs:ram::11111111:role/AliyunFcDefaultRole
        logConfig:          project: aliyun-fc-cn-hangzhou-1111111
          logstore: function-log
          enableRequestMetrics: true          enableInstanceMetrics: true          logBeginRule: DefaultRegex
        vpcConfig:          vpcId: vpc-1111111
          securityGroupId: sg-1111111
          anytunnelViaENI: null
          vswitchIds:            - vsw-1111111
            - vsw-2222222
            - vsw-3333333
        internetAccess: true        tracingConfig: Enable
        name: test_pc
      function:        runtime: custom
        handler: index.handler
        timeout: 15        memorySize: 1024        environmentVariables: {}        instanceConcurrency: 20        caPort: 3001        instanceType: e1
        customRuntimeConfig:          command:            - npm
          args:            - run
            - start:prd
        name: main
        codeUri: '.'      triggers:        - name: defaultTrigger
          description: ''          type: http
          qualifier: LATEST
          config:            methods:              - GET
              - POST
              - PUT
              - DELETE
              - HEAD
              - OPTIONS
              - PATCH
            authType: anonymous

直接使用流水线进行发布配置,他会自动进行打包。配置的步骤如下:

image.png

步骤:Node.js构建及部署

这里面分2部:

  • NodeJS构建
  • ServerlessDev构建上传(部署)

image.png

其中:

  • 构建命令较为简单,就是普通的打包命令
npminstall
  • ServerlessDev构建上传(部署)相对复杂。需要完成账户配置+发布
sconfigadd--AccessKeyID${FC_AK}--AccessKeySecret${FC_SK}-adefault-fsdeployfunction--use-local-ts.yaml

结束语

至此,我们完成了通过函数计算部署NodeJS.


相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
弹性计算 运维 Serverless
项目管理和持续集成系统搭建问题之云效流水线支持阿里云产品的企业用户如何解决
项目管理和持续集成系统搭建问题之云效流水线支持阿里云产品的企业用户如何解决
264 1
项目管理和持续集成系统搭建问题之云效流水线支持阿里云产品的企业用户如何解决
|
敏捷开发 Java 测试技术
阿里云云效产品使用合集之如何下载流水线构建过程中生成的jar
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
12065 23
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何限制在本地的构建主机创建的流水线的并发数
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
368 10
|
前端开发 JavaScript
node接收前端上传的图片,单文件、多文件同name、多文件不同name
本文介绍了在Node.js中使用multer模块接收前端上传的图片,包括单文件上传、多文件上传(同name和不同name)以及任意类型文件上传的方法。
638 0
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
567 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
前端开发 JavaScript 程序员
【从前端入门到全栈】Node.js 之核心概念
【从前端入门到全栈】Node.js 之核心概念
|
敏捷开发 缓存 5G
阿里云云效产品使用合集之流水线中的webhook是否可以设置为变量
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
Devops API
阿里云效流水线API简单使用
阿里云效流水线API简单使用

热门文章

最新文章

相关产品

  • 函数计算