Google Wave的设计初衷是让人们互相发送信息,一起编辑文档,但用户对此感到困惑,很快就以失败告终。Google Wave持续了大约一年时间,于2010年8月被关闭。

Wave“领先于时代”,而谷歌并没有有效地解释该服务的真正好处,但是谷歌高级副总裁乌尔斯·霍泽尔(Urs Holzle)说:“代码的核心部分以及驱动Wave创新的协议都已经开源,所以用户和合作伙伴可以继续我们的创新。很多东西是值得我们借鉴的。

google wave是啥?

有人说,google wave就是email、IM、twitter、sns和wiki的结合体,我实在没有办法想象也看不出来是怎么个结合法。类似的说法很难有什么说服力。

google官方的说法是:Google Wave is an online tool for real-time communication and collaboration

google wave的特征分析

  • online,你不online的时候,这个东西是不会wave的,不在线的时候google wave和email、im比起来是没有任何优势的。

  • tool,工具到底怎么用、到底有什么用,关键还是看人,在工具和人的互动当中,工具慢慢就被定性了,所以目前wave这个万金油究竟能干什么,要给个明确的回答,还要等。

  • real-time communication,时事通讯,这是在算不上什么新鲜事,实时通讯工具太多了

  • collaboration,协同,这才是最重点的。wave和email、IM、twitter等服务比较而言,优势就只有一个:协同。

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

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

It turns out that implementing this kind of real-time collaboration is far from trivial. The most common solution responds to the name Operational Transformation (usually abbreviated OT). It originated from a research paper published in 1989 but got more recently popularized by Google Wave. Today, it powers many collaborative editors such as

These are only a few examples from a growing number of applications with realtime collaboration. I expect this number to rise even faster now that Google has published the Drive Realtime API, which is based on OT and let’s third-party apps use the same collaboration as Google Docs.

http://operational-transformation.github.io/what-is-ot.html

工具

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允许开发人员修改基础代码、使用Gadgets 和Robots 对其进行扩展。Gadgets是运行在Wave中的小程序,而Robots则是“自动的Wave参与者”。Wave还可以嵌到博客等其它媒体当中。

协议

google在waveprotocol.org发布了Federation协议和OT协议,OT协议解决协同问题,包括wave、wavelet、blip等。

数据模型

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 Wave 、Google Wave API 、Wave协议 。

参考文章:

Google Wave的架构 https://www.infoq.cn/article/2009/06/wave/,查看英文原文: Google Wave’s Architecture

转载本站文章《协同编辑:Google Wave架构分析》,
请注明出处:https://www.zhoulujun.cn/html/webfront/engineer/Architecture/8563.html

协同编辑:Google Wave架构分析的更多相关文章

  1. 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程

    大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...

  2. Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍

    系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...

  3. Google服务器架构图解简析

    无疑是互联网时代最闪亮的明星.截止到今天为止,Google美国主站在Alexa排名已经连续3年第一,Alexa Top100中,各国的Google分站竟然霸占了超过20多个名额,不得不令人感叹Goog ...

  4. Flickr 网站架构分析

    Flickr 网站架构分析 Flickr.com 是网上最受欢迎的照片共享网站之一,还记得那位给Windows Vista拍摄壁纸的Hamad Darwish吗?他就是将照片上传到Flickr,后而被 ...

  5. 分布式MySQL数据库TDSQL架构分析

    摘要:腾讯计费平台部为了解决基于内存的NoSQL解决方式HOLD平台在应对多种业务接入时的不足.结合团队在MySQL领域多年应用和优化经验,终于在MySQL存储引擎基础上,打造一套分布式SQL系统TD ...

  6. Zookeeper和 Google Chubby对比分析

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt375 随着云计算的推广,云平台的设计和实现越来越复杂,很多系统属性如一致性和 ...

  7. SLG手游Java服务器的设计与开发——架构分析

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  8. 各大型网站架构分析收集-原网址http://blog.csdn.net/lovingprince/article/details/3379710

    1. PlentyOfFish 网站架构学习http://www.dbanotes.net/arch/plentyoffish_arch.html 采取 Windows 技术路线的 Web 2.0 站 ...

  9. ECMALL模板解析机制.MVC架构分析及文件目录说明.二次开发指南手册(转)

    ECMALL模板解析语法与机制 http://www.nowamagic.net/architecture/archt_TemplateSyntaxAndAnalysis.php ECMALL模块开发 ...

  10. 【转载】Instagram架构分析笔记

    原文地址:http://chengxu.org/p/401.html Instagram 架构分析笔记 全部 技术博客 Instagram团队上个月才迎来第 7 名员工,是的,7个人的团队.作为 iP ...

随机推荐

  1. 网格布局grid

    起因 昨天面试的时候,出了一道面试题,模拟面试公司的列表的元素宽度伸缩变化,根据屏幕大小的不同,一行上放置最多的元素,元素宽度不固定,间距固定,可换行,靠左对齐,当时猜出来用flexjs监听resiz ...

  2. js执行过程之上下文对象(Context)

    在js的学习中,我们已经不满足于仅了解js的基础知识,而是开始追求更深层次的学习.因为你会发现,仅了解js的基础知识,在开发项目的过程中是远远不够的.今天就来介绍一下在js执行过程中的一些相关内容了. ...

  3. go 中的循环依赖

    什么是循环依赖 Go 中的循环依赖是指两个或多个包之间相互引用,形成了一个循环依赖关系.这种情况下,包 A 依赖包 B,同时包 B 也依赖包 A,导致两个包之间无法明确地确定编译顺序,从而可能引发编译 ...

  4. 开发现代化的.NetCore控制台程序:(3)将nuget包发布到GitHubPackages

    前言 上一篇文章已经把项目模板的nuget包发布到了 nuget 的官方源了,其实还可以发布到其他源,比如 GitHub ,本文记录一下发布到 GitHub Packages 的过程. 注意:本文建立 ...

  5. [USACO2007NOVS] Cow Hurdles S

    题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the gan ...

  6. vue3.3新特性defineOptions

    当我们使用选项式api时候,可以轻松创建与setup()选项同级别的选项. 但是,用了

  7. Visual Studio 2022版本17.8中的实用功能

    前言 今天介绍一下Visual Studio 2022版本17.8这一发行版中的4个比较实用功能. 保留大小写查找和替换 这个功能之前就有,不过我觉得对于日常搜索.替换而言还是比较实用的.在执行查找. ...

  8. Shiro-550反序列化漏洞(CVE-2016-4437)复现

    本文章使用Shiro_exploit此工具复现,靶机环境为vulhub 项目地址: https://github.com/insightglacier/Shiro_exploit https://gi ...

  9. CentOS安装openGauss2.0.1

    CentOS安装openGauss2.0.1 OpenGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行.openGauss内核源自PostgreSQL,深度融合华为在数据库领域多年 ...

  10. JavaFx之横向布局左右两侧对齐(十九)

    JavaFx之横向布局左右两侧对齐(十九) 横向布局HBox在子节点A.B中添加<HBox HBox.hgrow="ALWAYS"></HBox> 即可做到 ...