书库技术与未来分布式系统工程实践
书籍封面

分布式系统工程实践

作者 rizhao.ych
15.0 分钟

摘要

分布式系统工程实践总结

  • 本文梳理了分布式存储和计算系统的分类、设计及实现,总结了大规模数据处理系统工程师必备的基础知识和工程实践中遇到的典型问题的解决思路。
  • 你能获得:了解大规模分布式系统的核心技术和通用架构,掌握性能估算和质量控制的方法,为构建高可用、高扩展性的系统打下基础。

核心内容:

1. 硬件基础与性能估算

  • 硬件性能指标: 分布式系统工程师需熟记硬件性能参数,尤其是磁盘(寻道时间、顺序读取速率)和网络。
  • 性能估算: 系统设计时需进行性能估算,用于方案选择、优化评估,并作为向框架/服务提供方提出性能要求的依据。
    • 详细解释:性能估算需考虑CPU运算次数、内存访问时间、网络传输等因素。例如,内存排序时间 = 比较时间(分支预测错误) + 内存访问时间。
    • 举例:Bigtable设计的性能指标分析,MapReduce应用的性能估算等。
  • 行动建议: 在项目中不断练习,积累大规模系统的分析和设计经验。

2. CAP理论与一致性模型

  • CAP理论: 一致性、可用性和分区容错性三者不能同时满足,工程实践中,一致性和写操作的可用性通常不可兼得。
    • 详细解释:一般可认为,保证强一致性时,机器故障会导致写操作暂停,直至机器恢复或服务迁移。
  • 一致性模型: 一致性要求直接决定存储系统设计和实现的复杂度,包括强一致性、弱一致性、最终一致性等。
    • 详细解释:一致性模型有多种变体,如因果一致性、读己之写一致性、会话一致性、单调读一致性和单调写一致性。

3. NOSQL与SQL

  • NOSQL的意义: 预先定义一些特性,满足特定应用需求,易于扩展。
    • 详细解释:NOSQL通过选取SQL特性的子集,在扩展性和用户接口友好性之间进行权衡。
  • NOSQL的设计原则: 假设失效是必然发生的、限定应用模式、可扩容。
    • 详细解释:扩容通常以少量机器构成机器组加入系统,数据分布方法包括一致性Hash和子表分配。
    • 举例:削减SQL模型不必要的特性以满足互联网数据高速增长的需求,如Drizzle项目。

4. 关键技术实现

  • 网络编程框架: 服务器编程需要可控的网络编程框架,包括连接管理、任务队列、线程池等组件。
    • 详细解释:客户端有同步和异步两种模式,tbnet框架采用异步模型。
  • HA与Replication: 保证可靠性,复制模式包括异步、强同步和半同步。
    • 详细解释:异步复制实现简单,强同步模式可保证可靠性但牺牲可用性,半同步模式是一种折衷。
  • 分裂与迁移: 用于提供强一致性和最终一致性的系统,解决子表访问过于频繁的问题。
    • 详细解释:分裂操作由group中提供写服务的Master节点执行,写日志并同步到Slave节点。
  • 负载均衡: 集群总控机全局调度或采用DHT方法。
    • 详细解释:DHT算法中每个节点分配的token决定了数据及负载的分布。
  • Chubby: Google的Paxos实现,通过类似文件系统接口的方式给用户暴露分布式锁服务。
    • 详细解释:Chubby用于Master选举、tablet服务、存储Bigtable表格的schema信息。

5. 存储引擎与优化

  • 单机存储引擎: 解决插入、删除、更新、随机读取、顺序扫描等问题。
    • 详细解释:包括随机访问存储引擎和通用存储引擎(如Merge-dump存储引擎)。
  • 单机存储优化: 搭配不同类型硬件来优化存储系统,在性能和价格上取得折衷。
    • 举例:CDN团队在Squid服务器上使用SSD + SAS + SATA混合存储,百度在Mysql针对SSD的优化。

6. 存储系统分类与实现

  • 通用存储系统分类: 数据库及类数据库、线上最终一致性系统、线上弱一致性系统、半线上及线下系统。
  • 典型系统工程实现:
    • KO系统(线上最终一致性): 由主控机Master和大量机器group组成,采用Merge-dump存储引擎。
    • Dynamo/Cassandra(线上弱一致性): 采用P2P方法实现,需进行细致的系统测试。
    • GFS + Bigtable(半线上及线下): 两层结构,GFS关注文件存储,Bigtable提供NOSQL访问接口。

7. 计算系统分类与实现

  • 通用计算系统分类: MapReduce Offline、Online计算。
  • MapReduce Offline:
    • 详细解释:MapReduce执行顺序包括Map处理、shuffle和排序、reduce处理。
  • Online计算: 流式计算、并行数据库的SQL查询、数据仓库复杂查询。
    • 详细解释:流式计算解决在线聚合和在线过滤问题,并行数据库的SQL查询关注点与NOSQL系统不同。

8. 应用实例

  • 电子商务类: 淘宝面临的存储问题包括卖家商品、交易信息、用户信息、用户评价、用户收藏、购物车、图片等。
    • 详细解释:Oceanbase系统巧妙地利用读写比例大且单条记录一般比较小的特点,将动态更新的数据放在单机内存中。
  • 搜索类: 包括网页库存储、倒排索引服务等。
  • 社交类: IM类应用需要存储用户数据和消息数据,SNS和微博客需要支持消息推送功能。
  • 邮箱类: 需要支持邮件的顺序读取、随机读取和根据关键词、标签的检索功能。
  • 图片及视频类: 需要后台的大规模存储系统和靠近用户的CDN缓存系统支持。

9. 工程实现注意事项

  • 工程现象: 错误必然出现、错误必然复现、两倍数据规模原则、用户足够聪明、怪异现象的背后总有一个愚蠢的bug。
  • 规范制订: 经理和架构师需要参与确定技术方案、模块划分及接口设计、代码规范制订、关键算法和流程的代码Review。
  • 经验法则: 简单性原则、精力投入原则、伪代码细化设计、先稳定再优化。
  • 质量控制: 测试第一、代码Review、服务器程序的资源管理。

问答

Q: 如何进行性能估算?

A: 性能估算需要假设程序的执行环境,对硬件性能指标有初步认识后,可以从CPU运算次数、内存访问时间、网络传输等方面进行估算,并结合实例进行分析。例如,内存排序时间 = 比较时间(分支预测错误) + 内存访问时间。

Q: CAP理论在工程实践中的意义是什么?

A: CAP理论粗略地告诉我们“天下没有免费的午餐”,工程实践中,可以认为一致性和写操作的可用性不能同时满足,即如果要保证强一致性,那么出现机器故障的时候,写操作需要等机器重启或者机器上的服务迁移到别的机器才可以继续。

Q: NOSQL与SQL的区别是什么?

A: NOSQL可以认为是选取了SQL特性的子集,在扩展性和用户接口友好两个方面做了一个权衡。SQL定义了一个功能全集,NOSQL根据应用特点选取几种特定的应用定义不同的特性集合,以适应互联网数据量高速膨胀的需求。

思维导图

目标读者

本书的目标读者是具有一定分布式系统基础,并且阅读过GFS/Bigtable/Paxos相关论文,希望深入了解系统设计与实现的工程师。此外,对于想要了解大规模数据处理系统工程师必备的基础知识,以及工程实践中遇到的典型问题解决思路的读者,本书也具有一定的参考价值。

作者背景

作者rizhao.ych在淘宝工作,拥有开发类似Google GFS/MapReduce/Bigtable等系统的经验,并对Dynamo, PNUTS等典型系统有深入理解。他尝试梳理流行的分布式存储和计算系统的分类、设计及实现,希望通过本文分享自己过去的工作回忆,并与更多同学讨论来不断完善这个文档。作者坦承水平有限,只能尽力将自己知道并能够说明白的写下来,作为自己对过去工作的回忆。

历史背景

本书创作于2010年,正值NoSQL技术兴起,分布式系统开发面临诸多挑战。当时,NoSQL资料繁多但不成体系,使得分布式系统开发工程师无所适从。本书作者希望通过梳理流行的分布式存储和计算系统,为工程师提供参考。

章节摘要

音频

Comming Soon...