MindTouch简介和技术架构

原文:http://www.xiezuo8.net/?p=6 

摘要:

介绍MindTouch公司的企业级协作平台和平台架构。本文主要内容翻译自于【3】,也是协作吧!!的第一篇作品,希望大家多提意见。

正文:

MindTouch, INC 作为 Dream 和Mindtouch理念的缔造者,可算是煞费苦心。可以这样描述MindTouch,它构建于Dream(Distributed REST Application Manager)之上,成为非常流行的企业级wiki,但功能却要强大得多。MindTouch相当于是一个wiki接口,这个接口可以非常容易的调用分布式平台暴露出的web服务。MindTouch的使用者可以体验到wiki的即时价值:对文本,文件,邮件的更高效协作,并且通过互联数据库,外部服务,和web2.应用,mashup出非常丰富的复合应用。并且允许网站管理员,企业IT专家对数据和服务的访问权限进行控制。

MindTouch这个产品已经得到了2009年度Jolt的企业工具大奖,可谓是风头正劲。这也说明,MindTouch在企业级工具市场已经得到了很大的认可。

MindTouch的优点

MindTouch是唯一的融合最新协作理念的wiki应用平台。其主要优点:

内容编集:

l  每一个页面都是一个xml 形式的web服务,可以被标准的http调用。

l  Mashup生成器可以容易的创建复合应用和数据mashups

l  智能链接

l  嵌入的多媒体文件

l  交互式图片管理系统

l  内嵌脚本语言和引擎

l  WYSIWYG【1】 editing

l  3-way xml diff【2】

内容管理:

l  多层页面权限控制

l  页面和文件版本控制

l  编辑,评论和只读模式

l  灵活的页面结构具备段落级的编辑功能

l  分层组织管理

l  标签功能

l  企业级搜索索引页面和文件内容

l  用户违规行为管理

集成和管理

l  服务管理控制台允许管理员添加外部应用,数据存储和程序库

l  提供可自由定制的接口

l  用户和群组权限控制—LDAP 和活动目录支持

l  自由的改变风格

l  可以扩展的面向服务的架构

l  一百多个外部应用和库扩展支持

1 MindTouch 发展

MindTouch,Inc 最初开发的MindTouch来自于一个MediaWiki项目,这个项目非常适合企业使用并且经过了充分的可用性测试。

MindTouch的第一个版本“Gooseberry”在2006年7月发布,是一个单点应用(point application)。这个版本共享了MediaWiki的基本代码,但是MindTouch将整个系统转化为基于XML的架构,

添加了WYSIWYG编辑器,采用Lucene来提供跨页面和文件附件的企业级搜索,利用分级的权限控制, 提供一整套新的用户界面。这个早期版本发布在sourceforge.net,已经具有了与今天其他企业级wiki 单点应用如 Twiki和Atlassian’s Confluence相比拟的功能。MindTouch早期版本“Gooseberry”的发布,也是为了收集开源社区的反馈,这些反馈将可以引导新型平台的研发,这一研发方式开始于MindTouch理念的提出阶段。随后MindTouch 的foundation项目Dream产生,版本为“Hayes”。这个分布式应用平台在2007年7月发布。

在“Hayes”版本中,MindTouch的架构基于松耦合web服务的组合,这些web服务是由MindTouch Dream在运行时实例化的。MindTouch的大部分业务逻辑是由c#实现的。在Linux平台上是用Mono部署,在windows平台上则是借助.net框架。在这个web 服务层之上是一些接口,如果需要的话,也可以是一些客户端。最健壮的接口是基于PHP的客户端。客户端和服务层之间的所有通信都称为MindTouch API,这是通过标准的HTTP调用:GET, PUT, POST等实现的。也有一些其他的与web服务层进行通信的接口,MindTouch Productivity Tools就是其中一种。MindTouch和开源社区正在开发其他的通信接口。MindTouch把这些接口和连接器作为各种应用和数据存储的交换器。到目前为止,用户的大部分兴趣都来自于这一区域。

2 MindTouch Dream

Dream是一个REST风格的微型服务器,专门为web服务设计;是一个减小分布式非均匀编程(distributed heterogeneous programming)复杂度的工具集。这个核心构成了MinTouch的foundation项目。

MIndTouch Dream 是一个面向服务的,分布式的应用框架,这构成了MIndTouch技术的核心基础。MIndTOouch, INC经过多年在分布式,web服务和自组织系统领域的研究和经验积累, 构建了这一基础平台。这一设计可以更快速可靠的开发可以扩展的和扩充的富N层应用。Dream是由C#编写。执行于Mono或.Net平台之上。 Dream的库提供与其他Rest风格的web服务的交互,可以非常容易的操作XML数据,和创建Dream 服务的服务定义。核心库支持.Net框架,但也支持PHP和JavaScript以简化集成工作。Dream的运行时环境管理服务的初始化,消息路由,和负载均衡。Dream运行时使用一个有效的轻量级线程模型,这个模型几乎可以随着计算机cpu内核数量的增加进行线性扩展。Dream服务的核心提供共用的构建快,例如事件分发器,分布式目录,日志和服务检查器。所有这些功能块封装在一个紧凑并且容易学习的框架中,利用这些框架,开发者可以快速开发出高质量的服务模块。

Dream提供了一种开发软件的新方式,非常有益于开发大规模的企业级web应用。使用Dream,web服务类似于对象,它可以被实例化并且拥有服务入口点。这些服务入口点可以叫做服务features或者简称为features。A feature是与另一个服务交互的入口点。因为所有的Dream 服务都是Rest风格的,所以features之间的交互通过标准http调用比如GET,POST, PUT和DELETE来实现。Dream运行时的设计允许一个服务制造者假想一个虚拟场景,在这个场景里所有的服务通信都是通过web请求来实现。Dream库提供一些拥有简单接口的类来实现这些交互。假想的虚拟场景的好处是减少开发者需要知道的用例场景数量。注意这不是说这个假想的虚拟场景是绝对成立的。恰恰相反,这个虚拟场景成立的条件必须遵循以下假设:

1.  其他的服务可能在任何时候不可达

2.  资源必须用过超时机制来管理(i.e. time-to-live/TTL)

3.  所有的东西都是并发运行的

3 传统的应用架构

Mindtouch的架构与传统的软件架构有很大不同。传统的软件应用是通过完整的方式开发的。例如,web应用的开发遵循图一的架构风格。

图一 传统软件架构图

图一中的应用构建于一种特定编程语言之上,需要一种特定操作系统的支持。当一个工程人员需要扩展这个应用时,他必须使用相同的编程语言来实现新的扩展,这些扩展安装部署到相同的操作系统之上。简而言之,工程人员必须把应用扩展构建在统一的环境之上,而这些工程人员可能擅长其他一些开发技术和平台。因此,集成其它平台或服务到现有系统将变得困难,因为这需要他们对现有系统架构和开发规则需要有深刻的认识,并且,如果系统出现故障,整个系统将的修复将会很困难。

这种整体式软件系统开发的方式在过去十年中一直延续。在现今互联的世界里,这一开发模式并不能充分的发挥驻留在互联网络里的应用的功能特性。用这种方式开发是低效的,因为即使这些应用可以暴露出网络访问的接口,但是,大部分情况下,这些接口仅仅是一些end point,一些受限于它自己统一体系架构的行为集合。这些应用不能感觉到存在于组织内和跨组织之间的互联网络。取而代之,存在于互联网络之上的应用应该具有一些特点:大级别应用,易扩展性,易集成性,增加的开发费用,较好的利用工程资源,等等,还有很多。

4 MindTouch 应用架构

MindTOuch采用了一种完全不同软件开发模式。

图二 MindTouch 架构图

图二描述了MindTouch的软件架构思想。MindTouch组合了跨互联网络的松耦合的非均匀服务,通过MindTouch API和DREAM(见图三),以分布式和并发的方式共享他们之间的行为动作。通过web协议,可以用任何语言实现新功能,并部署到任意的操作系统和服务器之上。简而言之,应用会驻留于互联网络之间。而不是必须遵守特定语言(比如java或者c#)实现的特定接口。在实现扩展时,仅仅需要遵守无状态web协议(REST)。

图三 MinTouch应用全局图

让我们在了解下MindTouch架构的一些细节:

之前已经说过,MindTouch是连接分布式应用平台的wiki接口。注意图三中被标记为“wiki interface”的圆角长方形。用户客户端通过HTTP/HTTPS与MindTouch API(图三红色圆角长方形)进行通信。MindTouch API通过DREAM(图三黄色圆角长方形)联合和实例化来自于其它服务,应用和数据存储的功能服务,这样的话,MindTouch成为连接互联网络的信息总线。实质上,MindTouch是企业内的连接器。

借助DREAM和MindTouch API, 应用程序的行为动作和数据暴露给为了终端用户。终端用户可以创建数据的动态报表,复合应用—有时候称为situational applications 或者Mashups.  站点管理员通过用户界面可以容易的批准到应用程序,数据和服务的连接权限。终端用户可以容易的把数据和功能暴露给其他用户,而不用给出实际的进入应用程序和数据库的访问权限。

4.1 并发性

DREAM的主要优势之一就是,MIndTouch可以并发的执行和进行通信。为了解释这个,先说说传统的软件应用是怎么运行和通信的。

图四 传统软件请求序列图

图四中:

一个应用程序在执行的时候是序列化执行的。这也就是说每一次请求依赖于之前的请求。系统等待直到所有的请求完成。为了描述这个,我们不妨假设这样一个场景,一个使用某个应用程序的用户,从应用程序发出了对CRM 系统的请求,对数据库的请求,以及存储服务的请求。在传统的应用中,在新的请求开始之前,需要之前的请求成功完成,所以完成的时间是所有动作的执行时间之和。可以记为T=t1+t2+t3.T是总时间,tn是各次请求的时间。

在DREAM中,处理方式则完全不同。

在图五中,展示了Dream也就是MindTouch怎样处理这些请求。Dream并发的来处理这些请求,这也就是说用户只需要等待最长操作请求的执行时间,而不是等待所有的请求时间之和。在互联的网络里,这个场景比较普遍,因此上这一改进意义非凡。比如:一个用户向MindTouch发出请求,然后MinTOuch并发的发出到CRM系统,数据库,以及保存文件的请求。因为保存文件的并不需要MindTouch或者用户的进一步请求,因此上可以在后台执行。这很大程度上提高了系统的性能。执行时间变为T=Max(t1,t2).T是执行总时间,tn是各自执行动作的时间。T3被忽略掉了,因为它并不会影响到用户的等待时间。

Dream和MindTouch具有非常好的分布式和并行执行能力,是一个非常不错的系统平台。

图五 MindTouch软件请求序列图

4.2 平台扩展

扩展MindTouch并不需要了解平台内部的工作机理。所有的交互都是通过无状态web服务实现的,也不会局限于某一特定开发语言,操作系统,以及部署的地理位置。可以通过以下几方面来扩展新的应用功能。

l  从别的应用或服务嵌入内容

l  认证从来自于其他系统的用户

l  将数据存储在云或者互联网络中

l  在平台内或者跨企业进行搜索

l  展示各种类型的内容

总之,MindTOuch的用户接口耦合性很低,也就是说MindTouch的功能可以嵌入到已经存在的应用系统中,或者被特定的前端用户访问。MindTouch提供两种流行的桌面应用给前端用户,从OutLook发布邮件,以及在windows系统中进行文件拖拽。

相关资源:

【1】   WYSIWYG(What you see is what you want)http://en.wikipedia.org/wiki/WYSIWYG

【2】   介绍3-way xml合并和区分的工具http://tdm.berlios.de/3dm/doc/index.html

【3】  MindTouch技术介绍http://www.mindtouch.com/products/technology

你可能感兴趣的:(touch)