IBM Stock Trader 应用是个简单的股票交易样本,您可以在此创建各种各样的股票投资组合,并向每个投资组合添加股份以收取佣金。它会记录每个投资组合的总价值以及它的 忠诚度等级 ,随时通知您等级的变化,因为这会影响对每个交易收取的佣金数额。它还支持您提交该应用的反馈,根据反馈的语气,可以产生免费(零佣金)的交易。(调用 Watson Tone Analyzer 来确定语气,后续文章将会对此进行探讨)。
该样本旨在展示将传统的整体式、本地部署的应用 直接迁移 (lift-and-shift)到重构为基于 Docker 的微服务(在基于 Kubernetes 的现代环境中运行)上之后,人们有何期待。它会有意显示如何使用传统的 Java EE 编程模型(比如, JDBC 和 JMS )来访问传统的记录系统资源,比如关系数据库或消息排队基础架构。请注意,虽然该应用经常使用 IBM Db2 和 MQ ,但是它也可以很好地运用开源技术,比如作为关系数据库的 Apache Derby 以及内置到 Open Liberty 中的 JMS 服务器。
这一理念展现了如何在 Kubernetes 环境中运行基于微服务的应用。该应用最初在 MiniKube 中进行测试,通常会部署到 IBM Cloud Private (IBM 基于本地部署的 Kubernetes 的产品)上,该产品可以单独安装,也可以安装在 Red Hat OpenShift 上。这个样本会演示各种 IBM 中间件产品的使用方式(比如, Db2 、 MQ 以及 ODM ),每个产品都可以连同他们的 Helm Chart 部署在 IBM Cloud Private 目录中,可以从 Open Liberty 上运行的基于 Java 的微服务来调用。您也可以将这个样本部署到 IBM Cloud Kubernetes Service ,这是 IBM 在公共云中托管的基 Kubernetes 的产品。
所有的源代码都在 GitHub 中公开可用。在 IBMStockTrader 组织下包含八个存储库,每个都代表一个独立的微服务,可以交付一个特定功能。例如, /stock-quote repository 提供查阅给定股票价格的功能,并负责在可配置期间在 Redis 中缓存这些值。
这些存储库的每个构建版本均可在公共的 DockerHub 中获取。例如,要想使用 stock-quote 微服务,可以访问 https://hub.docker.com/r/ibmstocktrader/stock-quote,也可以使用 docker pull ibmstocktrader/stock-quote
将其拉至 Docker 寄存器。
无论您喜欢从 GitHub 克隆源代码并自行构建每个微服务,还是喜欢使用 DockerHub 中预先构建的镜像,您都可以轻而易举地在自己的 Kubernetes 环境中熟悉掌握并快速运行这个样本。 此外,您还可以使用 Helm Chart 将其部署到 IBM Cloud(公有或私有)中,后续文章中将会对此进行探讨。
如前所述,该样本已经纳入一组微服务,这些微服务协同工作,从而交付整个应用。下图显示这些微服务之间的交互方式:
如您所见, portfolio 微服务位于应用的中心,是标准的 Model View Controller (MVC) 架构中的 控制器(controller) ,可通过提供 视图 的选定客户端进行访问。这个微服务负责使 JDBC 保证持久性,使用 JMS 进行消息传递,并在 IBM Operational Decision Manager (ODM) 中进行 REST 调用以获取股票报价或推动业务规则;此外,它还可以在公共 IBM Cloud 中驱动 Watson ,并调用 API Connect 中的 API。这里还有一个旧式的 Enterprise Java Bean (EJB),具体来说,是一个 Message Driven Bean (MDB),它可以监听来自 portfolio 的消息,并且可以调用 通知 服务。 通过使用可按投资组合指定的 Istio 路由规则(后续文章将会对此进行探讨),它可以将通知发送至 一个 Slack 频道(使用”无服务器” IBM Cloud Functions 操作序列),或者以推文形式推送至 @IBMStockTrader Twitter 帐户。
后续文章也会关注 WeaveScope ,这是一种 Kubernetes 插件,可为您动态生成微服务交互图(以及其他内容),类似于以上显示的 PowerPoint 图表。请继续关注后续介绍这个超酷工具的文章;下面简要梳理了一下它可以生成的内容:
虽然这个样本中的所有后端微服务都使用 Java 编写,但是涉及到选择哪个用户界面时,我们会陷入了 多语言( polyglot )编程的境地。一个使用 Java 编写,另一个则使用 Node.js/Vue.js 编写。两个都可以从 portfolio 微服务调用完全相同的 REST 服务,但是每个都会在 Web 浏览器中以不同的方式呈现结果。
Java客户端名为 trader ,十分简单明了,为的就是查看源代码时容易理解。它只是一组 servlet,可以对 porfolio 进行 REST 调用,然后返回原始 HTML。没有任何花哨的 CSS 或 JavaScript,只是为了保证一切都紧扣重点。(事实上,您可以关掉浏览器中的 JavaScript 引擎,它仍然会照常工作。)虽然不是特别完美,但是它抓住了重点,知道如何调用基于 JAX-RS 的微服务,以及如何处理返回的 JSON 并在 UI 中呈现。
另一方面,另一个客户端名为 tradr (请注意缺少 “e”),它提供了更具现代感的用户界面。它在浏览器的 JavaScript 引擎中运行,利用 Node.js 来驱动后端调用,并利用 Vue.js 来呈现结果。它的代码演示起来有点复杂,但它却是当今客户所期待的那种复杂用户界面的典范。
我希望大家能够喜欢这篇关于 IBM Stock Trader 样本的简要介绍。本文只是作了一个高度概括,后续文章将会深入探讨具体的相关主题。总之,我们希望听到您的反馈,告知我们您希望详细介绍的主题。以下是未来拟探讨主题清单,我们将使用该样本深入研究如何实现具体的特性:
mpRestClient-1.0
) 从 Java 调用 REST 服务 mpConfig-1.1
) 访问这些内容 mpMetrics-1.1
) 跟踪使用度量,在 Prometheus 仪表板中查看结果 感谢您的阅读,请继续关注基于这个样本的后续文章!
本文翻译自: Introducing StockTrader (2018-07-23)