乐趣区

关于后端:传统-Web-框架部署与迁移

简介:与其说 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 反对疾速创立和部署的传统框架 综上所述,通过阿里云函数计算进行传统 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!原文链接:https://click.aliyun.com/m/10… 本文为阿里云原创内容,未经容许不得转载。

退出移动版