一个精选的分布式计算(大数据)相关优秀文章、视频和资源的列表。
无论你是为面试做准备, 还是想设计分布式/微服务应用程序, 这份列表都将对你有所帮助。
注意: GitHub上的星标数并不能完全反映每个项目的使用率或知名度。
受 Awesome-BigData 启发
由 Gabriel Leon de Mattos 创建
目录
文章
介绍 / 面试
-
系统设计入门 - [109k ⭐] - 优秀的资源汇总,包括Anki卡片背诵。
-
系统设计面试问题 - 你应该知道的概念 - 一个精选的主题列表,帮助你了解系统设计。
-
理解系统设计面试 - [付费 💵] - 这是一门非常受欢迎的系统设计准备课程。它最好的地方是提出的应用程序设计方案,而不仅仅是解释每个工具的功能。
-
软件开发中的系统设计 - 关于系统设计和架构的基础文章。
-
系统设计 - 初级面试准备资源。
-
分布式系统设计模式 - 讨论了一些模式以及一些需要考虑的技术。
-
使用人工智能在Codemia.io上练习系统设计问题 - 一个允许你像面试一样交互式地练习系统设计问题的工具。它提供了循序渐进的反馈和最终评估,评分你的表现。
进阶
-
分布式计算 - 维基百科文章,拓展了分布式系统设计的视角。
-
分布式计算的谬论 - 维基百科文章,介绍了分布式计算的谬论及其影响。
-
分布式计算谬论解释 - 对上述谬论的深入解释。
-
CAP定理 - IBM关于CAP定理、微服务和NoSQL数据库的文章。
-
模式: 微服务架构 - 一篇很好的文章,讨论了微服务架构及其缺点。
-
分布式系统分类 - 11页讲座,阐述了我们为什么需要分布式系统。
-
十大安全编码实践 - 简短文章,讨论了代码安全的良好实践。
-
可扩展的Web架构和分布式系统 - 很好的文章,介绍了分布式系统以及一些潜在的工具。
书籍
-
设计分布式系统:可扩展、可靠服务的模式和范式 - [付费 💵] - 这本书讨论了分布式系统,并轻松展示了一些代码示例。
-
设计数据密集型应用程序 - [付费 💵] - 深入解释了我们在使用分布式系统时使用的各种资源,以及它们是如何发展并试图解决哪些问题的。
-
系统设计手册 - [付费 💵] - 涵盖了分布式系统的核心方面,如:网络基础、支撑分布式系统的理论、可扩展系统的架构模式、提高系统抗破坏性的稳定模式以及如何用小团队维护大规模系统的最佳实践。
-
构建微服务 - [免费 👍] - 优秀的书籍,深入讨论了使用微服务设计系统架构,包括了相关的大部分主题。
-
从单体到微服务 - [免费 👍] - 由上述作者撰写,这本书将涵盖从单体到微服务的迁移,建议先读前一本书。
-
分布式系统(第3版) - [免费 👍] - 分布式系统的良好概述和深入介绍。适合中级读者。
视频
基于分布式系统的视频集合。
介绍 / 面试
-
Gaurav Sen - 系统设计系列 - 适合想了解更多系统设计的人,以一种易于理解的方式介绍了该主题。
-
Tech Dummies - 系统设计系列 - 另一个系统设计的简介。
-
在谷歌的模拟系统设计面试 - 概述了一次系统设计面试的情况,虽然有一些缺陷,但基本完成了要求。关键在于与面试官的互动过程。
-
谷歌准备指南 - 快速解释了他们的面试方式。
-
系统设计面试 - 专注于系统设计面试内容的YouTube频道,详细解释了各种问题。
-
架构和系统设计面试介绍 - Jackson Gabbard的一个很好的视频,包含关于系统设计面试的有价值信息。
-
系统设计面试介绍 - Tushar的系统设计简介。
-
分布式系统 - 这是由Chris Colohan介绍的分布式系统入门课程。他获得了Carnegie Mellon的博士学位,然后在谷歌工作10年,构建分布式系统。
-
简单方法 - 一个新兴的频道,提供易于理解的分布式系统视频。
-
由SDE Skills提供的系统设计 - 很好的资源,适合准备系统设计面试的人,有多个系统设计模拟面试和深入探讨。
-
由CodeKarle提供的系统设计 - 另一个很好的免费资源,列出了常见的面试问题。
进阶
- Reddit架构的发展 - 概述了Reddit系统设计如何扩展。
- 麻省理工学院6.824分布式系统 - 麻省理工学院的研究生级分布式系统课程(2020年)。
- 加州大学圣克鲁斯分校CSE138分布式系统 - 加州大学圣克鲁斯分校的本科分布式系统课程(2020年)。
工具
- 分布式系统中最常用的工具集合
关系型数据库管理系统
-
MariaDB - MariaDB是MySQL服务器的一个分支。
-
MySQL - 广泛使用的关系型数据库。
-
PostgresSQL - 正日益流行的关系型数据库。
-
SQLite - 另一款广泛使用的数据库,内置于所有移动设备和大部分计算机。
-
Sql Server - 广泛使用的关系型数据库。
NoSQL
缓存(键值对)
-
Apache Ignite - [3.3k ⭐] - 具有ACID属性的内存缓存。
-
Couchbase - 受memcached启发,增加了复制和持久化等功能。
-
Oracle Coherence - [126 ⭐] - 高扩展性、低延迟的内存缓存。
-
Memcached - [10.2k ⭐] - 最早的内存缓存数据库之一,性能卓越,支持多线程。
-
Redis - [44k ⭐] - 广泛使用的内存缓存数据库,拥有持久化存储和支持字符串、列表、集合、哈希、流和位图等多种数据类型的功能。
存储(键值对)
-
Apple FoundationDB - [10k ⭐] - 多模型(单个数据库支持多种数据类型)、ACID兼容的键值存储。易扩展且容错。
-
Cosmos DB - 微软的全球分布式、多模型数据库服务。可独立弹性扩展吞吐量和存储。支持SQL、MongoDB、Cassandra、表、Gremlin和Spark API。
文档存储
-
CouchDB - [4.6k ⭐] - 提供ACID一致性的NoSQL文档存储数据库,提供RESTful HTTP API进行数据读写。
-
MongoDB - 最受欢迎的通用用途NoSQL数据库之一。
-
RethinkDB - [23.8k ⭐] - 文档存储数据库。
-
ElasticSearch - [49.9k ⭐] - 广受欢迎的用于构建快速、可扩展搜索引擎的NoSQL数据库。
-
Cosmos DB - 微软的全球分布式、多模型数据库服务。可独立弹性扩展吞吐量和存储。支持SQL、MongoDB、Cassandra、表、Gremlin和Spark API。
宽列存储
-
Amazon DynamoDB - 键值和文档数据库,性能卓越,可扩展和安全。
-
Google Bigtable - 可扩展和高性能的NoSQL数据库,适用于大型分析和操作工作负载。
-
Cassandra - Facebook开源项目,极速、易扩展,可选包含每个操作的一致性。
-
Scylla - [4.9k ⭐] - 基于seastar框架的NoSQL数据存储,与Cassandra兼容。
-
HBase - [3.6k ⭐] - 模仿Google的Bigtable,用Java编写。作为Apache Hadoop项目的一部分开发,运行在HDFS或Alluxio之上。(请参见Hadoop 相关)
-
Cosmos DB - 微软的全球分布式、多模型数据库服务。可独立弹性扩展吞吐量和存储。支持SQL、MongoDB、Cassandra、表、Gremlin和Spark API。
图形
-
Amazon Neptune - 快速、可靠、完全托管的图形数据库服务。
-
ArangoDB - [10k ⭐] - 灵活的文档、键值和图形数据库,使用自己的查询语言AQL。
-
Neo4j - [7.9k ⭐] - 对图形数据库有良好支持,ACID兼容且灵活。
-
Cosmos DB - 微软的全球分布式、多模型数据库服务。可独立弹性扩展吞吐量和存储。支持SQL、MongoDB、Cassandra、表、Gremlin和Spark API。
分布式文件系统
-
HDFS - Hadoop文件系统是最广受欢迎的大数据竞争对手之一,提供高吞吐量访问。
-
Lustre - 计算机集群的文件系统。
-
CephFS - 统一的分布式存储系统。
-
GlusterFS - 可扩展的NAS文件系统。
-
MooseFS - 符合POSIX标准的分布式文件系统。
-
XtreemFS - 容错文件系统。
资源管理
- Kubernetes - 部署、管理和自动扩展裸机或虚拟服务器上容器集群的高度流行方式。
流处理
-
Apache Samza - 构建可从多个来源(包括Kafka)实时处理数据的有状态应用程序。易用且成本低的多订阅模型,可消除背压并提供可靠的持久性和低延迟。
-
Apache Flink - 基于流和转换的概念。使用Maven,将批处理任务视为具有有限边界的数据流。低延迟,高吞吐量。
-
Amazon Kinesis Streams - 持久、可扩展的实时服务。每秒收集数十亿字节的数据,来自数十万个来源,包括数据库事件流、网站点击流、金融交易等。
-
Azure Stream Analytics - 专为关键任务工作负载设计的实时分析服务。
消息代理
-
Amazon MQ - 来自亚马逊的开源消息代理。
-
Apache ActiveMQ - 一个基于Java的消息服务器,支持多种协议。
-
Apache Kafka - 广受欢迎的低延迟消息代理,用于数据流。
-
RabbitMQ - 广受欢迎的轻量级、基于Erlang的消息代理,支持多种消息协议。
-
IronMQ - 非常快速和高度可扩展的消息代理。(非开源)
-
Apache Pulsar - 由雅虎创建,也具有高度可扩展性、低延迟、地理复制和多租户。
-
Kestrel - 用Scala编写,使用memcached协议。其工作方式类似于Kafka。
-
Azure Service Bus - 一个完全托管的企业集成消息代理。
负载均衡器
开源软件
-
SeeSaw - [5.1k ⭐] - 由Google使用,使用Go编写,基于Linux的虚拟负载均衡器服务器。
-
HAProxy - 广受欢迎的选择,提供高可用性、代理、TCP/HTTP负载均衡。被Reddit、Imgur、MaxCDN、GitHub和AirBNB使用。
-
Zevenet - 支持L3、L4和L7层。易于使用,带有Docker仓库。支持先进的健康检查监控。
-
Neutrino - 由eBay使用,使用Scala和Netty构建。支持轮询和最小连接算法。
-
Nginx - 不是Web服务器吗?是的,开源版本支持基本的内容切换和请求路由。Plus版本支持负载均衡、WAF、监控等。
-
Openresty - Nginx + Lua,绝佳组合。
硬件
-
F5 - 强大的硬件负载均衡器选择,支持多种协议(IP、TCP、FTP、UDP、HTTP)。
-
TP-Link - 更便宜的替代品,可用作负载均衡器。
-
Barracuda - 在处理内部服务器时的首选负载均衡器之一。内置顶级安全措施,提供全面的报告和监控出站流量以进行数据丢失预防。
云
-
Amazon Elastic Load Balancing - 亚马逊客户的首选,支持Lambda函数,可高度扩展。
-
Google Load Balancing - 谷歌客户的首选,带有自动扩展功能,速度很快,集成了CDN。
-
Cloudflare Load Balancing - Cloudflare提供的可扩展负载均衡,具有快速故障转移和仪表板功能。
-
DigitalOcean Load Balancing - 如果您是DigitalOcean客户,这是一个不错的选择,价格实惠,区域可用性,可扩展,易于部署在您的其他Droplets中。
-
Azure Load Balancing - 微软Azure客户的首选。支持内部和外部流量,IPv6,监控以及一套标准的负载均衡功能。
Hadoop 生态系统
仪表板
- Ambari - 仪表板,集成了大部分Hadoop相关技术,便于管理和执行。
数据引入
-
Sqoop - 在Hadoop和结构化数据存储(如关系数据库)之间高效地传输数据。
-
Flume - 分布式、高可用和高效的日志数据收集、聚合和移动平台。
-
Apache Kafka - 广泛流行的消息代理,具有低延迟的数据流处理能力。
工作流调度器
- Oozie - 以XML方式创建工作流,执行分步骤的作业(来自其他Hadoop生态系统应用程序),并支持并行执行。
查询
处理
- Tez - 解决了与Spark和MapReduce类似的问题,比MapReduce更有效率,因为它可以计算出最有效的执行方式。
- MapReduce - 顾名思义,MapReduce会映射数据并减少结果。
- Spark - 强大的数据处理能力,不仅可以像Tez(和MapReduce)一样处理数据,还可以实时处理数据流,应用机器学习中的回归分析算法等。
- Apex - *已退役项目,它是一个原生YARN平台,统一了流处理和批处理。
数据库
- HBase - [3.6k ⭐] - 模仿Google的Bigtable,用Java编写。作为Apache Hadoop项目的一部分开发。
资源管理
REST框架
-
Gin - [40.6k ⭐] - 使用Golang的高性能微服务框架,具有高吞吐量能力。
-
Phoenix - [15.5k ⭐] - 分布式处理,可轻松扩展,支持通道和实时聊天。该框架用Elixir编写,使用BEAM和Erlang,非常适合大规模系统,并支持高吞吐量。
-
Express.js - [49.6k ⭐] - 快速的Node.js REST API,可在多种场景下良好运行。
-
Rails - [46.2k ⭐] - 用Ruby编写的Rails可以从原型到生产高效快速地提供API。
-
Play Framework - [11.6k ⭐] - 用Scala/Java编写的非常快速、高吞吐量的框架,默认支持RESTful。
-
Flask - [51.6k ⭐] - 轻量级Python微框架,适用于快速原型制作和生产。
-
FastAPI - [22.7k ⭐] - 一个轻量级的Python微框架,灵感来自Flask但更加现代,使用Python异步。
-
Django REST - [18.4k ⭐] - 用Python编写的Django Rest是一个强大灵活的REST API。效率和上市时间与Rails相似。
-
ASP.NET Core MVC - 一个功能丰富的框架,使用C#或F#以模型-视图-控制器设计模式构建Web应用程序和API。在TechEmpower Composite Benchmarks中排名第6的Web框架。
-
Fastify - [15.4k ⭐] - 一个Node.js Web框架,高度关注于提供最佳开发体验,同时具有最少的开销和强大的插件架构。