面试及其他系统设计

System Design for Interviews and Beyond

课程纲要

系统需求(功能和非功能需求)
功能需求(如何定义,向后工作方法)
高可用性(基于时间和基于计数的可用性、高可用性背后的设计原则、高可用性背后的流程、SLO、SLA)
容错、弹性、可靠性(错误、故障、故障、容错、弹性、游戏日与混沌工程、预期和意外故障、可靠性) 可扩展性(垂直和
水平扩展、弹性与可扩展性)
性能(延迟、吞吐量、百分位数、如何增加写入和吞吐量、带宽)
耐久性(备份(完整、差异、增量)、RAID、复制、校验和、可用性与持久性)
一致性(一致性模型、最终一致性、线性化、单调读取、读你写(先写后读)、一致前缀读取)
可维护性、安全性、成本(可维护性方面(故障模式和缓解、监控、测试、部署)、安全方面(CIA 三元组、身份和权限管理、基础设施保护、数据保护)、成本方面(工程、维护、硬件、软件) )
系统要求摘要(最流行的非功能性要求的单一列表)
区域、可用性区域、数据中心、机架、服务器(硬件如何帮助实现某些品质)
物理服务器、虚拟机、容器、无服务器(不同计算环境的优缺点,它们有什么好处)
同步与异步通信(同步和异步请求-响应模型、异步消息传递)
异步消息传递模式(消息队列、发布/订阅、竞争消费者、请求/响应消息传递、优先级队列、声明检查)
网络协议(TCP、UDP、HTTP、HTTP 请求和响应)
阻塞与非阻塞 I/O(套接字(阻塞(阻塞)和非阻塞)、连接、每个连接模型的线程、非阻塞 I/O 模型的每个请求的线程、事件循环模型、并发与并行)
数据编码格式(文本与二进制格式、模式共享选项、向后兼容性、向前兼容性)
消息确认(安全和不安全的确认模式)
去重缓存(本地与外部缓存、将数据添加到缓存(显式、隐式)、缓存数据逐出(基于大小、基于时间、显式)、过期与刷新)
元数据缓存(缓存端模式、直读和直写模式、后写(回写)模式)
队列(有界和无界队列、循环buffer(环形缓冲区)及其应用)
满队列和空队列问题(减载、限速、如何处理失败的请求、背压、弹性缩放)
从简单的事情开始(单机和分布式系统概念的相似性,面试技巧)
阻塞队列和生产者消费者模式(生产者消费者模式,等待和通知,信号量,阻塞队列应用)
线程池(优缺点,CPU-bound和 I/O-bound 任务,优雅关闭)
大计算架构(批处理计算模型,令人尴尬的并行问题)
日志(内存 vs 磁盘,日志分段,消息位置(偏移量))
索引(如何为消息系统实现高效索引)
时间序列数据(如何大规模、低延迟地存储和检索时间序列数据)
简单的键值数据库(如何构建一个简单的键值数据库,日志压缩)
B树索引(数据库和消息系统如何使用B树索引)
嵌入式数据库(嵌入式与远程数据库)
RocksDB(内存表,预写日志,排序字符串表(SSTable))
LSM-tree vs B-tree (log-structured merge-tree data structure, write amplification, read amplification)
Page cache (how to increase disk throughput (batching, zero-copy read))
Push vs pull (pros and两种模型的缺点)
主机发现(DNS、任播)
服务发现(服务器端和客户端发现模式、服务注册表及其应用程序)
对等发现(点发现选项、成员资格和故障检测问题、种子节点、八卦协议的工作原理及其应用)
如何选择网络协议(何时以及如何在 TCP、UDP 和 HTTP 之间进行选择)
现实生活中的网络协议系统(测验:对于各种系统设计问题,你会选择什么网络协议)
HTTP 视频(自适应流)
CDN(如何使用它,它是如何工作的,存在点(POP),好处)
推拉技术(短轮询,长轮询, websocket, server-sent events)
现实系统中的推拉技术(测验:对于各种系统设计问题,你会选择什么技术)
大规模推送架构(C10K和C10M问题,大规模推送架构的例子,大规模处理长寿命连接最明显的问题)
What else to know to build reliable, scalable, and fast systems(分布式系统常见问题列表,帮助解决这些问题的系统设计概念列表,三层架构)
超时(快速失败,慢速失败,连接和请求超时)
What to do with failed requests(处理失败请求的策略(取消,重试,故障转移, fallback))
何时重试(幂等性,测验:哪些 AWS API 故障可以安全重试)
如何重试(指数退避,抖动)
消息传递保证(至多一次,至少一次,恰好一次)
消费者偏移(基于日志的消息系统,检查点)
批处理(优缺点,如何处理批请求)
压缩(优缺点,压缩算法和他们做出的权衡)
如何扩展消息消费(单个消费者与多个消费者,多个消费者的问题(消息处理的顺序,双重处理))
现实生活中的系统分区(利弊,分区的应用)
分区策略(查找策略、范围策略、散列策略)
请求路由(物理和虚拟分片、请求路由选项)
重新平衡分区(如何重新平衡分区)
一致性哈希(如何实现,优点和缺点,虚拟节点,一致性哈希的应用)
系统过载(为什么保护系统免受过载很重要)
自动缩放(缩放策略(基于度量,调度- based, predictive))
Autoscaling system design(如何设计自动缩放系统)
Load shedding(如何在分布式系统中实现,重要的考虑因素)
Rate limiting(如何使用课程中获得的知识来解决速率限制问题(分步指南))
同步和异步客户端(准入控制系统,阻塞I/O和非阻塞I/O客户端)
Circuit breaker(断路器有限状态机,重要考虑因素)
Fail-fast设计原则(慢速服务的问题(连锁反应,级联故障)和方式解决它们)
Bulkhead(如何在分布式系统中实现这种模式)
Shuffle sharding(如何在分布式系统中实现这种模式)
结束(我们将在课程的下一个模块中涵盖的主题列表)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。