Medium上的这篇文章介绍了作者学习系统架构的一些在线资源,可以帮助架构设计的初学者尽快了解架构的基本设计原则,了解常见场景的设计方案。原文:System Architecture — System Design Materials[1]
子曰:“工欲善其事必先利其器”。
今天通过这篇文章跟大家分享一些系统架构设计方面的学习资料,让我们一起成长。
System Design Tips and Introduction (中文, Youtube)[2]
The System Design Primer (中文/英文, Github)[3]
Intro to Architecture and Systems Design Interviews (英文, Youtube)[4]
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems (中文版《数据密集型应用系统设计》, Book)[5][6]
system design interview questions (英文, Github)[7]
System Design Interview – Step By Step Guide (英文, Youtube)[8]
Distributed Systems (英文, Book)[9]
Distributed systems for fun and profit (英文, Book)[10]
6.824: Distributed Systems (英文, Course)[11]
Concurrent and Distributed Systems (英文, Course)[12]
15-440: Distributed Systems Syllabus (英文, Course)[13]
CS244b: Distributed Systems (英文, Course)[14]
CSE 490H: Distributed Systems (英文, Course)[15]
Apache Hadoop (Open source, Github)[16]
SeaweedFS (Open source, Github)[17]
MinIO (Open source, Github)[18]
TiDB (Open source, Github)[19]
etcd (Open source, Github)[20]
Apache ZooKeeper (Open source, Github)[21]
Apache Spark (Open source, Github)[22]
Apache Flink (Open source, Github)[23]
Ray (Open source, Github)[24]
Notes on Distributed Systems for Young Bloods (英文, Blog)[25]
Distributed systems theory for the distributed systems engineer (英文, Blog)[26]
分布式系统 (中文, Blog)[27]
Distributed Systems Reading Group (英文, Paper)[28]
awesome-distributed-systems (英文, Github)[29]
Grokking the System Design Interview (英文, Course)[30]
Tech Dummies Narendra L (英文, Youtube)[31]
Design video sharing platform (英文, Blog)[32]
System Design Basics (英文, Youtube)[33]
code karle (英文, Youtube)[34]
System Design Introduction For Interview (英文, Youtube)[35]
Distributed Systems (英文, Youtube)[36]
System Design (中文, Gitbook)[37]
CS6213 Special Topics in Distributed Computing (英文, Course)[38]
分布式系统
- 基本问题: 时间问题,一致性问题,容错技术,共识算法,并发控制
- 基本定理: CAP, PACELC, FLP
CAP theorem (英文, Wikipedia)[39]
PACELC theorem (英文, Wikipedia)[40]
Consensus (英文, Wikipedia)[41]
- 生产系统: MapReduce, Spark, GFS, Dynamo和Cosmos
MapReduce (英文, Wikipedia)[42]
Apache Spark (英文, Wikipedia)[43]
Google File System (英文, Wikipedia)[44]
Dynamo (英文, Wikipedia)[45]
Cosmos (英文, Wikipedia)[46]
系统架构设计需要考虑的问题
- 可靠性(Reliable)
- 可扩展性(Scalable)
- 可维护性(Maintainable)
- 存储与检索(Storage and Retrieval)
- 冗余备份(Redundancy/Replication)
- 分片分区(Fragmentation/Partition)
- 事务(Transactions)
- 一致性(Consistency)
- 共识(Consensus)
- 批处理/流处理(Batch processing/stream processing)
如何准备系统设计面试
- 找相关的博客学习
- 坦率的说,面试不会问得非常深入,不过如果有机会解释清楚,就能给面试官留下更好的印象
- 试着设计一些东西,写下功能性/非功能性的需求,画出设计图、数据流、流程流,并考虑商业模型从而帮助系统盈利,并考虑如何各个组件如果崩溃需要如何处理。
- 明确设计的取舍
- 保持自信
- 不要试图炫耀,你可能只是了解了某一方面,但其他方面你并不了解。
- 注意观察面试官,如果发现面试官对这部分不感兴趣,就不要花太多时间。
- 不要轻易放弃自己的意见,面试官质疑候选人是常规操作。不要因为面试官的挑战、质疑就觉得自己错了。
References:
[1] System Architecture — System Design Materials: jinlow.medium.com/system-arch…
[2] System Design Tips and Introduction: youtu.be/th_73AVA4dY…
[3] The System Design Primer: github.com/donnemartin…
[4] Intro to Architecture and Systems Design Interviews: youtu.be/ZgdS0EUmn70
[5] Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems: www.amazon.com/Designing-D…
[6] 数据密集型应用系统设计: book.douban.com/subject/303…
[7] system design interview questions: github.com/jaychsu/Fre…
[8] System Design Interview – Step By Step Guide: youtu.be/bUHFg8CZFws
[9] Distributed Systems: www.distributed-systems.net/index.php/b…
[10] Distributed systems for fun and profit: book.mixu.net/distsys/ind…
[11] 6.824: Distributed Systems: pdos.csail.mit.edu/6.824/sched…
[12] Concurrent and Distributed Systems: www.cl.cam.ac.uk/teaching/20…
[13] 15-440: Distributed Systems Syllabus: www.cs.cmu.edu/~dga/15-440…
[14] CS244b: Distributed Systems: www.scs.stanford.edu/20sp-cs244b…
[15] CSE 490H: Distributed Systems: courses.cs.washington.edu/courses/cse…
[16] Apache Hadoop: github.com/apache/hado…
[17] SeaweedFS: github.com/chrislusf/s…
[18] MinIO: github.com/minio/minio
[19] TiDB: github.com/pingcap/tid…
[20] etcd: github.com/etcd-io/etc…
[21] Apache ZooKeeper: github.com/apache/zook…
[22] Apache Spark: github.com/apache/spar…
[23] Apache Flink: github.com/apache/flin…
[24] Ray: github.com/ray-project…
[25] Notes on Distributed Systems for Young Bloods: www.somethingsimilar.com/2013/01/14/…
[26] Distributed systems theory for the distributed systems engineer: www.the-paper-trail.org/post/2014-0…
[27] 分布式系统: www.qtmuniao.com/categories/…
[28] Distributed Systems Reading Group: dsrg.pdos.csail.mit.edu/papers/
[29] awesome-distributed-systems: github.com/theanalyst/…
[30] Grokking the System Design Interview: www.educative.io/courses/gro…
[31] Tech Dummies Narendra L: www.youtube.com/channel/UCn…
[32] Design video sharing platform: leetcode.com/discuss/int…
[33] System Design Basics: youtu.be/xpDnVSmNFX0…
[34] code karle: www.youtube.com/channel/UCZ…
[35] System Design Introduction For Interview: youtu.be/UzLMhqg3_Wc…
[36] Distributed Systems: youtu.be/UEAMfLPZZhE…
[37] System Design: xunhuanfengliuxiang.gitbooks.io/system-desi…
[38] CS6213 Special Topics in Distributed Computing: ilyasergey.net/CS6213/inde…
[39] CAP theorem: en.wikipedia.org/wiki/CAP_th…
[40] PACELC theorem: en.wikipedia.org/wiki/PACELC…
[41] Consensus: en.wikipedia.org/wiki/Consen…
[42] MapReduce: en.wikipedia.org/wiki/MapRed…
[43] Apache Spark: en.wikipedia.org/wiki/Apache…
[44] Google File System: en.wikipedia.org/wiki/Google…
[45] Dynamo: en.wikipedia.org/wiki/Dynamo…
[46] Cosmos: en.wikipedia.org/wiki/Cosmos…
你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。
微信公众号:DeepNoMind