Bluemix中国版体验(三)
上一篇用Mobile Message Connect创建了一个微信后台服务。这次我们来看看Bluemix的核心服务——Cloud Foundry Apps。一直想写一篇关于Cloud Foundry Apps的文章,但没有找到一个合适的点来展开描述,直到最近发现了Node-RED。
从官方的描述来看,Node-RED是for IoT的:像配线一样连接设备,应用程序接口(API)和在线服务(online service)。但是个人理解,Node-RED的用途已经远远超过了IoT领域。将Node-RED定位于一个基于Node.js的可视化应用framework应该是比较贴切的。
Node-RED包含了多种node,一个node是一个具备某种特定功能的组件。例如:接收HTTP输入,返回HTTP应答等。Bluemix中国版内置了一个Node-RED Starter的boilerplate。可以非常容易的创建Node-RED环境。在Bluemix中,一个Node-RED Starter环境包含一个Cloud Foundry App实例和一个Cloudant DB实例。不难看出,Node-RED是用Cloudant作为数据存储的。
Node-RED创建完成后,点击Cloud Foundry App的Route连接就可以访问到Node-RED了。
在Node-RED展示的首页上有简短的配置介绍,其中比较重要的是“如何为Node-RED配置密码保护”,这个比较简单,就是为Cloud Foundry App添加两个环境变量即可。进入到“flow editor”,创建一个简单的“Hello World”应用体验一下。
一共三个node:http in, function, http out。
[http in],设置属性,method:GET;URL:/myip;
[function],编写function代码,这里的function是指一个Node-RED的node,用户可以在function中添加自己的代码逻辑,和JavaScript的function不是同一个概念。
- function中自动传入一个名字为“msg”的object,在本例中,这个object包含了从http in输入的信息。也就是http请求的信息。
- 在函数中修改msg的内容(属性),msg会被自动传递到下一个node中,本例中是http out。
- msg的payload属性可以理解为是http out的输出内容(http response的body)。
简单说,上述function中的代码就是读取HTTP Header中的“x-client-ip”字段,返回客户端浏览器的IP地址。
[http out],不需要做任何修改。
flow创建完成后,点击右上角的“DEPLOY”按钮。然后再浏览器中输入以下格式的url就可以看到运行结果:
[Bluemix Cloud Foundry app url]/myip
例如:https://demo.mychinabluemix.net/myip
经过上述步骤,非常容易的创建了一个web应用。同理也能轻松创建RESTful Service。对于一些轻量级的api或者feature,用Node-RED是非常适合的。特别是在一些要求“高度敏捷”的项目中(需求变化快,交付时间短)。当然,对于POC或者Demo系统来说,也是一个非常好的选择。除此之外,在微服务架构中,Node-RED可以作为一个可视化的服务开发工具/平台来使用(在高可用和扩展性方面需要进行加强和扩展)。
IBM DW上有一篇很有趣的文章:在 5 分钟内使用 Node-RED 构建实时的聊天应用程序 ,可能由于发布时间比较早,里面的demo是无法在中国版Bluemix上运行的。这里附上修改后、可以正常运行的代码。点击下载后到导入就可以运行。
在这个demo中,引入了一个新的node:template,简单说,这个就http out node要输出(返回给客户的)的页面。在template中可以包含HTML,CSS和JavaScript代码。并且在template中可以使用Mustache模板语言。模板的内容指定由msg.payload属性承载并传递给下一个node(http out)。
原文中的demo写在template里面的代码有两处问题:
- 代码块的顺序不对,导致http out node输出了错误的页面代码。
- WebSocket的url没有使用SSL(wss://),导致无法连接到websocket in的url。
此外,demo中有2个flow:websocket flow和http flow。每个flow都包含了相应的输入,处理,和输出节点(node)。websocket in和http in各自都有一个固定的url。
部署后运行起来是这样的:
总体来说,Bluemix+Node-RED的组合,使用户可以在很短的时间内,以可视化的方式开发和部署IoT与微服务相关的应用组件。很好的适应了互联网行业中快速迭代、快速上线的需求。试想一下,如果将Node-RED与serverless架构结合,又会是怎样一种场景呢?