如何将传统 Web 框架迁移部署到 Serverless 架构?

简介: 与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式。

与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式。


但是原生的 Serverless 开发框架却非常少。以Web框架为例,目前主流的Web框架“均不支持Serverless模式部署”,因此我们一方面要尝试接触Serverless,一方面又没办法完全放弃传统框架,所以如何将传统框架更简单、更快速、更科学地部署到Serverless架构是一个值得探讨的问题。


请求集成方案


请求集成方案实际上就是把真实的API网关请求直接透传给FaaS平台,而不在中途增加任何转换逻辑。以阿里云函数计算的HTTP函数为例,当想要把传统框架(例如Django、Flask、Express、Next.js等)部署到阿里云函数计算平台,并且体验Serverless架构带来的按量付费、弹性伸缩等红利时,得益于阿里云函数计算的HTTP函数和HTTP触发器,使用者不仅可以快速、简单地将框架部署到阿里云函数计算平台,还可以获得和传统开发一样的体验。


例如以Python的Bottle框架开发一个Bottle项目:


# index.py
import bottle
@bottle.route('/hello/<name>')
def index(name): 
return "Hello world"
if __name__ == '__main__': 
bottle.run(host='localhost', port=8080, debug=True)

之后,可以直接在本地进行调试。当想要把该项目部署到阿里云函数计算平台时,只需要增加一个default_app的对象即可:


app = bottle.default_app()


整个项目的代码如下所示:


# index.py
import bottle
@bottle.route('/hello/<name>')
def index(name): 
     return "Hello world"
app = bottle.default_app()
if __name__ == '__main__':
     bottle.run(host='localhost', port=8080, debug=True)


若在阿里云函数计算平台创建函数,将入口函数设置为index.app即可。除了Bottle框架之外,其他Web框架的操作方法是类似的,再以Flask为例:


# index.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world(): 
    return 'Hello, World!'
if __name__ == '__main__': 
    app.run( 
        host="0.0.0.0",
        port=int("8001")
)


在创建函数的时候设置入口函数为index.app,就可以保证该Flask项目运行在函数计算平台上。


当然,除了使用已有的语言化Runtime(指具体语言的运行时,例如Python3运行时、Node. js12运行时),我们还可以考虑使用Custom Runtime和Custom Container来实现,例如,一个Web项目完成之后,可以编写一个Bootstrap文件(在Bootstrap文件中写一些启动命令)。


例如要启动一个Express项目,把Express项目准备完成之后,可以直接创建Bootstrap文件,并将启动命令配置到该文件中:


#!/usr/bin/env bash
export PORT=9000
npm run star


阿里云函数计算还提供了更简单的Web框架迁移方案。如图所示是阿里云函数计算页面传统Web框架迁移功能示例。


阿里云函数计算页面传统Web框架迁移功能


选择对应的环境之后,只需要上传代码,做好简单的配置,即可让传统的Web框架迁移至阿里云函数计算平台。


如果通过开发者工具进行部署,以Serverless Devs为例,首先创建index.py:


# -*- coding: utf-8 -*-
from bottle import route, run
@route('/')
def hello(): 
    return "Hello World!"
run(host='0.0.0.0', debug=False, port=9000)


然后编写资源和行为描述文件:


edition: 1.0.0 
name: framework                                                       #项目名称
access: "default"                                                     #密钥别名
services:
    framework:                                                        #业务名称/模块名称
        component: fc                                                 #组件名称
        actions:
            pre-deploy: #在部署之前运行
                - run: pip3 install -r requirements.txt -t .          #要运行的命令行
                   path: ./code                                       #命令行运行的路径
        props:                                                        #组件的属性值
            region: cn-beijing
        service:
            name: web-framework
            description: 'Serverless Devs Web Framework Service'
        function:
            name: bottle
            description: 'Serverless Devs Web Framework Bottle Function'
            codeUri: './code'
            runtime: python3 
            handler: index.app 
            timeout: 60
       triggers:
            - name: httpTrigger
                type: http
                config:
                    authType: anonymous
                    methods:
                        - GET
      customDomains:
         - domainName: auto
             protocol: HTTP
             routeConfigs:
                 - path: '/*'


同时,提供对应的Bootstrap文件,即启动文件:


#!/bin/bash
python3 index.py


完成之后,执行deploy指令进行部署:


s deploy


部署结果如图所示。


Serverless Devs部署Bottle框架过程


根据返回的网址,可以看到部署结果预览,如下图所示。


Serverless Devs部署结果预览


通过Serverless Devs开发者工具,我们不仅可以简单地进行传统Web框架的部署,还可以快速在Serverless架构下进行传统Web框架的初始化。以Express项目为例,只需要通过Serverless Devs开发者工具执行如下代码即可进行Express.js项目的初始化。


s init start-express


初始化的过程如图所示。此时,只需要进入该项目执行如下代码即可快速进行项目的部署。


s deploy

通过Serverless Devs初始化Express项目


部署结果如图所示。


打开系统分配的地址,可以看到通过Serverless Devs开发者工具初始化的Express项目,效果展示如下图所示。

Express项目完成效果展示


当然,目前Serverless Devs开发者工具不仅支持Express项目的快速初始化(见表),还支持包括Django、Flask、SpringBoot等数十个传统框架的快速创建与部署。


表格--Serverless Devs支持快速创建和部署的传统框架

语言

Node.js

Python

PHP

Java

其他

所支持的框架

 Express.js

 Flask

 Think PHP

 SpringBoot

 Vue.js

 Egg.js

FastAPI

 Laravel

 React.js

 Nuxt.js

 Django

 Zblog

 Docusaurus

 Next.js

 Tornado

 Wordpress

 Hexo

 Nest.js

 Web.py

 Discuz

 Vuepress

 Thinkjs

 Pyramid

 Metinfo

 Koa.js

 Bottle

 Whatsns

 Connect

 Ecshop

 Hapi

 Typecho

综上所述,通过阿里云函数计算进行传统Web框架的部署和迁移是很方便的,并且得益于HTTP函数与HTTP触发器,整个过程侵入性非常低。当然,将传统Web框架部署到阿里云上的可选方案也比较多。


  • 编程语言化的Runtime:只需要写好函数入口即可。
  • Custom Runtime:只需要写好Bootstrap即可。
  • Custom Container:直接按照规范上传镜像文件即可。


部署途径也是多种多样的,具体如下。

  • 直接在控制台创建函数。
  • 在应用中心处创建Web应用。
  • 利用开发者工具。


其它方案


相对于阿里云的HTTP函数以及HTTP触发器,其它FaaS平台则需要借助API网关以及一个转换层来实现传统Web框架到FaaS平台的部署。


如图所示,以Python Web框架为例,在通常情况下,使用Flask等框架时实际上要通过Web Server才能进入下一个环节,而云函数是一个函数,本不需要启动Web Server,所以可以直接调用wsgi_app方法。


传统WSGI Web Server工作原理示例


这里的environ就是对event/context等处理后的对象,也就是所说的转换层要做的工作;start_response可以认为是一种特殊的数据结构,例如response结构形态等。


当然,转换工作在某些情况下还是比较麻烦的,所以很多时候我们可以借助常见的开发者工具进行传统Web框架的部署,例如借助开源的开发者工具Serverless Devs、Serverless Framework等。


🌏更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。


👉点击直达函数计算官网!

相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
人工智能 自然语言处理 数据可视化
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
|
9月前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
722 6
|
数据采集 运维 Serverless
云函数采集架构:Serverless模式下的动态IP与冷启动优化
本文探讨了在Serverless架构中使用云函数进行网页数据采集的挑战与解决方案。针对动态IP、冷启动及目标网站反爬策略等问题,提出了动态代理IP、请求头优化、云函数预热及容错设计等方法。通过网易云音乐歌曲信息采集案例,展示了如何结合Python代码实现高效的数据抓取,包括搜索、歌词与评论的获取。此方案不仅解决了传统采集方式在Serverless环境下的局限,还提升了系统的稳定性和性能。
489 0
|
存储 运维 Serverless
千万级数据秒级响应!碧桂园基于 EMR Serverless StarRocks 升级存算分离架构实践
碧桂园服务通过引入 EMR Serverless StarRocks 存算分离架构,解决了海量数据处理中的资源利用率低、并发能力不足等问题,显著降低了硬件和运维成本。实时查询性能提升8倍,查询出错率减少30倍,集群数据 SLA 达99.99%。此次技术升级不仅优化了用户体验,还结合AI打造了“一看”和“—问”智能场景助力精准决策与风险预测。
1329 69
|
11月前
|
人工智能 自然语言处理 JavaScript
Github又一AI黑科技项目,打造全栈架构,只需一个统一框架?
Motia 是一款现代化后端框架,融合 API 接口、后台任务、事件系统与 AI Agent,支持 JavaScript、TypeScript、Python 多语言协同开发。它提供可视化 Workbench、自动观测追踪、零配置部署等功能,帮助开发者高效构建事件驱动的工作流,显著降低部署与运维成本,提升 AI 项目落地效率。
865 0
|
Java 开发者 Spring
Spring框架 - 深度揭秘Spring框架的基础架构与工作原理
所以,当你进入这个Spring的世界,看似一片混乱,但细看之下,你会发现这里有个牢固的结构支撑,一切皆有可能。不论你要建设的是一座宏大的城堡,还是个小巧的花园,只要你的工具箱里有Spring,你就能轻松搞定。
513 9
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
784 12
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
监控 安全 Cloud Native
企业网络架构安全持续增强框架
企业网络架构安全评估与防护体系构建需采用分层防御、动态适应、主动治理的方法。通过系统化的实施框架,涵盖分层安全架构(核心、基础、边界、终端、治理层)和动态安全能力集成(持续监控、自动化响应、自适应防护)。关键步骤包括系统性风险评估、零信任网络重构、纵深防御技术选型及云原生安全集成。最终形成韧性安全架构,实现从被动防御到主动免疫的转变,确保安全投入与业务创新的平衡。
1100 2
|
存储 消息中间件 人工智能
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
455 0

相关产品

  • 函数计算