在我们开始开发应用程序之前,必须确定将使用哪种类型的环境来托管应用程序。像许多企业一样,developerWorks 多年来一直使用了一个内部部署的托管解决方案来支持我们的网站。这种类型的解决方案通常涉及软件安装,软件更换调整,当然还有维护。然而,考虑到将我们的产品推向市场的紧迫性,我们决定研究其他方法,这些方法不仅能将我们的产品快速推向市场,还能维护产品,并向我们的 Premium 用户推送新的功能。这可以进一步确保我们能够提供精简的解决方案,供我们的内容编辑在维护 dW Premium 时使用。
在回顾一些内部提供的选项(以及 IBM Cloud 产品)之后,我们打算介绍一个基于云的方法。我们决定使用 IBM Bluemix 来托管针对后端管道的应用程序栈,以支持事务交易和购买流程,并使用 IBM SoftLayer 托管 WordPress 实例,供我们的用户用于应用程序 UI。
如果您还不了解 SoftLayer,我们鼓励您 了解一下它 。YouTube 上还有一套关于 SoftLayer 101 的非常不错的视频,演示了客户门户、设置,等等。顺便说一下,如果您注册参加了dW Premium 订阅,可以获得 SoftLayer 每月贷款。
SoftLayer 是 IBM 的一款基础架构即服务产品,为我们提供了让虚拟机启动并正常运行所需的一切。SoftLayer 使用户能够轻松地访问 OS ,配置和维护软件与服务,并快速分配硬件资源,所有这些都是通过一个基于 Web 的仪表板完成的。此外,由于我们管理该设备,所以我们执行的所有硬件和软件变更都属于我们的变更管理范畴;不需要与 SoftLayer 进行交互,因为我们只是使用该服务。
(随质量保障主管 Govind Baliga 一起了解 dW Premium。)
下面是 dW Premium 的注册流程:
以下是从 WordPress UI 到后端 Bluemix 应用程序的用户流程:
一旦选定IBM Bluemix 作为应用程序环境,就必须选择我们将要使用已提供的哪种运行时和哪种语言。在 IBM,很多人都拥有丰富的 Java/WebSphere 开发经验,我们绝对重视 WebSphere 的稳健性,以及有利于开发具有丰富特性的应用程序的许多 Java 框架和库。然而,我们发现,Node.js 辅以 Express 框架为我们提供了一个简单的 “模型-视图-控制器 (MVC)” 模式实现,还提供了使开发变得更容易的其他机制。其中一个机制就是 Node Package Manager (npm),它使我们能够轻松地只用几个按键就能包括所需的库。我们有些人还拥有客户端 JavaScript 开发经验,而且我们能够相对轻松地在服务器端利用这些技能;我们只需要记住,Node.js 使用了非阻塞 I/O 模型。此外,Node.js 支持 JavaScript Object Notation (JSON)。由于 JSON 是从 JavaScript 中衍生出来的,作为客户端和服务器之间的传输语言,它可以完美地融入我们的持久层和消息传输层,我们将在下面详细介绍这一点。
对于我们的表示层,我们选择使用 WordPress 作为前端堆栈,主要是因为其短代码特性使得页面更容易维护。利用短代码,编辑们可以使用几个自定义短代码来完善和预览 HTML 内容,从而将精力放在内容质量上。与此同时,开发人员可以集中精力创建 Web 页面。这种职责分离可以帮助我们轻松地更新频繁变化的 UI。
纵观由 IBM Bluemix 提供 的一系列数据库和数据存储产品,我们很高兴地看到,有一个数据持久性解决方案适用于我们可能会遇到的任何用例。由于这是 IBM,人们可能会认为,我们会自动转向经过考验的、可靠的 DB2,但这是一个让我们用其他方法来存储和查询数据的机会。我们一直在寻找一种解决方案,该解决方案使我们可以轻松地输入和提取数据,并允许我们将来根据业务需求来调整数据存储模式。我们感到很惊讶!Elasticsearch、MongoDB、Object Storage、Redis 和时间序列数据库,这些都是一些可以通过 Bluemix 提供的 NoSQL 解决方案,但经过对特性的进一步研究之后,我们决定选择 Cloudant DB 。
Cloudant 的优势在于,它完全是通过一个 Web 界面进行管理的,因此,不仅非常容易管理细节和模式,还很容易管理数据和查询。Cloudant 基于流行的开源 CouchDB,我们已经找到一些有用的 Node.js 包(例如,NodeJS-Cloudant 和 Nano),它们由全球开发人员社区创建和慷慨贡献。
此外,我们的后端应用程序所收到的客户和订阅数据是用 JSON 格式表示的。由于 Cloudant 将其数据存储为 JSON,我们知道,我们无需在关系数据库表与被发送和接收的数据之间进行转换。由于无需使用对象-关系映射,应用程序的复杂性降低了,因此,这是一个了不起的小成功。更重要的是,Cloudant 中的视图和索引支持输出也采用了 JSON 格式,我们只需要通过 Node.js 后端应用程序进行路由,在将数据传送到 WordPress 前端之前,只需进行极少的筛选。当然,我们建议考虑使用 Cloudant,而且 Bluemix 有一个不错的小型 样板解决方案 ,供开发人员做入门练习。
无论您是一名开发人员,还是始终在线的全球性组织,开发人员操作管理对于任何成功的项目都是必需的,而使用 Bluemix 的一个好处是,您会自动获得 IBM Bluemix DevOps Services,它为您提供了一些优秀的工具,您可以在整个软件开发生命周期中使用它们。一旦完成配置,这些工具就可以让您的团队专注于自己的任务,真正地简化开发过程——您只需要设置好它,并编写代码。在我们的 SoftLayer 实例中,我们利用了 Eclipse 和一个插件来协助运营和部署,我们会详细介绍这一点。
综观 Bluemix DevOps,我们的项目获得了私有 Git 托管,因此很容易维护版本控制和代码交付。您还可以进一步利用该存储库,我们利用 Build and Deploy 功能实现了对过渡环境和生产环境的持续交付,并自动化了每个阶段的测试,以及之后的完整应用程序部署,让自己变得更轻松。Bluemix DevOps 的另一个出色的特性是 Track and Plan 特性,它使我们能够生成工作项,分配任务,并跟踪和进一步计划项目活动。需要注意的是,Bluemix DevOps 还接纳外部 Git 存储库服务,如 GitHub。顺便说一下, 有了 dW Premium,订阅用户有权使用 5 个私有存储库 30天!
在 SoftLayer 端,即我们托管 WordPress 的地方,我们实现了一个不同的流程。在本例中,我们使用了开源 Eclipse IDE 与 Rational Team Concert (RTC) 插件 ,它与一个内部部署的 IBM RTC Server 通信,以便管理软件开发生命周期。关于该环境中的连续交付,我们使用 Jazz Build Engine 将我们的代码部署到过渡环境和生产环境。有关的详细信息,请参阅我们有关 如何设置 Jazz Build Engine 的 developerWorks 教程。
在较高的层面上,dW Premium 订阅的登记和工作流程可以概括成三个主要组件:购买、消息传递,当然还有 dW Premium。它们彼此互动,构成购买流程和仪表板显示过程。
购买组件用于揭开整个注册流程的序幕。当用户采取一个行动时,比如单击链接,或直接导航到注册页面,这个组件就会负责收集用户帐户的详细信息、支付信息,并殷勤地为我们完成结帐过程。这意味着,它会处理 支付卡行业数据安全标准 (PCI DSS) 的复杂性,所以我们可以专注于我们的产品。在这一步中,与我们交互的外部组件的名称是IBM Marketplace。
因为在分布式部署内部的流程管道内可能涉及许多方面,我们需要一种与所有这些部件进行通信的方法。此方法应该提供可靠的、异步的、松散耦合的通信,在企业领域中,该标准一直是 “发布者-订阅用户” 消息传递模型,该模型最有可能被视为一个 JMS 实现。
在我们的应用程序中,实现了 “发布 - 订阅” 方法,在该方法中,我们的 dW Premium 应用程序是订阅者,负责监听发布的消息和数据,以便采取相应的行动。前面提到的 IBM Marketplace 组件使用了可以满足分布式通信需求的一些消息传递组件,我们的应用程序通过一个我们公开的 Web API 来使用已发布的消息,消息传递应用程序调用此 API 来调度操作和数据传输。虽然这与我们心目中的 “发布 - 订阅” 消息的标准方法稍有偏差,但它仍然实现了这个概念,而且我们的行业越来越将它视为端点之间的 HTTP 通信(想想物联网),其形式可能是 JSON 或 XML 的。
一旦该注册流程引导用户完成注册和支付,就会发布一个消息,而我们的 dW Premium 应用程序会订阅该消息。在下一节中,我们将描述 dW Premium 应用程序和我们的用户界面,两者相配合向 Premium 用户提供其获得授权的内容。
dW Premium 组件充当了存储库,用于提供 developerWorks Premium 用户界面与订购的产品。在创作这篇文章的时候,这些产品包括诸如 IBM Bluemix 和 SoftLayer 积分、Safari Books Online 中侧重于开发人员的精选主题的访问权限、一个 GitHub Micro 个人计划、一个免费的认证测试,以及针对 IBM 和我们的合作伙伴组织的开发人员活动的高达 50% 的入场门票折扣。您可以在 developerWorks Premium 概述页面 找到关于最新的完全访问权限产品的更多信息。
为了跟踪用户的产品,以及用户可能已经使用的产品(比如,活动折扣和认证测试),我们需要一个具体的、以用户为中心的数据模型。因此,我们利用在处理来自 Premium 用户的仪表盘的请求时所需的信息,在 UI 层创建了一个用户模式对象。我们已公开了一个端点供 UI 调用,当显示用户的仪表板时,会通过调用这个端点来查询 DW Premium 应用程序,获取有关用户授权产品的详细信息。
此外,还可以根据需要将各种促销码和优惠券分配给用户。一旦用户请求对他们有权获得的产品使用一个代码,就向 dW Premium 发出一个 API 调用,从该产品的可用促销码集内指定一个有效的优惠券号码。dW Premium 随后会将已分配的这张优惠券记录在用户的文档中,并通过一个 JSON 响应将它返回给仪表板。
大部分的优惠和活动都会有异构模式,但 Cloudant 提供的灵活性很有帮助,使我们设计的产品模式可用于存储所有的优惠和活动。它使我们能够随着 dW Premium 的发展,轻松地容纳可能需要添加到客户、用户或产品模式的更多属性;对于关系型数据库,这可能难以执行。
我们已经分享了 Premium 应用程序的实现和流程,还解释了我们如何使用 IBM Cloud 平台,现在,是时候简要说明我们在这个过程中使用的工具了。虽然工具的清单不长,但它说明了在环境和工具中所封装的功能,让您可以专注于自己的应用程序,而不是将精力浪费在环境的繁缛细节上。
本地开发环境:
测试:
开发运营:
在下面的参考资料部分中,我们提供了几个具体教程的链接,以帮助您熟悉 Node.js 在 Bluemix 上的能力。
dW Premium 工程团队很喜欢 IBM 提供的大量云技术,我们很荣幸可以与您分享我们的经验。为此,我们在 developerWorks 上推广了一些我们使用的东西。dW Premium 订阅 提供了一些技能建设工具、在我们的 IaaS 和 PaaS 产品上使用的积分,以及活动折扣,所有这些都提供给了我们的 Premium 订阅用户,这符合我们的 “学习、开发和联系” 的 developerWorks 核心主题。dW Premium 订阅的捆绑好处是提供了很大的折扣,而且好处还在不断增加,以便为您提供终极的体验,并让您有能力走得更远。我们的 developerWorks 观众,多年来都在享受我们的网站上大量免费的优秀内容,而该订阅是一个工具,可以帮助您在旅程的下一站迈进云时代。我们很高兴能够提供一个平台,帮助您学习更多知识,开发更多内容,联系更多同行。