Clouda框架介绍与应用场景

日期: 2014-05-14 来源:TechTarget中国 英文

Clouda是一个NodeJS Web开发框架,但是,与流行的Express框架不同,Clouda是一个完整的前后端开发解决方案,等价于目前热议的MEAN架构。

MEAN是指mongoDB+Express+AngularJS+NodeJS,在Clouda中则是mongoDB+Clouda core+Handlebar+NodeJS,Clouda是一个集成框架,相对来说比MEAN要容易上手,另外Clouda中实现了前后端数据绑定和 UI实时刷新,也就是实时性。

与Clouda类似的NodeJS实时Web框架有Meteor、socketstream、Derby,另外网易有基于NodeJS的游戏服务端框架pomelo,也支持开发实时性Web App。

历史

Clouda框架是百度历经两年开发出来,并在Github上开源,2013年8月百度世界大会上正式发布。截止至2014年5月已至0.10.2版本。

Clouda的前身是sumeru(西米露) WebApp平台,据传该平台由前百度云首席架构师林仕鼎设计,由百度移动云部门下面的技术团队开发,并由童遥担任项目负责人。

Clouda是配合百度移动云战略而研发出来的,是百度轻应用战略的一部分,其目标是打造媲美原生应用性能的Mobile Web App,也是为了提高轻应用的性能表现。

特性

官方网站上介绍Clouda的特性如下:

云端统一。只用Javascript一门语言,抹平云端界限,一份代码处处运行。这是属于nodejs的特性。

实时编程。所有数据实时推送的基础设置,每个终端都无延迟同步响应。

随动反馈。面向数据的编程模型,数据实时推送后,界面会自动更新。这两条说的其实就是一个事,就是实时性。

专为移动。为智能手机与平板电脑特别设计,运行性能高,标配离线能力。

高兼容性。标配数据同步工具,兼容已有服务;同时兼容Backbone等开源框架。也就是说一些组件可以被替代,如handlebar.js和Clouda UI。

一键托管。无缝整合百度BAE云环境,即可自建服务器也可一键托管在百度云。

SEO能力。原厂匹配主流搜索引擎,每个APP场景都可以被搜索引擎爬虫抓取。这两条是为配合百度的服务准备的,其实还可以加一条,就是快速接入轻应用。

入门简单。简单语法搭配丰富教程与文档,保证快速上手,还配有5分钟教程。Clouda框架还是需要一些学习成本的,虽然比其他的框架可能要简单一点。

组件介绍

mongoDB:mongoDB是Clouda正常运行所依赖的环境,mongoDB是非关系文档型数据库,数 据以json的二进制扩展bson存储,读取出来的数据可以直接在javascript中操作而无需进行转换。Clouda使用mongoDB官方开发的 驱动组件mongodb来操作数据库。

另外Clouda还支持Redis的分布式存储,不过也需要先有Redis环境。

Handlebar.js:一个弱逻辑的js模板引擎库。它的特点是你可以像在ddcms、wordpress中写模板一样来写页面。它可以将数据绑定到html节点,并在数据改变时实时刷新UI。

这个库是可替换的,你可以切换到backbone等其他模板引擎上。

SockJS:SockJS是一个可以提供类似websocket对象的js库,能提供服务器和浏览器之间的一致连贯的、跨浏览器的连接。websocket是可选的,SockJS可以用自己的协议来代替,也就意味着可以支持较低版本的浏览器。

Clouda UI:Clouda UI是一个支持双向数据绑定的轻量级UI框架,里面封装的是GMU组件,GMU是百度FEX Team为轻应用开发的一套移动优先的UI组件,不过现在已经开源出来,可以在Clouda里用,也可以单独使用。

Clouda的依赖里面还包含其他node模块,如Clean-CSS、shelljs、uglify-js,因为不是很重要这里就不提了。

核心架构

Clouda项目默认使用MVC架构,我根据官网的介绍和实际项目的代码画了一张示意图如下:

clouda架构

从图中可以看到Controller并没有和Model直接交互,而是通过一个Pub/Sub模型。由于Clouda使用SockJS和Handlebar实现了Model到View间的数据绑定,实际上这个架构是有点接近于MVVM了。

Clouda项目负责人童遥在一次演讲上演示的架构如下:

clouda架构2

童遥的演讲讲了为什么要开发实时性的Web App框架以及设计思路,不少干货还是值得一看的:云端一体的WebApp实时基础设施设计思路

应用场景

由于Clouda使用了类websocket机制,每一个浏览页面的用户都要创建一个长连接对服务器进行轮询,因此最好每一个浏览页面的用户都是重 度用户,而不是看一下页面就离开。Clouda的设计本来是为Mobile Web App,因此可以适用,但实际上也是可以用于PC浏览器上的,即Web App。

同时,每次Clouda启动都会动态的创建页面资源,因此页面越少越好。

综上,Clouda适用于页面少的Web App,即在线工具和服务等,而不适用于用户平均在线时长和PV/IP比偏低的服务,如Blog、CMS等偏静态页面的开发。

官方提供了以下功能示例代码,你可以认为它们是Clouda适用的应用场景。

  • TO-DO list
  • 多人聊天室
  • 多频道的聊天室
  • 带数据验证的用户系统
  • 获取第三方数据

在Clouda官网的客户案例页面提供了更多的示例,这些是业务层面的,全部都是Mobile Web App,总结如下:

  • 客服页面
  • 招聘网站
  • 旅游攻略
  • 导购
  • 菜谱
  • 违章查询

可以看到业务案例大多是IO密集的数据库查询。这也是NodeJS的强项。

与其他框架、语言配合

Clouda会生成独立的项目,因此无法与其他NodeJS框架如express完美协同,不过Clouda支持express的数据接口。

另外Clouda会动态生成页面文件,因此也无法与其他语言如php等进行混合开发,不过也可以用API和组件的方式协同。

期待

Clouda的理念很先进,但也有不完善之处,以下是希望Clouda进行改进和完善的地方。

更抽象,能够选用模块,而不是默认封装。在MEAN架构中,除了NodeJS,其他模块应该是可替换的,我们希望Clouda也能做到模块可替换,目前只是前端类库可替换,这还不够。

更广泛的适用性。即能支持非实时应用的开发,网络上的内容其实大多数不要求完全的实时性,我们希望Clouda即能支持实时,也能支持非实时。

组件化。Clouda由于使用长连接能够用于显示用户的在线状态,因此非常适用于会员系统、IM组件的开发,希望Clouda能开发一个mini组件版,去掉不必要的东西,能方便的嵌入到其他应用程序里面。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐