• Feeds

  • 从技术角度看Google Wave

    由于Google Wave还未上线,目前了解Google Wave最佳方式是观看youtube上的演示视频或者官方Lars Rasmussen写的Went Walkabout. Brought back Google Wave。本文重点从技术角度谈下对Wave体会。(注意此文部分链接由于GFW原因国内不能访问,并非写错地址。)

    一、总体概述

    Google Wave它并不仅是一个前端的产品,它的整个技术可以概括为3P组成

    Product

    http://wave.google.com/ Product可以理解成Wave前端,基于HTML 5构建,从演示看可以运行在 Google Chrome, Firefox, Safari上。

    Platform

    http://code.google.com/apis/wave/ Google Wave的开发平台,目前可以进行以下类别的开发

    • Extensions: 构建扩展,Google也称它为robot,比如在视频演示中的拼写检查、Google search集成、Twitter Wave扩展等。可以将各种互联网应用导入以wave document方式呈现及交互。
    • Embed: 嵌入,可以将wave嵌入到web应用,嵌入的Wave具备wave的基本特性,比如显示实时更改。视频中演示了将wave嵌入到blogger.com中作为一篇文章。

    Protocol

    http://www.waveprotocol.org/ 目前的Wave协议为基于XMPP core的一个扩展,但是它也只是一个扩展而已,并没要求双方服务器完全支持XMPP特性,就是Wave服务器并不需要支持XMPP的presence, message协议。(XMPP与Wave相关介绍可参看我的另外一篇文章Google Wave与XMPP)

    总的说来,Google Wave整个体系将会是开源的,就是说每个公司都可以架构自己的服务器及前端,如果拿邮件系统来比喻的话,Product等同邮件前端webmail, Platform就是webmail各种插件,protocol就是SMTP/POP3/IMAP协议。

    二、HTML 5 及 Google Web Toolkit

    html5

    上节介绍Product即前端是基于Google Web Toolkit来实现,印象深刻的有几点

    • Google Web Toolkit是用Java代码来直接写前端,并不需要直接编写JavaScript,可能会影响以后前端的开发方式。有点类似n年前当VB/Delphi出来之后, 程序员基本就放弃了使用Windows SDK去写普通界面
    • 一次编写,跨浏览器,可运行在Chrome, Firefox, Safari上
    • 特性丰富,在浏览器里面完成了很多一般认为是不可能在浏览器完成的任务,再看完演示之后,你可能不敢相信它是通过浏览器完成的。图片可以直接从桌面拉进conversation, 由于需要网络传输,对方会看到逐渐加载新拉进的图片,但也几乎是实时的。(由于HTML 5暂不支持drag and drop,暂时通过Google Gears完成。)
    • Google Web Toolkit同时支持iPhone, Android两种Mobile终端。据Lars Rasmussen介绍的经验,使用GWT增加Mobile支持只需要增加5%的开发工作量。
    • 因此Tim觉得browser based也是手机应用的一个方向,而不是写无法跨平台的各种终端本地native应用。一个证明就是Google latitude for iPhone 已经不考虑native实现了,而是采用支持HTML 5版本的Safari。同时Android平台也在尽量让浏览器支持这一特性,TechCrunch这篇文章介绍如下

    Thanks to HTML 5, Safari will be able to access a user’s location information and Latitude will be able to access that as well (provided the user gives permission). This will put it on par with what Google is doing in its browser for Android. (原文)

    • 那大部分Mobile应用,比如SNS平台,SNS扩展应用,电子商务应用(如淘宝)也完全可以基于浏览器去实现。

    三、Wave是一个Realtime应用平台

    由于传统场景比如多人实时编辑相关介绍已经较多,这里介绍些不同的思路,先看两个图片

    国际象棋

    Google_Wave_inbox_chess

    数独游戏

    sudoku

    这是一个运行在Wave中的Gadgets,需要说明的有

    • 只是2个普通的Gadgets, 但是Wave让它具备了多人参与及realtime显示的特性。
    • Gadget本身不需要考虑为Wave作任何改造

    因此个人认为这种技术可以更扩展应用在SNS扩展平台,Web Game等领域,软件的实时通讯功能由平台来提供,软件开发将会更简单,更容易实现大规模的部署及运营。

    中国共有多少台服务器-初略估算初窥

    自从看了《编程珠玑》第7章粗略估算之后就养成了一个奇怪的习惯,喜欢去计算身边的数字。比如一个城市共有多少台电梯,中国共有多少座桥梁等。

    粗略估算又叫费米近似(Fermi problem),比如坐广州到深圳的和谐号动车组时候就想,广深线每分钟进入火车站人流量有多大?这个似乎要请专业的调查公司才能得到结果,但实际上每个人几乎都可以算出来,尤其是程序员。

    1. 和谐号列车有8个车厢,1号和8号是头等车厢,一般坐不满 ,满员估算50人。除去5号餐车。因此共有5×100+100=600个座位。
    2. 15分钟一趟,每天从6点到22点,共发车18*(60/15)=72次
    3. 根据观察,广深线平时都有座位,但也不会太空。假如平均坐满70%座位的话,每天单向人流量为 72 * 600 * 70% = 30240 人
    4. 每分钟人流量为30240/18/60=28人
    5. 进一步考虑,需要几个售票窗口。估算平均每个乘客购票需要15秒,则至少7个窗口才不会引起排队现象。这跟平时观察一致,平时非高峰时刻如果窗口在5个以下会出现排长队现象。

    72法则

    72法则是会计上的一个经验。假设最初投资金额为100元,复息年利率9%(r%),利用“72法则”,将72除以9(增长率),得8(y),即需约8年时间,投资金额滚存至200元(两倍于100元),而准确需时为8.0432年。上面的r和y换成任何数字,只要相乘总数是72, 该法则都成立。

    72法则在初略估算中经常要用到,比如上面广深线的例子,假如客流月增长率3%, 则24月之后,广深线客流量会翻一番。(24*3=72)

    编程领域估算

    服务器编程领域经常面临预先估算,因为在程序开发前实际的场景并不存在。据去年《程序员》杂志介绍,奥运订票网站的瘫痪,是因为每秒请求数超过2200次。假如这个请求数都不能预先估算到的话,应该算是架构设计的失败。

    更多有趣例子及深入阅读

    • 中国共有多少台正在运行中的服务器?
    • 你有多少根头发?
    • 成年人体的骨头块数。
    • 孔子的出生年份(公元)

    更多有趣的例子可参看美国马里兰大学更多初略估算测试大全(英文)

    Google说,一个Datacenter就是一台计算机

    要实现一个典型的可扩展Web应用,有一大部分时间要花在Load balance, High availability, Consistent, Scalability等方面。这些都是有经验可循,但是通常无法简单重用。另外目前成熟的相关的部署经验都是孤立的,比如数据库,存储及文件系统,Web服务器都需要分别考虑。另外还有不少非核心的也经常需要用到,如cache, 全文检索, SSO、分布式计算如Hadoop等。所以大部分架构师的工作就是利用已有的经验,利用已有的硬件资源来对系统的负载进行一个平衡。

    由于这些组合技术含量并不是特别高,而且也无大的新技术来替代,所以大部分网站架构设计师的工作和10年前没什么区别,而且更糟糕的是,这些重复工作无法避免。新的一个应用,由于数据库表设计改了,所以所有的工作又得重来一次。因此是改变现状的时候了。

    最近,Google的Luiz André Barroso and Urs Hölzle写了一个paper, The Datacenter as a Computer – An Introduction to the Design of Warehouse-Scale Machines (PDF) 提出可以将一个Datacenter视为一台计算机。
    warehouse-scale-computer

    目前的操作系统在管理单机资源方面已经做到了相当完善,但还没有简单易用的软件体系将一Datacenter中的资源合理分配及利用,WSC也许是一个方向。Paper中比较了在WSC中,使用各种资源Latency, Bandwidth, Capacity的区别。
    wsc-latency

    因此,将来的程序可能会是这样,由几个简单的PHP组成, 运行在一个Datacenter上,使用的内存可大可小,可以从1M到100G;使用的存储可以无限,使用的数据库无需关心切分逻辑。程序员需要做的工 作,只需把PHP写好。其他的工作,通过一个Datacenter OS来完成。与Google AppEngine的区别是,这个OS是Open的。

    作者在上述paper中呼吁计算机科学家应该加强WSC这一新兴领域的研究,因此如果把LAMP这一记组合拳及相关经验理解为网站架构设计的话,或许不久的几年之后,这一定义将重新改写。我的Google Reader里面有上百篇加星的有关LAMP架构经验的文章,那时,它们对于大部分架构设计师不再具有借鉴意义。

    Google的paper最早是从The datacenter is the new mainframeThe Datacenter as a computer看到的。