转载

让 developerWorks Premium 充满活力

思考过程

在我们开始开发应用程序之前,必须确定将使用哪种类型的环境来托管应用程序。像许多企业一样,developerWorks 多年来一直使用了一个内部部署的托管解决方案来支持我们的网站。这种类型的解决方案通常涉及软件安装,软件更换调整,当然还有维护。然而,考虑到将我们的产品推向市场的紧迫性,我们决定研究其他方法,这些方法不仅能将我们的产品快速推向市场,还能维护产品,并向我们的 Premium 用户推送新的功能。这可以进一步确保我们能够提供精简的解决方案,供我们的内容编辑在维护 dW Premium 时使用。

在回顾一些内部提供的选项(以及 IBM Cloud 产品)之后,我们打算介绍一个基于云的方法。我们决定使用 IBM Bluemix 来托管针对后端管道的应用程序栈,以支持事务交易和购买流程,并使用 IBM SoftLayer 托管 WordPress 实例,供我们的用户用于应用程序 UI。

SoftLayer:值得了解

如果您还不了解 SoftLayer,我们鼓励您 了解一下它 。YouTube 上还有一套关于 SoftLayer 101 的非常不错的视频,演示了客户门户、设置,等等。顺便说一下,如果您注册参加了dW Premium 订阅,可以获得 SoftLayer 每月贷款。

SoftLayer 是 IBM 的一款基础架构即服务产品,为我们提供了让虚拟机启动并正常运行所需的一切。SoftLayer 使用户能够轻松地访问 OS ,配置和维护软件与服务,并快速分配硬件资源,所有这些都是通过一个基于 Web 的仪表板完成的。此外,由于我们管理该设备,所以我们执行的所有硬件和软件变更都属于我们的变更管理范畴;不需要与 SoftLayer 进行交互,因为我们只是使用该服务。

(随质量保障主管 Govind Baliga 一起了解 dW Premium。)

图 1. dW Premium 注册流程

让 developerWorks Premium 充满活力

下面是 dW Premium 的注册流程:

  1. developerWorks 用户导航到 dW Premium 促销页面,即托管在 SoftLayer 上的 WordPress。
  2. 在该页面上,用户通过单击优惠信息来激活注册过程。
  3. 然后,我们的 WordPress 实例将用户转到 IBM Marketplace,在那里收集该用户的详细信息和支付信息。
  4. 然后,Marketplace 通过标准的信用卡处理方法来处理付款。
  5. 如果支付处理过程一切正常,Marketplace 会发一封电子邮件给用户,用户将通过该邮件验证注册请求。
  6. Marketplace 将对 dW Premium 应用程序调用 API 侦听端点,并只传递必要的用户信息。
  7. dW Premium 应用程序将对信息进行相应处理,生成新的 dW Premium 用户的仪表板元素,并存储与新用户相关的数据。

图 2. 从 WordPress UI 到后端 Bluemix 应用程序的用户流程

让 developerWorks Premium 充满活力

图 2. 从 WordPress UI 到后端 Bluemix 应用程序的用户流程

让 developerWorks Premium 充满活力

以下是从 WordPress UI 到后端 Bluemix 应用程序的用户流程:

  1. 一个 dW Premium 用户了访问 developerWorks 网站,然后开始了注册流程。
  2. 如果尚未通过身份验证,用户会被定向到登录页面。
  3. 在进行身份验证后,用户被定向到 WordPress 实例,这将显示该用户的自定义内容和仪表板。
  4. WordPress 调用一个由 dW Premium 应用程序公开的端点,获得与该 dW Premium 用户的仪表板相关的详细信息。
  5. 然后,WordPress 实例为该用户组装自定义的仪表板。
  6. 根据请求,用户的自定义仪表板被返回给用户。

选择应用程序堆栈

一旦选定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 订阅的登记和工作流程可以概括成三个主要组件:购买、消息传递,当然还有 dW Premium。它们彼此互动,构成购买流程和仪表板显示过程。

购买

购买组件用于揭开整个注册流程的序幕。当用户采取一个行动时,比如单击链接,或直接导航到注册页面,这个组件就会负责收集用户帐户的详细信息、支付信息,并殷勤地为我们完成结帐过程。这意味着,它会处理 支付卡行业数据安全标准 (PCI DSS) 的复杂性,所以我们可以专注于我们的产品。在这一步中,与我们交互的外部组件的名称是IBM Marketplace。

消息传递

因为在分布式部署内部的流程管道内可能涉及许多方面,我们需要一种与所有这些部件进行通信的方法。此方法应该提供可靠的、异步的、松散耦合的通信,在企业领域中,该标准一直是 “发布者-订阅用户” 消息传递模型,该模型最有可能被视为一个 JMS 实现。

在我们的应用程序中,实现了 “发布 - 订阅” 方法,在该方法中,我们的 dW Premium 应用程序是订阅者,负责监听发布的消息和数据,以便采取相应的行动。前面提到的 IBM Marketplace 组件使用了可以满足分布式通信需求的一些消息传递组件,我们的应用程序通过一个我们公开的 Web API 来使用已发布的消息,消息传递应用程序调用此 API 来调度操作和数据传输。虽然这与我们心目中的 “发布 - 订阅” 消息的标准方法稍有偏差,但它仍然实现了这个概念,而且我们的行业越来越将它视为端点之间的 HTTP 通信(想想物联网),其形式可能是 JSON 或 XML 的。

一旦该注册流程引导用户完成注册和支付,就会发布一个消息,而我们的 dW Premium 应用程序会订阅该消息。在下一节中,我们将描述 dW Premium 应用程序和我们的用户界面,两者相配合向 Premium 用户提供其获得授权的内容。

dW 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 平台,现在,是时候简要说明我们在这个过程中使用的工具了。虽然工具的清单不长,但它说明了在环境和工具中所封装的功能,让您可以专注于自己的应用程序,而不是将精力浪费在环境的繁缛细节上。

本地开发环境:

  1. Eclipse
  2. EGit — 用于集成 Bluemix DevOps 所提供的 Git 存储库
  3. 在桌面系统上的 Node 和 NPM

测试:

  1. Mocha — 一个强大的、易于使用的 JavaScript 测试框架
  2. Chai — 一个易于使用的断言库,与 Mocha 完美配对
  3. Grunt — 一个JavaScript 任务运行程序,有助于运行单元测试和集成测试

开发运营:

  1. Bluemix 自带的项目管理工具,使我们能够创建任务,定义冲刺,让项目经理对状态和更新感到满意。
  2. 通过所提供的管道,让交付变得更容易,使我们能够用一个简单的 Git 推送将应用程序部署到环境。在这里,将对构建过程进行监控,并在失败时停止部署尝试,让我们不会出现不成熟的部署。

在下面的参考资料部分中,我们提供了几个具体教程的链接,以帮助您熟悉 Node.js 在 Bluemix 上的能力。

结束语

dW Premium 工程团队很喜欢 IBM 提供的大量云技术,我们很荣幸可以与您分享我们的经验。为此,我们在 developerWorks 上推广了一些我们使用的东西。dW Premium 订阅 提供了一些技能建设工具、在我们的 IaaS 和 PaaS 产品上使用的积分,以及活动折扣,所有这些都提供给了我们的 Premium 订阅用户,这符合我们的 “学习、开发和联系” 的 developerWorks 核心主题。dW Premium 订阅的捆绑好处是提供了很大的折扣,而且好处还在不断增加,以便为您提供终极的体验,并让您有能力走得更远。我们的 developerWorks 观众,多年来都在享受我们的网站上大量免费的优秀内容,而该订阅是一个工具,可以帮助您在旅程的下一站迈进云时代。我们很高兴能够提供一个平台,帮助您学习更多知识,开发更多内容,联系更多同行。

原文  http://www.ibm.com/developerworks/cn/cloud/library/cl-bringing-dw-premium-to-life/index.html?ca=drs-
正文到此结束
Loading...