传统 Web 框架部署与迁移

news2024/10/3 2:15:51

与其说 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 支持快速创建和部署的传统框架

综上所述,通过阿里云函数计算进行传统 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 产品经理
田初东,蚂蚁集团算法工程师
卢萌凯,阿里云 Serverless 高级解决方案架构师
王仁达,阿里云 Serverless 工具链技术负责人

点击此处 ,直达阿里云函数计算 FC!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跳槽or裸辞?2022年真不建议···

2022年是个“难过”的一年。 疫情、经济寒冬、房价跳水、基金股票一片红。其实这些都是连锁反应。 企业不好过&#xff0c;也会引发一系列裁人潮&#xff0c;其实最近挺多小伙伴反映过&#xff0c;今年过的如牛马&#xff0c;一人干活量顶仨。想辞职躺平&#xff0c;又没有绝…

BurpSuit官方实验室之信息泄露

BurpSuit官方实验室之信息泄露 这是BurpSuit官方的实验室靶场&#xff0c;以下将记录个人信息泄露共5个Lab的通关过程 Web Security Academy: Free Online Training from PortSwigger lab1&#xff1a; Information disclosure in error messages 错误消息中的信息泄露 在…

从金鸡百花电影节,看“鼓浪屿元宇宙”的元力、魅力与想象力

文|智能相对论 作者|青月 元宇宙的走红&#xff0c;始于2021年3月10日Roblox在美上市&#xff0c;这个和现实世界相平行又相交叉的虚拟世界开始引起市场的注意&#xff0c;并迅速风靡全球。 虽然2022年&#xff0c;关于元宇宙的探索已经进入了一个相对务实的阶段&#xff0c…

【毕业设计】机器视觉停车位识别检测系统 - python 深度学习

文章目录1 简介2 检测效果3 实现方式3.1 整体思路3.2 检测空车位3.3 车辆识别4 最后1 简介 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c;各个学校对毕设…

【面试题】「2023」JavaScript 最新高频 前端面试题 指南 (必看)

前言 大家好&#xff0c;本次总结了关于JavaScript的上百道高频面试考点&#xff0c;感谢大家的留言点赞收藏 &#x1f497; 如果文中有不对、疑惑或者错字的地方&#xff0c;欢迎在评论区留言指正&#x1f33b; 更多题库 地址&#xff1a;前端面试题库 基础篇 1. 将数组的…

【微前端开发环境下,加载远程子应用的实战。】

一开始我们的本地开发运行的环境&#xff0c;如果没有启动子应用的话。对应的页面是白屏的。 问题&#xff1a; 当有关联资源需要跳转时无法跳转&#xff0c;需要额外打开一个浏览器tab页到环境上面执行操作。当bug类型为纯ui-server端的内容时&#xff0c;需要手动启动bug相关…

【数据库原理及应用】——事务并发控制和恢复技术(学习笔记)

&#x1f4d6; 前言&#xff1a;事务是数据库操作的基本逻辑单元&#xff0c;事务处理技术主要包括数据库并发控制技术和恢复技术。本章首先介绍了事务的基本概念和四个特性&#xff0c;然后讨论事务并发操作可能引起数据库的不一致性&#xff0c;继而引入数据库的并发控制技术…

Compare线刷包与卡刷包

Android系统分为卡刷包和线刷包 小米11线刷包 从该版本的boot.img中抽取出的内容如下图 小米11卡刷包 从该版本的boot.img中可以提取的内容是 也就是说&#xff0c;想要做配置文件抽取需要用线刷包。经过测试&#xff0c;目前高版本的卡刷包通过解压都无法获取到boot.img…

图像分割 - 阈值处理 - 固定阈值法

目录 1. 介绍 2. 固定阈值处理 1. 介绍 图像分割就是将图像分成不同的区域&#xff0c;每个区域满足相似的条件。通常&#xff0c;都是将图像分为两个区域&#xff1a;前景区域和背景区域。 前景就是人们感兴趣的位置&#xff0c;例如一副Lena图像&#xff0c;我们只对这副图…

Redis-Mysql八股总结

Redis 说一下 Redis以及Redis 使用场景 答&#xff1a;Redis 是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。 Redis 设置过期时间的命令 # 设置 key 在…

上网行为监控都能审计到哪些内容?

现在很多企业都部署了上网行为监控系统&#xff0c;那么&#xff0c;它可以审计到哪些内容呢&#xff1f;目前市面上有不同种类的上网行为监控系统&#xff0c;其功能都是大同小异的&#xff0c;这里我们以墨门云为例&#xff0c;了解一下装了这个软件之后管理者可以审计到哪些…

WPF探究【一】

文章目录WPF的概述&#xff1a;控件分类XAML对象元素语法XAML根元素WPF和XAML命名空间声明控件Lablel示例继承关系TextBlockbuttonBorderWPF的概述&#xff1a; WindowsPresentationFoundation&#xff08;简称WPF&#xff09;WPF的核心是一个与分辩率无关且基于实量的呈现引擎…

【深入理解Kotlin协程】使用Job控制协程的生命周期

Job 是协程上下文CoroutineContext的实现之一&#xff0c;通过它我们可以对协程的生命周期进行一些控制操作。Job 是协程的句柄。使用 launch 或 async 创建的每个协程都会返回一个 Job 实例对象&#xff0c;该实例是相应协程的唯一标识并管理其生命周期。还可以将 Job 传递给 …

数据结构与算法(四) 广度优先搜索

本篇文章继续来学习广度优先搜索算法&#xff08;Broad-First-Search&#xff0c;BFS&#xff09; 1、本质 广度优先搜索本质上还是遍历整个搜索空间&#xff0c;找到给定问题的解 实际上也是一种暴力搜索算法&#xff0c;不过其中的实现细节和优化细节还是值得探讨的 与深度…

基于PHP+MySQL的大学生交友社交网站

近年来,大学生的数量在逐步的增加,为了能够让这些大学生有一个更好的交友环境,需要创建一个基于大学生的社交交友网站。这样可以拉近彼此大学生之间的感情,让他们可以更好的进行学习和交流。 PHP大学生交友社交网站通过PHP&#xff1a;MySQL进行开发,分为前台和后台两部分,通过…

线程的状态

Java中线程的状态是通过枚举类型Thread.State表示的 &#xff0c;通过打印这些枚举类型&#xff0c;就可以知道java中线程的状态有哪些 public class ThreadState {public static void main(String[] args) {for (Thread.State state : Thread.State.values()) {System.out.pr…

进销存管理系统是什么?有哪些功能?

对于2022年刚开始&#xff0c;但是可以的确的是禽流感在短时期内是不可能返回他们&#xff0c;作为虚拟店面批发商想勇往直前中&#xff0c;就必须要亲吻网络&#xff0c;把销售业务从实体店搬至线上去。 想突破现状&#xff0c;化解虚拟店面批发民营企业的存活问题&#xff0…

ES初使用记录——写入与查询数据

本周接到一个任务&#xff1a;定时统计订单表中的数据&#xff0c;将异常订单挑出来&#xff0c;放入ES中供统计页面从总数点击跳转过去进行列表展示。 一、配置ES 配置maven&#xff0c;注入template Resource private ElasticsearchTemplate elasticsearchTemplate; 二、…

一、OBS概述

1. 概述 obs官网git源码编译 2. 软件能力 输入&#xff1a;文本、图片、窗口、音视频及摄像头等 处理&#xff1a;视频及图片滤镜、音频混音等 输出&#xff1a;rtmp推流、本地录制(mp4)、音视频裸数据(pcm/yuv/rgb)等 3. 模块 a. core核心模块 libobs 加载、管理各个功能…

Ansys Zemax | 大功率激光系统的STOP分析2:如何进行光机械设计准备

大功率激光器广泛用于各种领域当中&#xff0c;例如激光切割、焊接、钻孔等应用中。由于镜头材料的体吸收或表面膜层带来的吸收效应&#xff0c;将导致在光学系统中由于激光能量吸收所产生的影响也显而易见&#xff0c;大功率激光器系统带来的激光能量加热会降低此类光学系统的…