`
javasalatu
  • 浏览: 726743 次
  • 性别: Icon_minigender_2
  • 来自: 北京
博客专栏
96df99eb-e89d-3228-9c8e-967fc745ec52
程序员的自我经营之道
浏览量:7715
文章分类
社区版块
存档分类
最新评论

Google Wave 的架构

 
阅读更多

Google Wave的架构

作者 Abel Avram 译者 王丽娟 发布于 2009年6月3日 上午12时54分

Google Wave是一个工具 ,也是一个平台 、还是一个协议 。其架构的核心是操作转换 (Operational Transformation,OT),这是一个支持并发控制的理论型框架。

首先需要看看Google Wave 的定义:

Google Wave是基于托管型XML文档(称为Wave)的新型沟通、协作平台,支持并发修改和低延迟更新。

工具

Google Wave是一个兼备电子邮件、即时通讯、协作文档共享和编辑的工具。在Chrome、Firefox、Safari等浏览器里运行的客户端中(包括移动平 台iPhone和Android),Wave使用JavaScript和HTML5,Wave在服务器端则结合使用Java和Python,但服务器端可 以用用户希望的任何方式来实现。该工具用GWT 构建,并使用Google Gears 处理HTML 5中尚未包含的拖拽。该工具需要专门的服务器来处理并发通讯,大型团队尤其需要这样的服务器。服务器可以放在企业外的云里,也可以放置在私有企业内部,或者只是放在某人的家里。

Google Wave上周在Google I/O大会期间进行了展示

平台

Google Wave带有一个公共的API ,Google公司承诺在产品正式上线之前会开源整个平台。作为平台,Wave允许开发人员修改基础代码、使用GadgetsRobots 对其进行扩展。Gadgets是运行在Wave中的小程序,而Robots则是“自动的Wave参与者”。Wave还可以嵌到博客等其它媒体当中。

协议

数据模型

Google Wave数据模型 的主要元素有:

Wave ——每个Wave都有一个全局唯一的Wave ID,并包含一组Wavelet。

Wavelet ——Wavelet在其所属的Wave中有一个唯一ID,Wavelet由一个参与者列表和一组文档组成。Wavelet是并发控制/操作转换请求的实体。

参与者 ——参与者由Wave地址确定,Wave地址是文本字符串,格式与电子邮件地址相同(local-part@domain)。参与者可以是用户,也可以是组,或者是Robot。每个参与者在参与者列表中最多可出现一次。

文档 ——文档在其所属的Wave中有一个唯一ID,由一个XML文档和一组“分离”注解组成。分离注解指向XML文档,不依赖于XML文档的结构。它们用来表示文本格式、拼写建议和超链接。文档在Wavelet中构成一棵树。

Wave视图 ——Wave视图是特定用户在一个Wave中访问的Wavelet子集。用户只要是Wavelet的参与者,或者是参与者组的成员(组可以嵌套),都可以访问Wavelet。

操作转换

这是Wave技术的重要组成部分 。Google Wave广泛使用了在服务器端执行的操作转换 (OT)。 当用户编辑多个用户同时打开的协作文档时,客户端程序会提供一个Optimistic UI,立即显示用户输入的内容,同时将编辑操作发送给服务器,希望该操作能被服务器接收。客户端等待服务器评估该操作,在服务器应答之前会缓存其它所有的 操作。服务器应答之后,所有被缓存的操作会从客户端批量发送到服务器。服务器考虑从其它客户端接收到的操作,相应地转换操作,并将该转换通知给所有的客户 端,客户端相应地更新其UI。操作被发送至服务器,并由特性规则根据特性传播到各个客户端,除非该操作是批量操作。服务器是文档及其版本的管理者,其中版 本被认为是“正确的”版本。最后,各个客户端会根据从服务器接收到的最终版本进行更新,该最终版本可能是很多操作转换的结果。还有很多针对通讯失败或服务 器/客户端崩溃而提供的恢复措施。为了迅速地识别误传,在客户端和服务器间交换的所有XML文档只带一个总和校验码。

客户端-服务器协议

操作。 Wave的基本组成部分Wavelet经过一系列被称为操作转换的改变。这些改变需要传播并应用到每个客户端,否则客户端就不能同步。

操作队列。 所有对Wavelet的操作都按照严格的顺序发送。服务器对一个操作做出响应之后,下一个操作才会被发送。服务器基于版本号给操作排序。每个客户端都要按照合适的顺序应用操作。

打开Wavelet。 要开始与Wavelet通讯,客户端要给服务器发送一个Open请求,里面包含Wave ID和Wavelet ID。服务器响应是一个快照——Wavelet的序列化状态,或者是相应版本的历史散列。

服务器到客户端的通讯。 服务器发送到客户端的内容是Delta(一或多个操作的序列)、版本号和历史散列之一。

客户端到服务器的通讯。 客户端发送的内容是Delta或版本号。

恢复。 通讯失败时,客户端通过发送先前从服务器接收到的散列历史重新打开Servlet。

联盟

Google Wave Federation协议 允许多个实体(Wave提供者)彼此分享Waves。Wave提供者可以是在某人家里运行的服务器,为单个用户或所有家庭成员提供Wave,也可以是一家公司、或一个ISP,Google只是另一个Wave提供者。

有用的链接:Google WaveGoogle Wave API Wave协议

查看英文原文: Google Wave’s Architecture

转自:http://www.infoq.com/cn/news/2009/06/wave

分享到:
评论

相关推荐

    processwave:Google Wave 的协作图表编辑器

    processWave.org 编辑器是 Google Wave 的协作图表编辑器。 它允许多人同时编辑同一个图表。 目前支持六种图类型:UML、BPMN、simpleBPMN、FMC、petri网和EPC。 由于该项目的开源性质,这个受支持的模板集列表可以...

    Google云计算简介.doc

    除了搜索业务以外,Google还有Google Maps、Google Earth、Gmail、YouTube等各种业务,包括刚诞生的Google Wave。这些应用的共性在于数据量巨大,而且要面向全球用户提供实时服务,因此Goog le必须解决海量数据存储...

    Wave Framework:以开源API为中心PHP微框架-开源

    Wave是一个PHP微框架,它是按照模型视图控制体系结构和工厂方法设计模式松散构建的。 它是为Web服务,网站和信息系统而设计的,旨在支持本机API体系结构,缓存,用户控制和智能资源管理。 Wave是一个紧凑的框架,不...

    深入解析物联网操作系统(架构/功能/实例分析)

    目前也已经有很多厂商推出解决方案,比如Google的thread/wave,华为的Hi-Link,以及NB-IoT等。传统的物联网连接,都是指物联网终端设备与物联网云平台之间的连接,如下图:在这种模式下,物联网设备通过各种各样的...

    json1:这是ottypesjson0的可操作转换类型替换

    或Google Wave2。或...任何东西! 支持嵌入式子类型。 例如,您可以使用quilljs或JSON树中的内容嵌入富文本文档冲突! 与CRDT不同,可以将该库配置为拒绝接受会导致数据丢失的操作。 例如,如果两个用户都插入相同...

    avplayer源代码

    audio_render是用于播放音频的结构, 同样包含了一些函数指针, 只要实现这些函数指针, 就可以改变音频输出, 比如把音频数据写到文件, 这里实现了2种方式输出音频, 一种是使用dsound来输出音频, 另一种是使用waveout...

    《程序员》杂志2012年第1期.pdf (免费积分下载)

    从这个角度来看,Gmail是Google的战略性资产,也难怪Google推Wave、Buzz和Google+都需要从这里入手。但Gmail的用户数大约是2.6亿,还不如3.5亿的Hotmail和3.1亿的Yahoo Mail,而且邮箱用户与其他三家的ID往往绑着...

    在线Golang文档阅读GoHub.zip

    Powered by:jQuery New Wave JavaScriptmarked a markdown parserbase64.js Base64 implementation for JavaScripthighlight.js Syntax highlighting for the WebJingYes CSS3 Framework 标签:GoHub

    精通JavaScript+jQuery Part1

     3.2 文字实例一:模拟Google公司Logo   3.3 文字实例二:制作页面的五彩标题   3.4 CSS段落文字  3.5 段落实例:百度搜索   第4章 用CSS设置图片效果   4.1 图片样式   4.2 图片的对齐  4.3 ...

Global site tag (gtag.js) - Google Analytics