星期四, 十一月 23, 2006

最近值得推荐的两篇文章《Map Reduce - the Free Lunch is not over?》以及《函数式编程另类指南》

MapReduce

分布是Web应用的必然发展方向,当你的网站用户数量在10万内,你可以不懂什么叫分布,而当你的网站用户数量超过百万数量级,你不可能不懂什么叫做分布。

Google 的使命是整合全球信息,使人人皆可访问并从中受益。所以Google比一般网站更早遭遇了只有分布才能存储的数据,这导致了Google File System的诞生。紧接着他们遇到的问题是怎么才能让公司所有的程序员都学会些分布计算的程序,因为他们用Google File System存储的海量数据分析起来需要的运算量也是惊人的。这就催生了MapReduce技术,通过把海量数据集的常见操作抽象为Map和Reduce两种集合操作,大大简化了程序员编写分布计算程序的难度。

很早以前我翻译了Wiki上的MapReduce文档,可是很多人说还是看不懂。现在好了,孟岩写了一篇分析深入浅出的文章,把这个东西讲解得很清晰。请看《Map Reduce - the Free Lunch is not over?

函数式编程

MapReduce论文中,没有忘记提及历史悠久的函数式编程给Google的天才们带来的启示:“我们的灵感来自lisp和其他函数式编程语言中的古老的映射和化简操作”( "Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional languages.")

由于中国教育的实用主义倾向,很多从业多年的程序员都有可能对函数式编程一无所知。当然这也跟整个计算机史的一些偶然和必然事件相关,这里就不赘述了。

或者我们可以说,函数式编程的思想更接近于推理、抽象等等人类思维逻辑的方式,而图灵机(那个牛比的无限纸带模型,想想自动织布机,其实就是那东西)更接近一个物理可实现的计算模型。

我们现行的计算机的原理就来自于图灵机,所以过程式的语言跟机器语言有比较简单的对应关系。而函数式语言在现行计算机上面的实现,实际上是一个计算模型的转换。这造成了函数式语言相对过程语言的效率低下,这也就限制了函数式语言在微型机上面的应用。

然而,随着微机平台运算能力的发展,特别是多核等技术的出现。如何提高微型机上应用程序的并行能力等等需求出现了。

有趣的地方正在于此,不管是Web平台还是客户端应用程序开发,趋势都是一样的并行!!!

这正是我认为函数式编程将越来越热的原因,至于函数式编程为什么有更好的并行特性,以及历史和特点等等的信息,还是去看《函数式编程另类指南》吧。这么好的文章,我无论如何是写不出来的。

标签: , , ,



星期日, 十月 15, 2006

Gdrive客户端泄露带来了什么信息?

10月13日,Google Blogoscoped的Philipp Lenssen发布消息《Google Gdrive Client Leaked(Google Gdrive客户端泄露)》。这让每个人关心Gdrive的人都感到兴奋,在前面讨论Foldershare的文章里,我就表达过对目前Gdrive相关信息太少的遗憾。

那么就让我们看看Philipp带给了我什么。
首先是Platypus(鸭嘴兽,Gdrive客户端的名字)运行的截图:
首先我们发现Philipp使用Windows,其次我们发现Philipp的任务栏在左边,他的机器上有WAMP,Win Media Encoder,BrowserPool,Audacity,他用德语……

Oh,I am sorry。我们不是在做狗仔队啊,我们是在分析Gdrive。

好,首先我们发现这似乎是第一个有吉祥物图标的Google服务(也可能Google习惯在内部测试的时候用吉祥物标志,Who知道呢?),然后我们发现它的使用方式看来跟Foldershare很像,都是一个需要登陆的客户端,在托盘显示一个图标。

然后我们看下Platypus的帮助(Windows版),

如何进入我的Gdrive?

双击你的任务栏托盘里面的 图标,或者访问“我的电脑”里面的G:盘(这点颇为有趣,一定是G:盘么?)。

你的G:盘上的每个顶级目录都对应于Platypus的共享。缺省情况下,你只能看到你私有的Platypus共享。它的名字与你的LDAP用户名相同。

如何挂接其他的共享?

右键点击Platypus的托盘图标,选择“Connect Share”(连接共享)菜单。你可以输入你可以访问的其他Platypus用户的名字(如,jeske),或者公开的共享的名字(入,test1)。

在你挂接一个共享后,Platypus会开始在共享和你的硬盘之间进行同步,下载它包含的所有文件。Platypus会在后台进行同步,所以你可以如常的继续使用你的电脑。

如果你想为你的团队,邮件留言板,创建新的共享。指定一个共享名,指定读写权限即可。

如何在Web上访问我的文件?

列目录: http://platypus.corp.google.com/sharename
特定文件: http://platypus.corp.google.com/sharename/foldername/filename

如何和其他的Googler共享文件?

访问Web界面,选择设定页。

如何从Platypus共享中添加/修改/删除/文件和目录?

你私人共享对应的目录和和你电脑里面的其他目录没有什么区别,你可以同等对待。你连到网络的时候,你的文件的改变会自动发送给服务器。如果你在离线情况下改变它们,你下次重新连接的时候服务器会自动更新。

如何帮助改进platypus?我有20%的时间可以用(Google员工的20%兴趣时间)。

好!我们非常欢迎您在工程,界面设计和市场方面的帮助。写信给Justin如果你可以做一些志愿工作。或者你可以通过使用和提交bug的方式帮助platypus进步。

我可以在platypus共享内保存什么数据?

我们鼓励用户保存任何文件,除了敏感数据以及与用户协议相矛盾的文件以外的任何文件,包括你的Office文档,照片,个人笔记,。


Linux版本的帮助除了一些操作细节以外,大同小异,这里就不详述了。最值得一提的是,我们发现从操作方法到运行模式等等,platypus和Foldershare惊人的相似。

然后,我们看看Philipp提供的文件列表:
我们发现,其中有7个Jar文件:
  • commons-codec.jar
  • commons-logging.jar
  • httpclient.jar
  • jlansrv.jar
  • program.jar
  • sqlite.jar
  • util.concurrent-1.3.2.jar
5个dll文件:
  • sqlite_jni.dll
  • swt-win32-213.dll
  • TrayIcon12.dll
  • win32NetBios.dll
  • win32Utils.dll
5个exe文件:
  • autoupdater.exe
  • devset.exe
  • platypus.exe
  • processcleanup.exe
  • uninst.exe
3个vbs文件:
  • configure_adapters.vbs
  • exec.vbs
  • modify_fw.vbs
其中sqlite_jni.dll是sqlite的java本地化调用接口dll,swt-win32-213.dll是swt的Java本地化调用接口dll。(sqlite是广泛使用的一种嵌入数据库,swt是Eclipse的界面库,原由IBM开发,后开源捐献给Eclipse组织)

具体看那些Jar文件我们发现,他们涉及到了国际化编码、日志、http协议通信、数据库等等。而同时这个客户端是跨平台的,所以我们可以确定的说,这个产品主要是用Java写的。program.jar应该就是主程序。platypus.exe应该是一个本地包装。TrayIcon12.dll、win32NetBios.dll和win32Utils.dll应该是本地化的一些补充(因为在一些细节上,java跨平台没问题,细节却不够完美,或效率不足)。*.vbs文件是一些事务性的脚本,在linux版本上应该是shell脚本或者py脚本(可惜linux版本没有泄露,所以我们无法确切的知道)。

标签: , , , , ,



星期一, 九月 25, 2006

google发布bigtable论文

8个人开发了2年半,现在bigtable的神秘面纱终于揭开了。google发布了一篇相当详细的论文“Bigtable: A Distributed Storage System for Structured Data ”(pdf版本)。美人他爹彼岸正在翻译这篇论文,点击查看译文

这篇论文内容空前详细,包括bigtable的目的,数据模型,一些实例api调用的代码,性能参数,还有和其他相关产品的比较。

如标题所述 ,bigtable是一个用来存储结构数据的分布式存储系统。与平时常用的数据库不同,bigtable并非一个支持sql语言的关系数据库,而是map方式的,列导向的数据库(一列数据连续存储)。bigtable为读进行了优化,对数据库的读取访问远远大于写入是互联网服务的重要特点。bigtable的时间特性也颇为引人注目,bigtable中数据都带有timestamp字段,可以保存不同时间的多个版本。

论文中提到,google已经有6个服务已经运行于bigtable上了。分别是:Google Analytics,Google Earth,Personalized Search,Google Finance, Orkut,Writely。这里面我觉得最值得注意的是Writely和Analytics,这两个都是google收购来的服务,通过一段时间的改造,已经重组了其架构,使他们成为可以承担海量负荷的大型服务。这似乎也标志了google对于Writely的重视。

特别值得注意的是,这6个服务都是恰好带有明显时间特性的服务,借助bigtable的时间特性,可谓如虎添翼。最近Google Earth也增加了时间的标签。将来,bigtable必将用于更多的地方,事实上,时间标签对于web服务是相当重要的特征,但由于数据量太大,保存困难,限制了很多应用的发展,bigtable应用于wiki或是archive.org之类的服务的时候,必将势如破竹。

以前我们分析过,google通过收购和内部创业等方式获得新型服务,然后通过强大的基础技术改造这些服务,使其成为高可用性,高负荷高稳定性的服务。这或许就是google未来的发展方向。google通过一系列的包装,使分布式数据库这样复杂的东西可以被简单的api调用,这无疑将大大提高google内部各小组的开发能力。

ps:感谢youfeng及时提供这个消息。

标签: , ,