了解如何使用 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 包管理系统自动安装应用程序对第三方库有哪些要求。
运行应用程序
获取代码
我们已经在 Git 存储库中提供了完整的应用程序,因此,您需要做的只是将它克隆到本地机器。打开 GIT 命令行(在 Windows 中,在您的首选目录单击鼠标右键,并选择 “git bash here”),然后运行以下命令:
git clone https://hub.jazz.net/git/romeokienzler/developerWorksFlaskAngularJS
这将在当前目录中创建一个名为 “developerWorksFlaskAngularJS” 的文件夹。在该文件夹的内容中,您会看到以下文件:
$http.get
)。 python upper.py
调用 Python 脚本。当应用程序被部署到 Bluemix 时,会自动执行相同的命令。 app = Flask(__name__)
创建该框架的一个实例。 port = int(os.getenv("VCAP_APP_PORT"))
display_template()
,使用 @app.route
注释,将它公开为一个 REST 端点。如果您提供 "lower" 或 "upper" 作为 GET 请求参数,它会这样做;否则,(通过在 “else” 语句中指定)同样的端点将被渲染并返回 index.html 文件 — 具体而言,是包含 AngularJS 应用程序的那个文件。这是如何在同一端点上的不同功能之间进行多路复用的例子。 现在,您可以使用 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 应用程序。如果成功的话,命令行中的输出的末尾部分看起来应该与此类似:
在使用微服务和 REST 端点时,需要根据生成的负载,动态地将资源分配给您的应用程序。Cloud Foundry 支持实时添加和删除并行的应用程序容器。Bluemix 提供了一个名为 Auto-Scaling 的免费服务,当连接到应用程序时,它将监测您的应用程序的响应时间、吞吐量、CPU 使用率和主内存消耗。Auto-Scaling 还将根据扩展策略动态地添加或删除其他容器。在本例中,您会看到如何通过几个简单的步骤来完成这个任务。为了使您的应用程序可容错,必须至少运行您的应用程序的两个实例。(我们将在后面的教程中介绍如何实现跨数据中心的容错。)
搜索 Auto-Scaling 服务并单击它。
cf apps
。您会看到,现在有两个实例在运行:
恭喜您!您的应用程序现在具有容错能力,因为有两个实例在运行,并且使用 Cloud Foundry 路由器将负载分发给这两个实例;如果一个实例失败,另一个实例将会接管其任务。此外,如果主内存使用率超过 80%,就会创建额外的实例,负载将被均匀地分发给所有实例。当然,当您不再需要它们时,实例的数量将会减少。
本教程演示了如何使用 Cloud Foundry 命令行工具来实现和部署 Flask 应用程序,还介绍了实现此操作所需的文件,以及要使用哪些命令。因为该应用程序是在 Cloud Foundry 容器中运行的,自动缩放、监控和故障转移等服务都可以插入该应用程序。在最后一步中,您看到了这对于自动缩放服务是多么容易。
在以后的教程中,我们将介绍如何安装需要使用 C 编译器进行编译的库,但本教程应该让您可以开始编写富有吸引力的、最先进的 Web 应用程序和 REST 服务。
BLUEMIX SERVICE USED IN THIS TUTORIAL: Auto-Scaling for Bluemix 服务 让您可以自动增加或减少应用程序的计算能力。应用程序实例的数量是根据您定义的 Auto-Scaling 策略动态调整的。