转载

使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

了解如何使用 Cloud Foundry 命令行工具,将具有 AngularJS 用户界面的一个简单的 Flask 应用程序部署到 IBM Bluemix®。在本教程中,我们选择了 Flask,而不是 Django、Pyramid 和 web2py 等其他框架,因为 Flask 非常轻巧,而且很容易理解。对于只编写一个 REST 端点而言,它是一个完美的工具。此外,我们还将介绍如何在不同功能之间多路复用一个 REST 端点。

为此,您需要使用 Flask 和 Python 来创建一个可扩展和容错的 REST 端点,然后使用 AngularJS 应用程序对其进行测试。为了帮助您尽快地、轻松地在 Bluemix 上启动并运行 Python,我们引入了 Flask Web 框架,我们将介绍如何在开源的 Cloud Foundry 命令行工具中使用它。Flask 可以打开一个 HTTP 侦听程序并服务于 HTTP 请求,所以您不必自己编写整个 Web 应用程序。正如您很快将会看到的那样,您可以利用 Flask 通过几个非常简单的步骤就创建一个 REST 服务。我们还将为它添加一个 AngularJS 前端(单页应用程序),让样板文件变得完整。所有的一切都将使用 Cloud Foundry 命令行工具来完成。

此外,我们还会演示如何可以在不同功能之间多路复用单个 REST 端点。您将看到通过 PIP 包管理系统自动安装应用程序对第三方库有哪些要求。

构建应用程序需要做的准备工作

  • 一个 Bluemix 帐户:如果还没有现成的 Bluemix 帐户,请在IBM Bluemix 上创建一个该帐户。
  • 下载并安装 GIT 命令行工具 。
  • 下载并安装 Cloud Foundry 命令行工具 。

运行应用程序

获取代码

第 1 步. 克隆和检查项目

我们已经在 Git 存储库中提供了完整的应用程序,因此,您需要做的只是将它克隆到本地机器。打开 GIT 命令行(在 Windows 中,在您的首选目录单击鼠标右键,并选择 “git bash here”),然后运行以下命令:

git clone https://hub.jazz.net/git/romeokienzler/developerWorksFlaskAngularJS

这将在当前目录中创建一个名为 “developerWorksFlaskAngularJS” 的文件夹。在该文件夹的内容中,您会看到以下文件:

使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点
  1. 在 templates 文件夹中,您会看到 index.html 文件 — 用户界面。在您选择的编辑器(如记事本)打开它。查看代码,并确定在何处执行 REST 调用和显示响应。(提示:搜索字符串 $http.get )。
  2. requirements.txt 文件会告诉 Cloud Foundry 的 Python 构建包使用 PIP Python Package Manager 安装哪些资源(在本例中,是安装 Flask)。
  3. Procfile 包含启动应用程序的命令。如果在本地运行应用程序,可以通过 python upper.py 调用 Python 脚本。当应用程序被部署到 Bluemix 时,会自动执行相同的命令。
  4. 接下来,查看 upper.py。一个独立的 Python 解析程序不足以服务一个 REST 端点或 HTML 内容,所以您不需要自己实现 HTTP 协议栈,而是使用 Web 框架(在本例中,是使用 Flask)。使用命令 app = Flask(__name__) 创建该框架的一个实例。 使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点
  5. Cloud Foundry 会告诉应用程序应该对哪个 TCP 端口打开侦听程序,通过将名称为 “VCAP_APP_PORT” 的环境变量传递给容器,向 HTTP 请求提供服务。在 Python 中,您可以使用以下命令,读取该端口并将它分配给一个变量:
    port = int(os.getenv("VCAP_APP_PORT"))
  6. 现在您可以使用这个应用程序引用来注释在脚本中的方法 display_template() ,使用 @app.route 注释,将它公开为一个 REST 端点。如果您提供 "lower" 或 "upper" 作为 GET 请求参数,它会这样做;否则,(通过在 “else” 语句中指定)同样的端点将被渲染并返回 index.html 文件 — 具体而言,是包含 AngularJS 应用程序的那个文件。这是如何在同一端点上的不同功能之间进行多路复用的例子。

第 2 步. 将应用程序部署到 Bluemix

现在,您可以使用 Cloud Foundry 命令行工具把应用程序推送到 Bluemix:打开命令行窗口,并将目录 ( cd ) 更改到 “developerWorksFlaskAngularJS” 文件夹。要将应用部署到 Bluemix,请运行以下命令:

cf push <your app name> -m 128m

应用程序的名称(在本例中为 “rest_angularrkie”)用于创建应用程序的 URL 的子域。因此,应用程序名称必须是唯一的。如果您想确保 URL 尚未被占用,可以在浏览器中打开 “<yourPlannedAppName> .mybluemix.net”。如果您看到下面的消息,那么 URL 仍然是可用的:"404 Not Found: Requested route ('<yourPlannedAppName>.mybluemix.net') does not exist."

“-m” 选项指定了允许 Python 脚本使用的内存量 — 在本例中是 128MB,这足以满足一个简单的 Python REST 应用程序。如果成功的话,命令行中的输出的末尾部分看起来应该与此类似:

使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

第 3 步. 测试应用程序

  1. 在 Web 浏览器中,转到您的应用程序的 URL;您可以在输出的底部找到它。(在本例中,这将是 “ rest-angularrkie.mybluemix.net ”。请注意,下划线 “_” 被转换为破折号 “ - ”。)
  2. 输入一些文字,然后单击 Submit
  3. 您应该看到自己输入的大写字母和小写字母。您的输入由 AngularJS 读取,并使用两个不同的参数发送到 REST 端点两次,使 REST 端点有不同的行为。

第 4 步(可选). 让应用程序可容错并且可动态扩展

在使用微服务和 REST 端点时,需要根据生成的负载,动态地将资源分配给您的应用程序。Cloud Foundry 支持实时添加和删除并行的应用程序容器。Bluemix 提供了一个名为 Auto-Scaling 的免费服务,当连接到应用程序时,它将监测您的应用程序的响应时间、吞吐量、CPU 使用率和主内存消耗。Auto-Scaling 还将根据扩展策略动态地添加或删除其他容器。在本例中,您会看到如何通过几个简单的步骤来完成这个任务。为了使您的应用程序可容错,必须至少运行您的应用程序的两个实例。(我们将在后面的教程中介绍如何实现跨数据中心的容错。)

  1. 登录到 Bluemix,使用仪表板找到您的 Python 应用程序,并选中它。然后,单击 ADD A SERVICE OR API使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点 使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

    使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

    搜索 Auto-Scaling 服务并单击它。 使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点
  2. 保持默认值并单击 CREATE使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点
  3. 单击 RESTAGE ,等待应用程序重新载入。 使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点
  4. 单击 Auto-Scaling 服务图标。 使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点
  5. 单击 CREATE AUTO-SCALING POLICY使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

    使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

  6. 将应用程序实例的最小数量更改为 "2"。 使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

    使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

  7. 单击 SAVE
  8. 在命令行窗口中,键入 cf apps 。您会看到,现在有两个实例在运行: 使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

    使用 Flask 和 Python 创建一个可扩展和容错的 REST 端点

恭喜您!您的应用程序现在具有容错能力,因为有两个实例在运行,并且使用 Cloud Foundry 路由器将负载分发给这两个实例;如果一个实例失败,另一个实例将会接管其任务。此外,如果主内存使用率超过 80%,就会创建额外的实例,负载将被均匀地分发给所有实例。当然,当您不再需要它们时,实例的数量将会减少。

结束语

本教程演示了如何使用 Cloud Foundry 命令行工具来实现和部署 Flask 应用程序,还介绍了实现此操作所需的文件,以及要使用哪些命令。因为该应用程序是在 Cloud Foundry 容器中运行的,自动缩放、监控和故障转移等服务都可以插入该应用程序。在最后一步中,您看到了这对于自动缩放服务是多么容易。

在以后的教程中,我们将介绍如何安装需要使用 C 编译器进行编译的库,但本教程应该让您可以开始编写富有吸引力的、最先进的 Web 应用程序和 REST 服务。

BLUEMIX SERVICE USED IN THIS TUTORIAL: Auto-Scaling for Bluemix 服务 让您可以自动增加或减少应用程序的计算能力。应用程序实例的数量是根据您定义的 Auto-Scaling 策略动态调整的。

原文  http://www.ibm.com/developerworks/cn/cloud/library/cl-scalable-fault-tolerant-rest-endpoint-flask-python-bluemix-trs/index.html?ca=drs-
正文到此结束
Loading...