微软Cosmos团队发了一篇论文,有人在我星球花钱请我解读一下。文章前面两三段是废话,着急的可以跳过。
我这两年对大数据领域比较懈怠,新东西工作需要就研究不需要就懒得去主动学习。我的星球也是一个放养状态,没强烈运营,算是给了需要并愿意付钱让我办事的窗口吧。

Cosmos团队今年的VLDB论文发出来不久我读了,但是当时没写什么公众号文章解读。原因也差不多,做大数据太久,提不起兴趣。言归正传,收了几块钱,总是要办事的。
如果你完全不知道Cosmos是什么,这篇论文读读还是可以给与一个比较全面的了解。问题是,所有的论文对码农这种生物来说都是个挑战。
论文类似化妆以后的小姐姐,各个都看上去很美,但是鬼知道卸妆以后到底是不是真美。有能力分辨出来化妆之下的真容的,只可能自己也是化妆高手了。没亲自写过几篇论文的,缺乏这种能力。这是读Cosmos团队这篇论文的问题。你也不知道对方说的到底是真好还是假好。我就以我自己的理解简单讲讲Cosmos。
Cosmos首先是个存储系统。存储系统是俄罗斯人写的,第一任作者最后去了谷歌。整个系统基本上抄袭了谷歌GFS的思想。改动不大。记得当初onboard新人的时候,就让大家去读谷歌的GFS论文。
文件系统的code写的还是很牛逼的,里面大量用了lock-free的数据结构和事件驱动的编程。Cosmos文件系统被Azure克隆了一份,魔改之后成为了Azure Blob Store,这也为后面的事情埋下了伏笔。
Cosmos的执行层面最初用了Dryad,由微软硅谷研究院Michael Isard写的。Michael Isard有一段时间和Bing混在一起。后来又闹翻了。除开政治上的原因,也有做研究的人的天然缺陷。
Dryad的代码不是工业级别的。微软研究院的人经常干的事情是把一个不成熟的产品交给产品团队,然后自己就拍拍屁股走了,后续产品的扩展升级维护修bug等等,都觉得不是自己的事情。然后功劳自己要拿大头。而产品团队对这种行为又非常的不爽,所以矛盾频出。
Dryad后来也在Cosmos团队经历了魔改,最终能够稳定运行支持几万几十万的节点同时运行。这方面就Cosmos2012年的水平来说,开源的产品们2021年也没达到同样的高度。当然,有没有必要到这个数量级是另外一个问题。
上面运行的开发语言叫SCOPE,这又是一款来源于微软研究院的产品,最初开发者是Bill Ramsey。这老兄智商很高,感觉很好。但是做产品很操蛋,写代码各种各样的hack。
举个真实的例子。SCOPE里面要支持UNION ALL。这老兄写的Parser是怎么做的呢,先找到ALL,把0到ALL-2的token作为一句SQL ALL+1到结尾的作为另外一句SQL,没有任何error checking。所以如果你写了A ONION ALL B,系统也认为这是UNION ALL, 没问题不报错。
然而不可否认SCOPE的设计理念很先进,同时代的Pig HIVE和它一比,像是傻逼加傻逼的感觉。微软内部的人用过SCOPE的大概能够理解一个语言好用是什么概念。开源世界要想找个类似的产品很难。一定要说的话MLSQL有那么一点味道,但还是差很多。
后来同样从微软研究院来的周靖人带来了optimizer,用了SQL-Server的optimizer的引擎,自己写了rule,具体情况可以去看ICDE的论文。这让SCOPE整个上了一个档次。
再后来Bill Ramsey下台了。一半是政治斗争一半也是这兄弟自己干活太毛糙,别人修他的bug永远都修不完,他还在不停的产出一坨又一坨的bug。周靖人接管了整个团队,重写了Comipler和code-gen,SCOPE作为一个产品迎来了一段高速发展的时期。
Cosmos当然不仅仅有这些,还有Resource Manager,这个币YARN早,有前端服务器,有IDE等等,在微软内部是一个很庞大的体系。
时间来到了2013年夏天,Steve Ballmer做了一次全公司范围的re-org。Cosmos被从Bing挪出去,和SQL Server等合并在了一起。团队也迎来了一位新大佬 Raghu Ramakrishnam。
这位大佬是database圈的一座大山头,早年在威斯康辛大学工作,是威斯康辛做DB的三座大山之一。后来去了日薄西山的雅虎研究院做副院长。雅虎关闭研究院以后又去了微软,最后在这次reorg中接管了整个Cosmos团队。
Raghu对database的贡献很多,最著名的有DataLog以及BIRCH算法等。他和他学生写的database教科书也是美国本科的经典教程。他还曾经日复一日在SIGMOD/VLDB/ICDE布道年轻学生学者,我曾经听过他的报告讲述他自己当年怎么样打拼,一边对付无良老板,一边睡在实验室挤时间干自己事情的经历被打鸡血。

然而Raghu的到来对Cosmos的破坏性是巨大的。在2013年之前有过几次想离开Cosmos的念头,但是由于这是我第一份工作,又很想做好这个产品,各种原因之下都没走。但是Raghu的到来之后,我就想走了。
Raghu想做的事情是把Cosmos变成一个外部服务卖钱。其中也夹带了一些私货。而这里论文并没有交代清楚,所以对理解论文一部分内容是有困难的。
Raghu主要是做了这样一些事情。
第一,废掉了SCOPE,而改用一个新的U-SQL的语言。U-SQL后续发展证明了这是大大的一坨屎。其实不用证明,在项目出来的第一天我就看到未来就是一坨屎。然而奇怪的就在于有无数人迎奉,没什么人反对。这就跟Windows8要去掉开始菜单一样,无数人知道这很傻逼,但是老大觉得好,大家就硬推一样。神奇的微软。这是我决定离开微软的最主要原因。如果未来有坨屎,留着毫无意义。
第二是废掉了自己的RM,要改用YARN。这个花费了大量的人力物力,好几年的时间。原因是YARN的成熟度不够,远无力支持几万十几万台机器的管理。最后通过YARN federation解决问题。这个决定对不对,我不好说。

第三是废掉了自己的Job manager,改用开源的TEZ。这个决定耗费的时间更久,2020年前后才基本上替换完成。从现在来看,这个决定看起来更傻逼一些。

第四是重新在Azure blob store上做了一套存储叫做Azure Data Lake Store,支持HDFS API。让Cosmos自己的storage系统作为cache。

当然还有很多其他改动。这几个是比较大的,这就是后来轰轰烈烈的Azure Data Lake的产品。最后好像onboard了沃尔玛一个客户,不久之后U-SQL就废了。
论文里面并没有掰开来讨论这段失败的历史,而是把这些东西和其他东西放在一起,作为成功的一部分。这就是化妆术了。Azure Data Lake以Raghu下台,产品退出历史舞台结束。老的Cosmos和SCOPE却还在服务内部客户。
我在2014年离开了这个团队。后续发生的事情,就没有我人在里头那么清楚了。除了这些事情以外。比较重要的是Cosmos开始支持开源的东西。比如说能够去读开源的Parquet文件。又比如说支持Spark。能够顺利跑Spark是因为现在的resource manager已经换成了YARN。但是Cosmos应该不应该去支持跑Spark是另外一个问题了。

论文里面还比较了SCOPE和Spark的job各自的优劣,以及提出将来要支持Python等等。这些细节性的东西就不一一展开了。
如果要我来评价的话,我觉得2014年以前,Cosmos团队政治斗争虽然很严重,但是创新也同样很多。整个产品在很多方面还是领先业界同类开源产品很多的。
2014年以后做的事情,就完全不一样了。创新就是瞎创新,没什么特别值得骄傲的事情。而另外一方面则是和开源产品整合,花费大量人力物力,和很多很多年的时间,就是为了能够让一部分开源产品替换自己已经发展的比开源还要成熟的组件。这到底是对还是错,呵呵。最起码的,我能够看到的那些最主要的创新,在2014年以前都发生的差不多了。

这就是我对这篇论文的解读。
继续阅读
阅读原文