写在前面
随着社交网络、移动互联网、电子商务等技术的不断发展,互联网的使用者贡献了越来越多的内容。为了处理这些内容,每个互联网公司在后端都有一套成熟的分布式系统用于数据的存储、计算以及价值提取。Google 是全球最大的互联网公司,也是在分布式技术上相对成熟的公司,其公布的Google分布式文件系统GFS、分布式计算系统MapReduce、分布式表格系统Bigtable都成为业界竞相模仿的对象,最近公布的全球数据库Spanner更是能够支持分布在世界各地上百个数据中心的上百万台服务器。Google的核心技术正是后端这些处理海量数据的分布式系统。和Google类似,国外的亚马逊、微软以及国内互联网三巨头阿里巴巴、百度和腾讯的核心技术也是其后端的海量数据处理系统。
分布式存储和当今同样备受关注的云存储和大数据又是什么关系呢?分布式存储是基础,云存储和大数据是构建在分布式存储之上的应用。移动终端的计算能力和存储空间有限,而且有在多个设备之间共享资源的强烈的需求,这就使得网盘、相册等云存储应用很快流行起来。然而,万变不离其宗,云存储的核心还是后端的大规模分布式存储系统。大数据则更近一步,不仅需要存储海量数据,还需要通过合适的计算框架或者工具对这些数据进行分析,抽取其中有价值的部分。如果没有分布式存储,便谈不上对大数据进行分析。仔细分析还会发现,分布式存储技术是互联网后端架构的“九阳神功”,掌握了这项技能,以后理解其他技术的本质会变得非常容易。
在这里,小编为大家推荐一篇前阿里高级技术专家整理撰写的,系统讲解构建大规模存储系统的核心技术和原理,详细分析Google、Amazon、Microsoft和阿里巴巴的大规模分布式存储系统的原理的学习秘籍。
本书的目标是介绍互联网公司的大规模分布式存储系统,共分为四篇:
基础篇
基础知识包含两个部分:单机存储系统以及分布式系统。其中,单机存储系统的理论基础是数据库技术,包括数据模型、事务与并发控制、故障恢复、存储引擎、数据压缩等;分布式系统涉及数据分布、复制、一致性、容错、可扩展性等分布式技术。另外,分布式存储系统工程师还需要一项基础训练, 即性能预估,因此,基础篇也会顺带介绍硬件基础知识以及性能预估方法。
本章首先介绍CPU、I0、网络等硬件基础知识及性能参数,接着介绍主流的单机存储引擎。其中,哈希存储引擎是哈希表的持久化实现,B树存储引擎是B树的持久化实现,而LSM树(LogStructureMergeTree)存储引擎采用批量转储技术来避免磁盘随机写人。最后,介绍关系数据库理论基础,包括事务、并发控制、故障恢复、数据压缩等。
分布式系统中有两个重要的协议,包括Paxos选举协议以及两阶段提交协议。Paxos协议用于多个节点之间达成一致,往往用于实现总控节点选举。两阶段提交协议用于保证跨多个节点操作的原子性,这些操作要么全部成功,要么全部失败。理解了这两个分布式协议之后,学习其他分布式协议会变得相当容易。
范型篇
这部分内容将介绍Google、亚马逊、微软、阿里巴巴等各大互联网公司的大规模分布式存储系统,分为四章:分布式文件系统、分布式键值系统、分布式表格系统以及分布式数据库。
本章首先重点介绍GFS的内部实现机制,接着介绍TFS和Face book Haystack的内部实现。最后,本章还会简单介绍内容分发网络( Content Delivery Network, CDN )技术,这种技术能够将图像、视频之类的数据缓存在离用户“最近”的网络节点上,从而降低访问延时,节省带宽。
分布式键值模型可以看成是分布式表格模型的一种特例。然而,由于它只支持针对单个key-value的增、删、查、改操作,因此,适用之前提到的哈希分布算法。
Amazon Dynamo是分布式键值系统,最初用于支持购物车应用。Dynamo将很多分布式技术融合到-一个系统内,学习Dynamo的设计对理解分布式系统的理论很有帮助。当然,这个系统的主要价值在于学术层面,从工程的角度看,Dynamo 牺牲了一致性,却没有换来什么好处,不适合直接模仿。
本章首先详细介绍Bigtable的架构及实现,接着分析Megastore的架构,最后介绍Microsoft Azure Storage的架构。
关系数据库理论汇集了计算机科学家几十年的智慧,Oracle、 Microsoft SQL Server、MySQL 等关系数据库系统广泛应用在各行各业中。可以说,没有关系数据库,就没有今天的IT或者互联网行业。然而,关系数据库设计之初并没有预见到IT行业发展如此之快,总是假设系统运行在单机这一封闭系统上。
本章首先介绍数据库中间层架构,接着介绍MicrosoftSQLAzure,最后介绍Google Spanner。
实践篇
这部分内容将以笔者在阿里巴巴开发的分布式数据库OceanBase为例详细介绍分布式数据库内部实现以及实践过程中的经验总结。
从模块划分的角度看,OceanBase 可以划分为四个模块:主控服务器RootServer、更新服务器UpdateServer、基线数据服务器ChunkServer以及合并服务器MergeServer。OceanBase系统内部按照时间线将数据划分为基线数据和增量数据,基线数据是只读的,所有的修改更新到增量数据中,系统内部通过合并操作定期将增量数据融合到基线数据中。本章介绍OceanBase系统的设计思路和整体架构。
]
分布式存储引擎层包含三个模块: RootServer、 UpdateServer 以及ChunkServer。其中,RootServer 用于整体控制,实现子表分布、副本复制、负载均衡、机器管理以及Schema管理; UpdateServer 用于存储增量数据,数据结构为一个内存B树,并通过主备实时同步实现高可用,另外,UpdateServer的网络框架也经过专门的优化;ChunkServer用于存储基线数据,基线数据按照主键有序划分为一个个子表,每个子表在ChunkServer上存储了一个或者多个SSTable,另外,定期合并和数据分发的主要逻辑也由ChunkServer实现。
数据库功能层构建在分布式存储引擎层之上,实现完整的关系数据库功能。对于使用者来说,OceanBase与MySQL数据库并没有什么区别,可以通过MySQL客户端连接OceanBase,也可以在程序中通过JDBC/ODBC操作OceanBase。
OceanBase的MergeServer模块支持MySQL协议,能够将其中的SQL请求解析出来,并转化为OceanBase系统的内部调用。
OceanBase系统一直在不断演化,需要在代码不断变化的过程中保持系统的稳定性。因此,合理的质量保证体系关乎系统的成败。为了保证系统质量,OceanBase 做了大量工作,在RD (指开发工程师)开发、QA (指测试工程师)测试、上线试运行各个阶段对系统质量把关。
专题篇
云存储和大数据是近年来兴起的两大热门领域,其底层都依赖分布式存储技术,这部分将简单介绍这两方面的基础知识。
云存储是云计算的存储部分,并且可以作为一种服务提供给用户,任何经过授权的合法用户都可以通过网络访问云存储,享受云存储带来的便利。云存储是随着互联网和云计算逐步发展起来的,从大规模系统软件架构的角度看,云计算后端架构的难点集中在云存储。本章首先对云存储做-个初步的介绍,接着介绍Amazon、Google 以及Microsoft 的云平台整体架构。
随着云时代的来临,大数据(Big Data)也吸引了越来越多的关注。2012年7月,阿里巴巴数据公司成立并设立了一个全新的岗位:首席数据官( Chief Data Oficer,CDO),由此可见数据在未来的价值。这也意味着与“大数据存储、计算和价值提取"相关的技术岗位将会得更加重要。
本章首先介绍大数据的概念以及大数据计算平台,接着介绍MapReduce离线处理系统,最后,介绍流式计算系统和实时分析系统。
读者对象
本书适合互联网行业或者其他从事分布式系统实践的工程人员,也适合大学高年级本科生和研究生作为分布式系统或者云计算相关课程的参考书籍。阅读本书之前,建议首先理解分布式系统和数据库相关基础理论,接着阅读第一篇。 如果对各个互联网公司的系统架构感兴趣,可以选择阅读第二篇的某些章节;如果对阿里巴巴OceanBase的架构设计和实现感兴趣,可以顺序阅读第三篇。最后,如果对云存储或者大数据感兴趣,可以选择阅读第四篇的某个章节。