wordpress社团网站,商标图案参考,四川建设部官方网站,网站前面的小图标怎么做与其说 Serverless 架构是一个新的概念#xff0c;不如说它是一种全新的思路#xff0c;一种新的编程范式。
但是原生的 Serverless 开发框架却非常少。以Web框架为例#xff0c;目前主流的Web框架“均不支持Serverless模式部署”#xff0c;因此我们一方面要尝试接触Serv…与其说 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(hostlocalhost, port8080, debugTrue)
之后可以直接在本地进行调试。当想要把该项目部署到阿里云函数计算平台时只需要增加一个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(hostlocalhost, port8080, debugTrue)
若在阿里云函数计算平台创建函数将入口函数设置为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( host0.0.0.0,portint(8001)
)
在创建函数的时候设置入口函数为index.app就可以保证该Flask项目运行在函数计算平台上。
当然除了使用已有的语言化Runtime指具体语言的运行时例如Python3运行时、Node. js12运行时我们还可以考虑使用Custom Runtime和Custom Container来实现例如一个Web项目完成之后可以编写一个Bootstrap文件在Bootstrap文件中写一些启动命令。
例如要启动一个Express项目把Express项目准备完成之后可以直接创建Bootstrap文件并将启动命令配置到该文件中
#!/usr/bin/env bash
export PORT9000
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(host0.0.0.0, debugFalse, port9000)
然后编写资源和行为描述文件
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-beijingservice:name: web-frameworkdescription: Serverless Devs Web Framework Servicefunction:name: bottledescription: Serverless Devs Web Framework Bottle FunctioncodeUri: ./coderuntime: python3 handler: index.app timeout: 60triggers:- name: httpTriggertype: httpconfig:authType: anonymousmethods:- GETcustomDomains:- domainName: autoprotocol: HTTProuteConfigs:- 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等。
原文链接
本文为阿里云原创内容未经允许不得转载。