现在计算机业界正在进入一个“海量数据”(Big Data)时代,分布式计算技术是存储和处理海量数据的基础,里面有很多有趣的问题值得探讨。从体系结构上说,海量数据系统可以分为三个层次:
- 最底层是一些分布式系统的基础架构,如 RPC,同步机制,组管理协议等,这些技术无论是分布式存储还是分布式计算系统都需要依赖。
- 处于中间的是分布式存储系统,这又可以分为两大类:分布式数据库和分布式文件系统。数据库用于存储结构化的数据,而文件系统用于存储非结构化的数据。
- 在前面两个层次基础之上,可以构建一个分布式的数据处理和管理系统,例如搜索引擎、数据挖掘工具等。
下面的主题列表包含了我们目前所知的相关技术以及资料,其中除了上面说的三个方面,还有传统的关系数据库技术、分布式计算的基本理论。通过学习关系数据库的设计与实现,可以了解到本地存储的很多技术,还可以与现在的 NoSQL 数据库等新技术作对比,从而加深对新技术的理解。分布式计算理论是基本功,我们在做技术的同时,也需要加深对理论的理解。
目录 |
分布式系统基础组件
RPC
- Thrift
- "Thrift: Scalable Cross-Language Services Implementation"
- Thrift 主页
- SEDA,论文 "SEDA: An Architecture for Well-Conditioned, Scalable Internet Services"
message queue
- RabbitMQ: http://www.rabbitmq.com/
- ZeroMQ: http://www.zeromq.org/
- celery: http://celeryq.org/
failure detection
- “The φ Accrual Failure Detector”
分布式系统中的一致性
- "Principles of Computer Systems Design" 第十章(可以到MIT 网站下载)
- 虚拟同步(virtual synchrony)系统
- K.P. Birman 的两篇论文,讲述虚拟同步的概念的实现方法
- Reliable Communication in the Presence of Failures
- Exploiting virtual synchrony in distributed systems
- 扩展的虚拟同步(Extended Virtual Synchrony),也称为 TOTEM 协议
- Y. Amir 等,"The Totem Single Ring Ordering and Membership Protocol"
- L.E. Moser 等,"Extended Virtual Synchrony"
- Corosync 是 TOTEM 协议的一个开源实现,当前 RedHat 等提供的企业集群使用它作为一致性协议。
- Corosync 的相关资料 http://en.wikipedia.org/wiki/Corosync_(project)
- K.P. Birman 的两篇论文,讲述虚拟同步的概念的实现方法
- 采用类似 Paxos 算法的系统
- Leslie Lamport, "Paxos Made Simple"
- "Paxos Made Live - An Engineering Perspective" Google 实现 Paxos 算法时的工程考虑。
- Zookeeper,两篇介绍 ZooKeeper 的论文
- ZooKeeper: Wait-free coordination for Internet-scale systems
- A simple totally ordered broadcast protocol
- Google 的 Chubby,"The Chubby lock service for loosely-coupled distributed systems"
- 最终一致性
- 最终一致性概念
- Cassandra 中最终一致性的应用
- 基于 Gossip 协议的组成员管理,论文 "Efficient Reconciliation and Flow Control for Anti-Entropy Protocols"
- 基于 Merkle tree 的数据同步算法:“Informed content delivery across adaptive overlay networks”
- CAP 理论
分布式数据库和分布式文件系统
Google File System
- Hadoop Distributed File System (HDFS),http://hadoop.apache.org/hdfs/
- 论文 “The Google file system”
MooseFS
Ceph
- http://ceph.newdream.net/
- 论文 "CEPH: RELIABLE, SCALABLE, AND HIGH-PERFORMANCE DISTRIBUTED STORAGE"
Dynamo
- 论文 "Dynamo: Amazon’s Highly Available Key-value Store"
Big Table
- http://hbase.apache.org/
- 论文 "Bigtable: A Distributed Storage System for Structured Data"
Cassandra
- http://cassandra.apache.org/
- 论文 "Cassandra - A Decentralized Structured Storage System"
Parallel Database
- Yahoo! PNUTS 论文 "PNUTS: Yahoo!’s Hosted Data Serving Platform"
- GreenPlum 并行数据库,私有软件,非开源
- HadoopDB,论文 "HadoopDB: An Architectural Hybrid of MapReduce and DBMS Technologies for Analytical Workloads"
分布式数据库对比
论文 "Benchmarking Cloud Serving Systems with YCSB"
大规模数据处理
- MapReduce
- Hive, Pig
- Hive 论文 "Hive – A Petabyte Scale Data Warehouse Using Hadoop"
- Pig 论文 "Pig Latin: A Not-So-Foreign Language for Data Processing"
- search engine (Lucene)
关系数据库
- 数据库设计与实现基本理论
- Book "Database System Implementation"
- transaction processing
- Book "Transaction Processing: Concepts and Techniques"
- Book "Principles of Transaction Processing, Second Edition"
- 性能优化
- Book "High Performance MySQL"
- Book "Physical Database Design"
- SQLite 代码分析
- PostgreSQL
分布式系统理论
这几本书里面,"distributed algorithms" 比较偏重纯理论,与实际技术相关性不大,阅读优先级较低;"distributed systems: principles and paradigms" 讲了不少实际系统,但是讲的不是很深入(也很难讲深入),初学者可以先浏览一遍;"Principles of computer systems design: an introduction" 是一本新书,对系统设计的很多思想讲的很透彻清晰,优先级较高。
- Lynch's book "distributed algorithms"
- Tanenbaum's book "distributed systems: principles and paradigms"
- "Principles of computer systems design: an introduction"
- CAP theorem paper, "Brewer's conjecture and the feasibility of consistent, available, partition-tolerant web services"