开发者社区> 阿里云云原生小助手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

传统 Web 框架部署与迁移

简介: 与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式。
+关注继续查看
福利推荐:阿里云、腾讯云、华为云等大品牌云产品全线2折优惠活动来袭,4核8G云服务器899元/3年,新老用户共享优惠,点击这里立即抢购>>>

与其说 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 框架迁移功能示例。


1.png

阿里云函数计算页面传统 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


部署结果如图所示。


2.png

Serverless Devs 部署 Bottle 框架过程


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


3.png

Serverless Devs 部署结果预览


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


s init start-express


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


s deploy


4.png

通过 Serverless Devs 初始化 Express 项目


部署结果如图所示。


5.png


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


6.png

Express 项目完成效果展示


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


7.png

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 方法。


8.png

传统 WSGI Web Server 工作原理示例


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


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


作者介绍

刘宇,阿里云 Serverless 产品经理
田初东,蚂蚁集团算法工程师
卢萌凯,阿里云 Serverless 高级解决方案架构师
王仁达,阿里云 Serverless 工具链技术负责人


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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《小团队web技术搭建》(八)Docker+持续部署
《小团队web技术搭建》(八)Docker+持续部署
0 0
《小团队web技术搭建》(五)项目的简单部署方式
《小团队web技术搭建》(五)项目的简单部署方式
0 0
IDEA导入web项目,并部署到Tomcat服务器详细教程
IDEA导入web项目,并部署到Tomcat服务器详细教程
0 0
基于PaddleHub一键部署ernie_vilg文图生成等Web应用服务
基于PaddleHub一键部署ernie_vilg文图生成等Web应用服务
0 0
提高 web 性能!nginx 和 php-fpm 分别部署在不同服务器
提高 web 性能!nginx 和 php-fpm 分别部署在不同服务器
0 0
宝塔面板部署DV免费证书(web服务器nginx)
宝塔面板部署DV免费证书(web服务器nginx)
0 0
zabbix_4.0部署篇之使用nginx实现web前端
zabbix_4.0部署篇之使用nginx实现web前端
0 0
Web 部署
Web 部署
0 0
Mac不会用?玩转brew,部署web开发环境【jdk、git、msyql、maven、node】全家桶,前后端覆盖
Mac不会用?玩转brew,部署web开发环境【jdk、git、msyql、maven、node】全家桶,前后端覆盖
0 0
windows python web flask 模板开发快速入门
windows python web flask 模板开发快速入门
0 0
+关注
文章
问答
来源圈子
更多
阿里云 云原生应用平台 肩负阿里巴巴集团基础设施云化以及核心技术互联网化的重要职责,致力于打造稳定、标准、先进的云原生产品,成为云原生时代的引领者,推动行业全面想云原生的技术升级,成为阿里云新增长引擎。商业化产品包括容器、云原生中间件、函数计算等。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
边缘安全,让Web加速有保障
立即下载
使用CNFS搭建弹性Web服务
立即下载
WEB框架0day漏洞的发掘及分析经验分享
立即下载


http://www.vxiaotou.com