+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

系统设计资源整理:system-design-primer

目的 学习如何设计大型系统。 为系统设计的面试做准备。 学习如何设计大型系统 学习如何设计可扩展的系统将会有助于你成为一个更好的工程师。 系统设计是一个很宽泛的话题。在互联网上,关于系统设计原则的资源也是多如牛毛。 这个仓库就是这些资源的组织收集,它可以帮助你学习如何构建可扩展的系统。 为系统设计的面试做准备 在很多科技公司中,除了代码面试,系统设计也是技术面试过程中的一个必要环节。 实践常见的系统设计面试题并且把你的答案和例子的解答进行对照:讨论,代码和图表。 面试准备的其他主题: 学习指引 如何处理一个系统设计的面试题 系统设计的面试题,含解答 面向对象设计的面试题,含解答 其它的系统设计面试题 系统设计主题的索引 各种系统设计主题的摘要,包括优点和缺点。每一个主题都面临着取舍和权衡。 每个章节都包含着更多的资源的链接。 系统设计主题:从这里开始 第一步:回顾可扩展性的视频讲座 第二步:回顾可扩展性的文章 接下来的步骤 性能与拓展性 延迟与吞吐量 可用性与一致性 CAP 理论 CP - 一致性和分区容错性 AP - 可用性和分区容错性 一致模式 弱一致性 最终一致性 强一致性 可用模式 故障切换 复制 域名系统 CDN CDN 推送 CDN 拉取 负载均衡器 工作到备用切换(Active-passive) 双工作切换(Active-active) 四层负载均衡 七层负载均衡 水平扩展 反向代理(web 服务器) 负载均衡与反向代理 应用层 微服务 服务发现 数据库 关系型数据库管理系统(RDBMS) Master-slave 复制集 Master-master 复制集 联合 分片 非规范化 SQL 调优 NoSQL Key-value 存储 文档存储 宽列存储 图数据库 SQL 还是 NoSQL 缓存 客户端缓存 CDN 缓存 Web 服务器缓存 数据库缓存 应用缓存 数据库查询级别的缓存 对象级别的缓存 何时更新缓存 缓存模式 直写模式 回写模式 刷新 异步 消息队列 任务队列 背压机制 通讯 传输控制协议(TCP) 用户数据报协议(UDP) 远程控制调用协议(RPC) 表述性状态转移(REST) 安全 附录 2 的次方表 每个程序员都应该知道的延迟数 其它的系统设计面试题 真实架构 公司的系统架构 公司工程博客 正在完善中 致谢 联系方式 许可 如何处理一个系统设计的面试题 系统设计面试是一个开放式的对话。他们期望你去主导这个对话。 你可以使用下面的步骤来指引讨论。为了巩固这个过程,请使用下面的步骤完成系统设计的面试题和解答这个章节。 第一步:描述使用场景,约束和假设 把所有需要的东西聚集在一起,审视问题。不停的提问,以至于我们可以明确使用场景和约束。讨论假设。 谁会使用它? 他们会怎样使用它? 有多少用户? 系统的作用是什么? 系统的输入输出分别是什么? 我们希望处理多少数据? 我们希望每秒钟处理多少请求? 我们希望的读写比率? 第二步:创造一个高层级的设计 使用所有重要的组件来描绘出一个高层级的设计。 画出主要的组件和连接 证明你的想法 第三步:设计核心组件 对每一个核心组件进行详细深入的分析。举例来说,如果你被问到设计一个 url 缩写服务,开始讨论: 生成并储存一个完整 url 的 hash MD5 和 Base62 Hash 碰撞 SQL 还是 NoSQL 数据库模型 将一个 hashed url 翻译成完整的 url 数据库查找 API 和面向对象设计 第四步:扩展设计 确认和处理瓶颈以及一些限制。举例来说就是你需要下面的这些来完成扩展性的议题吗? 负载均衡 水平扩展 缓存 数据库分片 论述可能的解决办法和代价。每件事情需要取舍。可以使用可扩展系统的设计原则来处理瓶颈。 预估计算量 你或许会被要求通过手算进行一些估算。附录涉及到的是下面的这些资源: 使用预估计算量 2 的次方表 每个程序员都应该知道的延迟数 相关资源和延伸阅读 查看下面的链接以获得我们期望的更好的想法: 怎样通过一个系统设计的面试 系统设计的面试 系统架构与设计的面试简介 系统设计的面试题和解答 普通的系统设计面试题和相关事例的论述,代码和图表。 与内容有关的解答在 solutions/ 文件夹中。
你可能想看的