在本系列中,我们将介绍一个虚构的国家在为有需求的居民提供医药用品方面面临的挑战。我们将介绍云解决方案 (IBM Bluemix®) 和预测分析,以及移动和安全技术如何帮助解决这些挑战,打造一个更智慧、更健康的地球。
在这一部分中,我们将讨论调度应用程序 (scheduler application),它是本系列的第 1 部分 中讨论的解决方案的一个组件。该调度程序将会使用 Bluemix 上的预测分析服务来调用第 2 部分 中介绍的需求预测组件。然后,应用程序会连接到后端订单管理系统,根据预测的需求来下订单。该应用程序本身会按照计划的频率,使用 Bluemix 上的 Workload Scheduler 服务来检查新的需求预测。为了在 Bluemix 上保持订单数据的本地版本,该应用程序在 Bluemix 上使用 Cloudant NoSQL Database 服务在本地操作数据库上存储了一个订单数据副本。
调度应用程序概述
让我们来看看调度应用程序的组件:
调度应用程序一周运行一次,生成将在这周内发货的订单并下订单:
- Bluemix 中的 Workload Scheduler 服务 首先调用 Predictive Analytics 服务 来预测:在这个星期内,某个区域对某种产品的需求是多少。在更一般的情况下,会返回一个所有预测产品的列表。(参阅第 2 部分,了解有关该服务的更多详细信息。)Predictive Analytics 服务将会返回请求的预测数量。
- 客户的订单管理系统 (OMS) 被公开为一个公共 API。这是通过 Bluemix 中的 API Management 服务 完成的。调度程序会调用该服务来创建订单(利用客户的内部部署 OMS 上预测的数量)。
- API Management 服务通过 Bluemix 中的 Secure Gateway 服务 连接到客户的 OMS,这与客户的内部部署 OMS 建立了所需的 VPN 连接。(为了简便起见,我们将跳过安全网关配置的详细信息。)因此,在调度过程中,使用了 Predictive Analytics 服务的输出,通过 API 网关调用客户的 OMS,以便使用预测的数据创建实际的订单。
- 在最后一步中,Bluemix 中的 Workload Scheduler 服务在中央 Cloudant 数据库中写入了预测的订单。移动信道 (mobile channel) 将会读取该数据库,查看针对医疗机构工作人员的订单。此过程将在第 4 部分中进行解释。
构建调度应用程序
在本系列中
第 1 部分 介绍了挑战和解决方案架构。
第 2 部分 介绍了如何使用预测分析功能来预测需求。
这一部分将介绍与后端内部部署库存和订单管理系统的集成。
第 4 部分将介绍如何使用移动计算实现脱机操作。
第 5 部分将讨论如何使用商业智能功能实现库存洞察。
在这一节中,我们将讨论一些步骤,这些步骤用于创建:
- API Management 服务,该服务将调用客户的内部部署 OMS
- Cloudant 数据库,订单被写入该数据库,稍后移动应用程序会使用该数据库
- 调度程序,它每周都会调用所有三个端点:Predictive Analytics、API Gateway 和 Cloudant。
API Management 服务
API Management 服务执行以下操作:
- 提供装配功能,使 API 能够与各种端点相集成,这些端点包括数据库或基于 HTTP 的端点
- 提供了收集并存储有关 API 和 API 用户的信息的分析功能
- 流程化并管理安全协议,并存储相关用户和设备认证数据。
该服务可确保您能够控制您公开给外部用户的 API。这包括版本控制和 API 生命周期管理、速率限制、安全性和访问控制,以及过度使用和消费的分析。
API 管理包括以下主要工件:
- API: 这是您创建的 API,您将在这里定义它的性质(REST、Web 服务,等等)、API 中的操作,以及这些操作的实现。
- 计划: 您向一个计划添加一个 API。然后,您可以控制该计划的发布或退役。一个计划可以拥有许多具有不同操作的 API。
- 环境: 您可以使用不同的配置定义多种环境,比如沙盒、临时环境和生产环境。
创建 API
要创建一个新的 API Management 服务,请执行以下操作:
- 登录到 Bluemix (或注册获得 免费的 Bluemix 试用版 )。
- 在 Bluemix 中,添加一个 API Management 服务。让此服务处于未绑定状态。
- 打开该服务,并单击底部的 GO TO API MANAGER 按钮。
- 在 API 选项卡下,单击 + 符号。然后选择 Compose 。您可以从 Swagger 导入 API 定义。在我们的用例中,我们将逐步定义 API。
- 输入如下所示的信息。Base Path 应该是
/oms/v1.0
。 - 单击 Add 。
- 保留默认配置。注意以下步骤:
- 在 Settings 选项卡下,可以注意到该 API 是强制性的,这意味着指定的主机名将覆盖 API 管理主机名。如果没有指定主机名,像在这个示例中一样,将会使用网关的主机名。
- 在 "API Security" 和 "Security Scheme" 中,请注意,使用的方案是 “Client ID”。该 ID 只是为了可通过订阅来使用此开发者门户中的 API 的每个应用程序生成的 ID;它的存在只是为了确定哪个应用程序将调用 API。这将在下面各节种进行详细解释。
- 要将一个操作添加到 API,请单击 + Operation 按钮。
请注意以下操作: - 方法是 PUT ,因为该方法是一个 "Create" 命令调用。
- 路径是
/orders/{week}/{region}/{product}
。 - 选择 Identification ,指示该 API 要求使用 Client ID 来识别客户端。
- 添加此操作的一个实现:在 Implementation 选项卡下,输入客户端所公开的服务的 URL。在这里,此 URL 由另一个 Bluemix 应用程序模拟。
- 单击页面右上角的 Save 。
备注: 在测试 API 之前,需要将它添加到一个计划中,并在以下部分解释它。
创建一个计划
- 转到主页左边的 Plan 选项卡。
- 单击 + Plan 按钮。
- 为该计划输入一个标题,比如 "OMS Plan v1"。
- 单击 + Operation 向该计划添加一些操作。从您创建的 API 中选择一些操作。
- 单击 Save 。
测试 API
- 再次从 API 选项卡转到您的 API。
- 单击您刚刚创建的 API。
- 选择您添加到 API 中的操作。
- 单击右边的 Edit 按钮。
- 单击 Test 选项卡来查看您的 API 调用。
- API 管理使用参数名称来映射 URL 中的所有参数。例如,如果您的 API 是
/oms/v1.0/orders/17/region_x/product_x
,那么在该实现中,它将被映射到
https://camss-sor-oms.mybluemix.net/orders/2015/5/region_x/product_x
- 为您想在调用 API 时使用的参数输入值。
- 单击 Invoke 。
创建一个环境
为了能够分段和发布一个 API,您需要将它添加到一个环境中。
- 转到主页左边的 Environments 选项卡。
- 单击 + Environment 。
- 这会添加一个带有默认名称的环境。编辑该环境的名称,将它更改为方便一些的名称,比如 "Sandbox"。
- 此时,您还可以更改 URL 来访问 API。例如,保留它们的默认值,因为您将使用默认 URL。
- 现在,转回到 Plan 并单击 Stage 按钮,然后选择您刚刚创建的环境。
公布计划
- 转到左边的 Management 选项卡。
- 在您的计划中,单击最右边的 Management 按钮,然后单击 Publish 。
- 选择 Visible to Public 和 Subscribable by Authenticated users ,这意味着开发者门户上的所有经过身份验证的用户都能够订阅、使用和消费此 API。
现在,您的 API 已发布。您可以在
https:// <gateway_base_url>/<api_base_path>/<operation_path> 访问它们。
在我们的示例中,完整路径是
https://api.apim.ibmcloud.com/ahmedaegibmcom-dev/sb/oms/v1.0/orders/week_x/region_x/product_x.
作为一位开发者注册使用该 API
开发者门户被开发者用来浏览 API Catalog 中已公开的 API,或者用来订阅这些 API 来使用它们。此操作基于 API 发布者实行的访问规则。
- 在主页左边的 Management 选项卡下,单击 Portal 。这将显示开发者的门户信息。
- 单击 Basic Developer Portal 下的 Portal URL。
现在,作为一位开发者,您需要加入 Portal,以便能够使用 API。
- 单击右上方的 Join 按钮。
- 提供您的信息并单击 Join 。您需要一个 IBM ID 来完成注册。
- 在完成注册后,使用您的 IBM ID 进行登录。
创建一个应用程序
- 作为一位 API 使用者,您需要创建一个应用程序,获得一个已生成的 Client ID,并请求在其计划中使用 API。这将确保:当您使用请求参数中的 Client ID 执行一个调用时,API 管理网关会授予您访问权。
- 在门户的主页中,单击左边的 Application 选项卡。
- 单击 + Application 按钮。
- 为您的应用程序提供一个名称和描述。
- 您会看到一个已生成的 Client ID。单击 Show 并复制 Client ID,以便在您使用工作负载调用程序来调用 API 时使用它。
- 现在,将新的客户端(应用程序)添加到 AP 计划:单击门户主页左边的 API 的选项卡。这将在门户上显示 API 的目录。
- 您会发现,OMS API 被显示为该目录的一部分,经过身份验证的用户和开发人员可以访问该目录。
- 从右边上方的按钮中,选择您想要订阅的计划。
- 单击 Use this plan ;这将显示您作为开发者创建的应用程序的列表。选择您刚刚创建的一个应用程序。
现在,您拥有作为一个客户端/应用程序来使用所提供的 Client ID 访问 API 的完整访问权。
创建 Cloudant 数据库
- 在 Bluemix 中,创建一个 Cloudant NoSQL DB 服务:不要将它绑定到任何应用程序。您将在第 4 部分中,在使用 MobileFirst 容器时绑定它。
- 从 Bluemix 控制台打开服务。
- 单击左边的 Service Credentials 。记下此信息,特别是 URL。稍后将会使用它从工作负载调度程序连接到 Cloudant。
- 现在,单击右上方的 Launch 按钮来启动 Cloudant 控制台。
- 在 Cloudant 控制台中,通过单击 Add New Database 添加一个新的数据库。
- 输入名称
orders_db
并单击 Create 。
创建 Workload Scheduler 服务
Workload Scheduler 是在这些组件之间进行协调的服务。
- 在 Bluemix 控制台中,创建一个 Workload Scheduler 服务。让它处于未绑定状态。
- 打开该服务,单击右上角的 Launch Application Lab 来打开控制台,以便用工作负载调查程序管理流程。
创建流程
- 单击 My processes 。这是默认流程库。
- 单击 + New 创建一个新的流程。
- 这将创建一个默认流程。选中它并在页面底部的窗格中编辑它的属性。
- 在 General 下,输入一个流程名称,例如
Controller Process
。 - 在 Triggers 下创建一个新的触发器。该触发器定义了何时将运行该流程。在此用例中,我们选择一周运行一次该流程(在星期六),以便创建这一周的订单。
在接下来的三个小节中,您将向流程添加三个步骤:
- 一个步骤用于调用 Predictive Analytics 服务。预测的订单将被写入到一个文件中。
- 使用此文件时,会调用 API Management 服务在客户的内部部署订单管理系统上创建订单。
- 使用相同的预测订单文件时,订单将被写入 Cloudant。
创建变量
在下面的步骤中,将创建三个变量,它们表示该测试对第几周的数据进行预测、预测订单的范围和预测其数量的特定产品。这三个变量将被读入到:
- 流程的步骤 1,作为 Predictive Analytics 服务的输入。
- 步骤 2,作为 OMS 系统的输入,以便使用步骤 1 中检索的数量以及指定的周数、范围和产品来创建一个订单。
首先,创建三个变量,它们的名称分别为 week
、 region
和 product
:
- 转到 Variables 选项卡来寻找您的流程。
- 单击 + New 。
- 输入变量的名称。选择 Text 作为它的类型。输入您将在测试中使用的默认值。
调用 Predictive Analytics 服务
- 通过单击 + Step 添加一个新步骤。
- 选择步骤类型 RESTful ,并选择默认引擎 NG_CLOUD 。
- 在 Action 下,添加以下 Service URI:
https://palbyp.pmservice.ibmcloud.com/pm/v1/score/camss01
- 选择
POST
方法。 - 添加访问密钥作为一个查询参数。
- 在 Output file name 中,输入名称
predicted_orders.json
。记住这个名称。因为在下面的 "Call the API Management service" 和 "Call the Cloudant service" 中,将使用它作为输入。 - 在 Body 选项卡中,添加 JSON 主体:
{"tablename":"file.csv", "header":["delta_weeks","product","region"], "data":[[17,"product_x","region_x"]]}
这将检索在 region_x
中的 product_x
的第 17 周的预测量。 - 单击 OK 。
调用 API Management 服务
添加一个新的步骤,如上所述:
- 对于 Service URL,输入该操作的完整 URL,以便创建一个订单。例如,对于 2015 年的第二周:
https://api.apim.ibmcloud.com/ahmedaegibmcom-dev/sb/oms/v1.0/orders/^week^/^region^/^product^
这将读取存储在这些变量中的默认值,并在 URL 中替换它们。 - 使用您从第 5 步的开发者门户中获得的值,在 "下添加
client_id
作为查询参数。 - 在 Body 下,使用输入文件的名称作为预测订单文件
predicted_orders.json
的名称。 - 单击 OK 。
调用 Cloudant 服务
使用前面的步骤,为这个新步骤输入以下内容:
- 对于 Service URL,输入:
https://e19ea3a8-a128-45c7-aca7-b618af2b431f-bluemix:08f92225b5e54f9e2fb4e3f5eba2045b164f0cddbe340213233c8750c3743bce@e19ea3a8-a128-45c7-aca7-b618af2b431f-bluemix.cloudant.com/orders_d
b
这是您保存在 Cloudant Service Credentials 中的 URL,级联的 /orders_db
是您在 Cloudant 中创建的数据库的名称。 - 选择使用
POST
方法来创建新的 JSON 文档。 - 在 Body 选项卡下添加
predicted_orders.json
作为输入文件的名称。
运行流程
确保在 Steps 选项卡下,前三个步骤的顺序是正确的。
- 选择您创建的流程。单击顶部的 Enable 。
- 现在,该流程已启用,它将根据您指定的触发器来运行(一周运行一次)。要立即测试并运行它,请单击 Run now 。
- 转到流程的 History 选项卡来查看运行结果。
- 双击运行记录来查看每一步的状态。
- 选择每一步并单击 View Log 来查看该步骤的日志。
- 转到 Cloudant 服务。在 Cloudant 控制台中,可以看到预测的订单已被添加到 Cloudant 数据库。
结束语
IBM Bluemix 提供了一些服务来安全地将您的 Bluemix 应用程序连接到后端系统。Bluemix API Management 服务允许您将内部部署系统的功能公布为 API,以便可以控制要访问的内容。Bluemix Secure Gateway 服务可以保证安全地连接回您的后端系统。此外,Bluemix 还提供了一个 Workload Scheduler 服务,允许您安排作业,让它们按照一个可配置的频率运行,从而实现自动执行。
IBM Bluemix 并不只是提供了 IBM 服务;它还提供了像 Cloudant NoSQL DB 这样的开源服务,该服务可通过其他 Bluemix 服务进行访问。Bluemix 支持可组合业务原则,在组合业务中,您可以基于新服务或现有服务的组合来构建新的应用程序。
本系列的第 4 部分将介绍对脱机操作的移动访问。您将了解移动信道如何读取 Cloudant 数据库来查看订单。
BLUEMIX SERVICES USED IN THIS TUTORIAL:
- Workload Scheduler 服务 为一次性和经常性任务都提供了灵活的作业调度服务。
- Predictive Analytics 服务 构建于 IBM 的 SPSS 分析平台之上,可帮助您开发制定更明智的决策的应用程序,解决棘手的问题,并提高用户收益。
- API Management 服务 使开发人员和组织能够管理和实施围绕其业务服务的消费的政策。
- Secure Gateway 服务 提供了从 Bluemix 到内部部署云或其他云中运行的其他应用程序和数据源的安全连接。
- Cloudant NoSQL 数据库 提供了访问总是开启的完全托管 NoSQL JSON 数据层的访问权。
http://www.ibm.com/developerworks/cn/cloud/library/cl-bluemix-camss-trs-3/index.html?ca=drs-