协同编辑:Google Wave架构分析
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架构分析的更多相关文章
- 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程
大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...
- Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍
系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...
- Google服务器架构图解简析
无疑是互联网时代最闪亮的明星.截止到今天为止,Google美国主站在Alexa排名已经连续3年第一,Alexa Top100中,各国的Google分站竟然霸占了超过20多个名额,不得不令人感叹Goog ...
- Flickr 网站架构分析
Flickr 网站架构分析 Flickr.com 是网上最受欢迎的照片共享网站之一,还记得那位给Windows Vista拍摄壁纸的Hamad Darwish吗?他就是将照片上传到Flickr,后而被 ...
- 分布式MySQL数据库TDSQL架构分析
摘要:腾讯计费平台部为了解决基于内存的NoSQL解决方式HOLD平台在应对多种业务接入时的不足.结合团队在MySQL领域多年应用和优化经验,终于在MySQL存储引擎基础上,打造一套分布式SQL系统TD ...
- Zookeeper和 Google Chubby对比分析
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt375 随着云计算的推广,云平台的设计和实现越来越复杂,很多系统属性如一致性和 ...
- SLG手游Java服务器的设计与开发——架构分析
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- 各大型网站架构分析收集-原网址http://blog.csdn.net/lovingprince/article/details/3379710
1. PlentyOfFish 网站架构学习http://www.dbanotes.net/arch/plentyoffish_arch.html 采取 Windows 技术路线的 Web 2.0 站 ...
- ECMALL模板解析机制.MVC架构分析及文件目录说明.二次开发指南手册(转)
ECMALL模板解析语法与机制 http://www.nowamagic.net/architecture/archt_TemplateSyntaxAndAnalysis.php ECMALL模块开发 ...
- 【转载】Instagram架构分析笔记
原文地址:http://chengxu.org/p/401.html Instagram 架构分析笔记 全部 技术博客 Instagram团队上个月才迎来第 7 名员工,是的,7个人的团队.作为 iP ...
随机推荐
- SpringBoot数据响应、分层解耦、三层架构
响应数据 @ResponseBody 类型:方法注解.类注解 位置:Controller方法.类上 作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合 ,将会转换为json格式响应 说明:@ ...
- 阿里云上的rds 的隔离级别read committed 而不是repeatable-read设置原因
阿里云上的rds 的隔离级别 是read committed ,而不是原生mysql的"可重复读(repeatable-read)",他们是基于什么原因这样设置的? show va ...
- OpenGL 纹理详解
1. 纹理 在OpenGL中,纹理是一种常用的技术,用于将图像或图案映射到3D模型的表面上,以增加图形的细节和真实感 2. 纹理坐标 纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图 ...
- STM32F103 CAN通信波特率的计算方法
前言 以下的波特率计算和实例仅针对 STM32F1系列 最近看一下CAN通信,翻出来之前做过的STM32 CAN通信的项目代码,有些概念比较模糊了,如波特率是怎么计算的. 最近接触rt-thread比 ...
- shell 语法介绍
大家好,我是蓝胖子,在日常开发中或多或少都会接触到shell脚本,可以说会shell脚本是一位后端开发的基本功,今天我将会花上一篇文章总结下常见的shell的语法,学完本篇,相信简单的shell脚本就 ...
- L3-013 非常弹的球
初速度:\(v = \sqrt{\cfrac{2 * E}{m}};\) 竖直速度:\(v_y = v \,sin(ans) = g * t\) 水平距离:\(s = v_x * 2t = v \, ...
- STM32一个定时器输出四路不同频率和占空比PWM波的方法
一般来说,一个定时器输出4路频率相同.占空比不同的PWM波是比较容易的,使用PWM模式即可实现.如果说是输出4路频率不同.占空比不同的PWM就没有现成的模式,是不是无法实现了呢?答案肯定是" ...
- React 中虚拟DOM是什么,为什么需要它?
注意:本节主要讲React中的虚拟DOM,但是虚拟DOM并不是React中特有的内容. 1. React 中虚拟 DOM是什么? 虚拟DOM是对真实DOM的描述,虚拟DOM是JS对象,实际上就是 JS ...
- 【译】拥抱 SQL Server 2022 与 SSDT 17.8:揭示关键更新
在数据库开发的动态场景中,SQL Server Data Tools(SSDT)是 Visual Studio 生态系统中数据库开发人员的强大工具.SSDT 17.8 包含在最新版本的 Visual ...
- springboot下添加全局异常处理和自定义异常处理
前言 在spring项目中,优雅处理异常,好处是可以将系统产生的全部异常统一捕获处理,自定义的异常也由全局异常来捕获,如果涉及到validator参数校验器使用全局异常捕获也是较为方便. 相关代码: ...