1. "Web Search for a Planet: the Google Cluster Architecture", written by L. A. Barroso, J. Dean, and U. Holzle.
小水滴的推荐理由:这是一篇阐述Google搜索引擎架构的文章。虽然目前Google已研发了适用于不同应用场景的计算体系结构,但是,在搜索引擎和大数据处理方面,这篇文章所描述的体系结构仍然适用,并且被众多公司和科研机构使用。这篇文章的主要的观点是:(1)Google使用软件系统来实现系统的高可靠性,所以,Google可以使用大量的、价格相对低廉的普通计算机(Commodity-class PCs)搭建集群系统;(2)Google更注重于系统的吞吐率(Throughput)而非响应时间(Response Time)。因为所有的请求都是并行处理的,响应时间相对较短。
2. "The Google File System", written by S. Ghemawat, H. Gobioff, S. T. Leung.
小水滴的推荐理由:这是一篇阐述Google分布式文件系统的文章。在Google整个分布式系统中,该分布式文件系统向上层服务提供了最基础的、最核心的支持:可靠的数据服务。与单机文件系统不同的是,分布式文件系统更加侧重于服务的吞吐率、数据可靠性、容错性、一致性等问题。因为,Google使用的是由相对廉价的计算机组成的集群系统,数据的可靠性和容错性尤为重要。
3. "MapReduce: Simplified Data Processing on Large Clusters", written by J. Dean, S. Ghemawat.
小水滴的推荐理由:这是一篇阐述Google搭建在集群系统上的计算平台。Map和Reduce源于函数式编程中的map和reduce两个函数的概念:给定一个集合,map应用于集合中的每一个元素,而reduce汇总结果。MapReduce是众多并行/分布式计算平台中的一种。如此篇文章所展示的,在Google的一些应用场景下,MapReduce有着非常好的表现。然而,在另一些应用场景下,MapReduce并不适用,这也是过去十几年科研工作者着重研究的内容和重点,即:如何改良MapReduce,使之能应用于更加广泛的应用场景。
4. "The Chubby Lock Service for Loosely-coupled Distributed Systems", written by M. Burrows.
小水滴的推荐理由:Chubby为Google内部分布式系统提供锁服务。因为,Google采用的是大规模的,廉价计算机组成的分布式系统,所以,Chubby的设计主要考虑的是系统的可靠性(Reliability和Availability),而不是性能(Performance)。Chubby实际上是一个客户端-服务器端(Client-Server Pattern)的设计模式。在服务器端,一个Chubby Cell维护5个备份,客户端只和Master交互通信。当一个Master失败后,另一个Master会被选中,继续提供服务。
5. "Bigtable: A Distributed Storage System for Structured Data", written by F. Chang, J. Dean, S. Ghemawat, W. C. Hsieh, D. A. Wallach, M. Burrows, T. Chandra, A. Fikes, R. Gruber.
小水滴的推荐理由:Bigtable是Google的一个分布式存储系统。Google使用它支持Google Earth,Google Finance等众多服务。因为Bigtable实际上是一个超级大的map,所以,除了支持海量存储以外,Bigtable还为这些数据建立了索引,提供快速高效的查询服务。Web数据索引(Web Indexing)就是此篇文章着重讲解的一个例子。从逻辑上讲,Bigtable建立在Google File System和Chubby之上。Bigtable使用Google File System存储数据(Data Blocks),并在其基础上建立索引。Bigtable还使用了Chubby来确保数据的一致性。
6. "Spanner: Google's Globally-Distributed Database", written by J. C. Corbett, J. Dean, M. Epstein, A. Fikes, C. Frost, J. Furman, S. Ghemawat, A. Gubarev, C. Heiser, P. Hochschild, W. Hsieh, S. Kanthak, E. Kogan, H. Li, A. Lloyd, S. Melnik, D. Mwaura, D. Nagle, S. Quinlan, R. Rao, L. Rolig, Y. Saito, M Szymaniak, C. Taylor, R. Wang, D. WOodford.
小水滴的推荐理由:Spanner是Google的一个全球分布式数据库。与Bigtable相比,Spanner提供了强一致性(Strong Consistency)和一些数据库的特性(事务处理(Transaction Processing),SQL查询(SQL-based Queries))。Spanner最初的设计目的是为了支撑Google广告业务,随后,一些其他的业务也在慢慢的转移到Spanner上。
7. "F1 - The Fault-Tolerant Distributed RDBMS Supporting Google's Ad Business", written by J. Shute, M. Oancea, S. Ellner, B. Handy, E. Rollins, B. Samwel, R. Vingralek, C. Whipkey, X. Chen, B. Jegerlehner, K. Littlefield, P. Tong.
小水滴的推荐理由:广告业务是Google最为核心的业务之一,是Google的主要收入来源。Google开发了F1系统用于支撑其广告业务。F1是一个分布式关系型数据库,建立于Spanner系统之上。F1的设计目的是为了同时提供高扩展性、高可用性和高一致性(Scalability, Availability, Consistency, and Usability)。虽然,这些设计目标往往是相互矛盾的,但是,F1采用了多种技术优化了其内部系统,以同时达到上述四项目标。
8. "An in-depth look at Google's first Tensor Processing Unit(TPU)", written by K. Sato, C. Young, D. Patterson.
小水滴的推荐理由:Tensor Processing Unit (TPU)是Google在神经网络(Neural Network)计算方面的一项重要的产品。据测试,在性能方面,TPU比现代CPU快15-30倍。在性能能量消耗比方面,TPU高于现代GPU 30-80倍。TPU是如何做到的呢?首先,与通用型CPU和GPU不同的是,TPU是专用于神经网络计算的集成电路(是一种Application-Specific Integrated Circuit),它不能用于通用型计算。针对神经网络的计算流程,TPU将在通常情况下的多个乘法操作转化成为一个矩阵乘法操作。因为TPU采用的是复杂型指令集(Complex Instruction Set Computer-CISC),一个矩阵的操作可在一个时钟周期(A Single Clock Cycle)内完成。另外,TPU还做了一些数据访问的优化,例如,当一份数据从寄存器读取出来后,该数据可被多个操作重复使用。因此,TPU获得了极大的性能提升。
9. "TensorFlow: A System for Large-scale Machine Learning", written by M. Abadi, P. Barham, J. Chen, Z. Chen, A. Davis, J. Dean, M. Devin, S. Ghemawat, G. Irving, M. Isard, M. Kudlur, J. Levenberg, R. Monga, S. Moore, D. G. Murray, B. Steiner, P. Tucker, V. Vasudevan, P. Warden, M. Wicke, Y. Yu, X. Zheng.
小水滴的推荐理由:Google Brain是Google在人工智能方面的一个重要研究项目,而TensorFlow为该项目提供了一个大规模机器学习(Large-scale Machine Learning)的计算平台。TensorFlow是一个异构的计算环境(Heterogeneous Computing Environment);计算任务可以在多核服务器,GPU设备,Tensor Processing Units (TPUs)等环境中运行。TensorFlow基于数据驱动的设计理念;计算任务由一张有向数据流图(Dataflow Graph)表达。在图中流动的数据被称为Tensor;Tensor实际上是一个高维的数组或者矩阵,具体作用于这个数组或者矩阵的实现(Implementation)被称为Kernel。除了提供高性能和高灵活性以外,TensorFlow极大的简化了机器学习方面项目开发的难度。因为TensorFlow有着统一的接口,项目可以从一个TensorFlow平台移植到另一个。
10. "Large-scale Cluster Management at Google with Borg", written by A. Verma, L. Pedrosa, M. R. Korupolu, D. Oppenheimer, E. Tune, J. Wilkes.
小水滴的推荐理由:Google的集群系统支撑着众多内部服务。在这些服务中,有的仅仅瞬时运行,响应面向用户请求的服务;有的长时间运行,作为内部基础服务(Internal Infrastructure Service)。Borg并不是唯一的集群管理系统,但是,Borg是为数不多的,能有效管理成千上万个节点的集群管理系统。并且,Borg能提供高可靠性(High Reliability and Availability);它将资源管理(Resource Management)和失败恢复(Failure Recovery)的细节从系统中分离出来,这使得开发人员更加专注于业务服务的开发。
11. "Google's C/C++ Toolchain for Smart Handheld Devices", written by D. Kwan, J. Yu, B. Janakiraman.
小水滴的推荐理由:这是一篇短文章。小水滴推荐这篇文章的主要目的是为了给读者一些启发。平时使用的编译器(Compiler),链接器(Linker)等Toolchain工具不仅仅可用于生成可执行的二进制代码(Code Generation)和代码性能优化(Performance Improvement);它还能完成很多其他功能。例如,本篇文章提到的节能(Power Saving),代码安全(Code Security),和优化开发方式(Productivity Improvement)等。