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 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
8月前
|
前端开发 JavaScript 应用服务中间件
在Docker部署的前端应用中使用动态环境变量
以上步骤展示了如何在 Docker 配置过程中处理并注入环墨遁形成可执行操作流程,并确保最终用户能够无缝地与之交互而无须关心背后复杂性。
428 13
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1016 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
人工智能 前端开发 JavaScript
AI程序员:通义灵码 2.0应用VScode前端开发深度体验
AI程序员:通义灵码 2.0应用VScode前端开发深度体验,在软件开发领域,人工智能技术的融入正深刻改变着程序员的工作方式。通义灵码 2.0 作为一款先进的 AI 编程助手,与广受欢迎的代码编辑器 Visual Studio Code(VScode)相结合,为前端开发带来了全新的可能性。本文将详细分享通义灵码 2.0 在 VScode 前端开发环境中的深度使用体验。
2408 2
AI程序员:通义灵码 2.0应用VScode前端开发深度体验
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
958 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
人工智能 前端开发 JavaScript
详解智能编码在前端研发的创新应用
接下来,人与智能体的交互将变得更为紧密,比如 N 年以后是否可以逐渐过渡。这个逐渐过渡的过程实际上是温和的,从依赖人类到依赖超大规模算力的转变,可能会取代我们的一些职责。这不仅仅是简单的叠加关系。对于AI和超大规模算力,这是否意味着我们可以大幅度提升软件质量,是否可以缩短研发周期并提高效率,还有创造出更优质的软件并持续发展,这无疑是肯定的。
948 25
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
487 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
人工智能 前端开发 JavaScript
智能编码在前端研发的创新应用
在前端开发领域,智能编码技术正引领一场变革,通过大模型的强大能力将自然语言需求直接转化为高效、可靠的代码实现。
559 10
|
人工智能 前端开发 JavaScript
详解智能编码在前端研发的创新应用 | 领通义灵码蛇年红包封面
详解智能编码在前端研发的创新应用 | 领通义灵码蛇年红包封面
|
移动开发 缓存 前端开发
深入理解前端路由:原理、实现与应用
本书《深入理解前端路由:原理、实现与应用》全面解析了前端路由的核心概念、工作原理及其实现方法,结合实际案例探讨了其在现代Web应用中的广泛应用,适合前端开发者和相关技术人员阅读。
|
存储 前端开发 JavaScript
前端中对象的深度应用与最佳实践
前端对象应用涉及在网页开发中使用JavaScript等技术创建和操作对象,以实现动态交互效果。通过定义属性和方法,对象可以封装数据和功能,提升代码的组织性和复用性,是现代Web开发的核心技术之一。

相关产品

  • 函数计算