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.


相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
1天前
|
开发框架 前端开发 JavaScript
现代前端开发中的跨平台解决方案比较与应用
在现代软件开发中,跨平台解决方案成为了开发者们的热门话题。本文将探讨几种主流的跨平台开发框架及其特点,重点比较它们在前端开发中的应用场景和优劣势。通过对比分析,读者可以更好地理解如何选择适合自己项目需求的跨平台解决方案。
|
3天前
|
监控 Serverless 持续交付
阿里云云效产品使用问题之如何让流水线支持构建 flutter web 应用到 OSS
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3天前
|
JSON JavaScript 中间件
Express.js:构建轻量级Node.js应用的基石
**Express.js 概览**:作为Node.js首选Web框架,Express以其轻量、灵活和强大的特性深受喜爱。自2009年以来,其简洁设计和丰富中间件支持引领开发者构建定制化应用。快速开始:使用`express-generator`创建项目,安装依赖,启动应用。示例展示如何添加返回JSON消息的GET路由。Express适用于RESTful API、实时应用等多种场景,社区支持广泛,助力高效开发。
6 1
|
5天前
|
人工智能 API 数据安全/隐私保护
云效+SAE,5分钟搞定一个AI 应用的开发和部署
本实验将带你体验云效应用交付平台AppStack+Serverless 应用交付引擎 SAE,从应用视角,完成一个AI聊天助手的高效交付。
127 0
|
11天前
|
人工智能 前端开发 搜索推荐
人工智能(AI)在前端设计中的创新应用
人工智能(AI)在前端设计中的创新应用
33 4
|
17天前
|
前端开发 持续交付 开发工具
详细介绍Git的基本原理、在前端开发中的应用以及如何使用Git来优化团队协作
【6月更文挑战第14天】Git是前端开发中的必备工具,它通过分布式版本控制管理代码历史,支持分支、合并和冲突解决,促进团队协作。在前端开发中,Git用于代码追踪、版本控制、代码审查和持续集成部署,优化团队协作。制定分支策略、编写清晰提交信息、定期合并清理分支以及使用Git钩子和自动化工具能进一步提升效率。理解并善用Git,能有效提升前端项目的质量和开发效率。
28 3
|
1天前
|
前端开发 JavaScript 开发者
前端开发中的异步编程:Promise 和 Async/Await 的比较与应用
在现代前端开发中,异步编程是不可或缺的技术。本文将深入探讨Promise和Async/Await这两种主流的异步编程方式,分析它们的优劣势及在实际项目中的应用场景。通过比较它们的语法、可读性和错误处理机制,帮助开发者更好地选择和理解如何在项目中高效地利用这些技术。
|
3天前
|
安全 Java Shell
阿里云云效产品使用问题之要配置云效只重启应用的流水线,该如何操作
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3天前
|
运维 JavaScript Serverless
函数计算产品使用问题之构建自己的流水线时,已经有一个基础第三方包的层,想在这个基础上进行额外的第三方包安装,该如何实现
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
9天前
|
达摩院 供应链 调度
【FlowShop流水线作业排班问题【数学规划的应用(含代码)】阿里达摩院MindOpt】
本文探讨了使用阿里巴巴达摩院的MindOpt工具解决FlowShop流水线作业排班的数学规划问题。FlowShop涉及到多台机器、多个工序和多个作业,目标是通过优化排班最小化总生产耗时。MindOpt通过数学规划方法,如线性或混合整数线性规划,将问题建模并转化为代码,利用云建模平台MindOpt Studio和MindOpt APL建模语言进行求解。案例中详细介绍了参数定义、变量解析、约束设置和目标函数,展示了如何通过MindOpt进行建模和求解,以达到最优化的生产调度。此外,文章还提供了代码示例和结果解析,帮助读者理解如何实际应用MindOpt解决这类问题。

热门文章

最新文章

相关产品

  • 函数计算