System Design现代系统设计概论

news2024/11/26 4:37:08

1. 什么是系统设计?

系统设计是定义组件及其集成、API 和数据模型以构建满足一组指定功能和非功能需求的大型系统的过程。

系统设计使用计算机网络、并行计算和分布式系统的概念来设计可扩展且高性能的系统。分布式系统本质上具有良好的可扩展性。然而,分布式系统本质上是复杂的。系统设计的纪律可以帮助我们克服这种复杂性并完成工作。

在这里插入图片描述

系统设计的目的是构建可靠、有效、可维护等特征的系统。

  • 可靠的系统可以处理故障、故障和错误。
  • 有效的系统可以满足所有用户需求和业务要求。
  • 可维护的系统灵活且易于扩展或缩小。添加新功能的能力也属于可维护性的范畴。

2. 使用构建块的现代系统设计

我们分离出常用的设计元素,例如负载均衡器,作为高级系统设计的基本构建块。这有两个目的。首先,它使我们能够详细讨论所有构建块并讨论它们有趣的迷你设计问题。其次,当我们解决设计问题时,我们可以专注于特定问题的方面,提及我们将使用的构建块以及我们将如何使用它。这有助于我们消除对常见设计元素的重复讨论。

我们已经确定了对于设计现代系统至关重要的十六个构建模块。
在这里插入图片描述
在这里插入图片描述

3. 什么是系统设计面试?

了解系统设计访谈 (SDI) 以及如何战略性地进行这些访谈。

在这里插入图片描述
SDI 发生在更高的抽象级别。我们找出需求并将其映射到计算组件和连接这些子系统的高级通信协议。

最终答案并不重要。重要的是优秀的申请人带领面试官经历的过程和旅程。

注意:与面试中的编码问题相比,系统设计更符合我们将在工作中完成的任务。

4. 我们如何解决设计问题?

设计问题是开放式的,并且一开始就故意含糊其辞。这种模糊性模仿了现代商业的现实。

面试官经常询问一个众所周知的问题,例如设计 WhatsApp。现在,真正的 WhatsApp 应用程序具有众多功能,将所有这些功能作为我们的 WhatApp 克隆的要求可能不是一个明智的主意,原因如下:

  • 首先,我们采访的时间有限。
  • 其次,使用系统的一些核心功能应该足以展示我们解决问题的能力。

我们可以告诉面试官,真正的 WhatsApp 所做的许多其他事情我们不打算包含在我们的设计中。如果面试官有任何异议,我们可以相应地改变我们的行动计划。

以下是我们在系统设计面试期间应遵循的一些最佳实践:
在这里插入图片描述

  • 申请人应该提出正确的问题来巩固要求。

  • 申请人还需要确定问题的范围,以便他们能够在面试的有限时间内尽力解决问题。SDI 的长度通常约为 35 至 40 分钟。

  • 与面试官的沟通至关重要。默默地做设计并不是一个好主意。相反,我们应该与面试官接触,以确保他们理解我们的思维过程。

5. 呈现高层设计

在较高层次上,组件可以是前端、负载均衡器、缓存、数据处理等。系统设计告诉我们这些组件如何组合在一起。

架构设计通常将组件表示为盒子。这些方框之间的箭头代表谁与谁交谈以及这些方框或组件如何组合在一起。
在这里插入图片描述
我们可以针对给定的问题画一张如上所示的图表并将其呈现给面试官。

6. 每个 SDI

SDI 通常包括与设计如何随着时间的推移而演变相关的问题,因为系统的某些方面增加了某个数量级,例如用户数量、每秒查询数量等。系统社区普遍认为,当系统的某些方面增加十倍或更多时,相同的设计可能不再适用,可能需要更改。

设计和操作更大的系统需要仔细思考,因为设计通常不会随着系统需求的增加而线性扩展。

SDI 中的另一个问题可能与我们为什么不设计一个已经能够处理比必要或预测更多的工作的系统有关。

与复杂项目相关的美元成本是我们不这样做的主要原因。

7. Google 的设计演变

谷歌搜索早期版本的设计在今天看来可能很简单,但在当时却相当复杂。它还降低了成本,这对于像谷歌这样的初创公司维持生存是必要的。结果是,作为设计师,我们所做的一切都会对企业及其客户产生影响。我们需要通过有效利用资源来满足或超越客户的需求。

8. 设计挑战

随着时间的推移,事情会发生变化,并且会因为以下原因而崩溃:

  • 对于设计问题,没有单一正确的方法或解决方案。
  • 很多事情都是基于我们所做的假设。

9. 设计师的责任

作为设计师,我们需要在设计层面提供容错能力,因为几乎所有现代系统都使用现成的组件,而且这样的组件有数百万个。因此,总会有一些东西发生故障,我们需要向客户隐瞒这种不良的现实。

大多数系统设计理论都来自分布式系统领域。分布式系统为我们提供了成熟软件原理的指南。其中包括以下内容:

  • Robustness稳健性(危机期间维持运营的能力)
  • Scalability 伸缩性
  • Availability可用性
  • Performance性能
  • Extensibility可扩展性
  • Resiliency弹性(中断后在可接受的时间内恢复正常运行的能力)

举个例子,我们可能会说,当网络组件发生故障时,我们需要在可用性和一致性之间进行权衡,因为 CAP 定理表明,在网络分区下我们不能同时拥有这两者。这种共同语言有助于沟通,并表明我们精通理论和实践。

Reference

https://www.educative.io/courses/grokking-modern-system-design-interview-for-engineers-managers/introduction-to-modern-system-design

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1122634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

antd组件onChange回调,需要立即执行改变value与防抖节省接口开销。

文章目录 普通使用使用防抖节省开销页面功能复杂需要value受控回调需要部分代码立即执行,部分代码防抖延时执行useRefuseCallback 小结 普通使用 当我们使用Antd的input或者select进行搜索时,onChange回调会即时执行。 import { Input } from "an…

R155法规有没有要求上Secure Boot功能?

标签: R155法规有没有要求上Secure Boot功能?; R155法规有没有要求上安全启动功能?;R155法规与Secure Boot关系?R155法规可以不上Secure Boot吗? R155法规有没有要求一定要上Secure Boot&#…

Node学习笔记之Express框架

一、express 介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架,官方网址:https://www.expressjs. com.cn/ 简单来说,express 是一个封装好的工具包,封装了很多功能,便于我们开发 WEB 应用&…

基于卷积优化优化的BP神经网络(分类应用) - 附代码

基于卷积优化优化的BP神经网络(分类应用) - 附代码 文章目录 基于卷积优化优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.卷积优化优化BP神经网络3.1 BP神经网络参数设置3.2 卷积优化算法应用 4.测试结果…

codeforces (C++ Chemistry)

题目: 翻译: 思路: 1、n组数据,每组输入两个数t,k和一个字符串,删除k个字符,剩下的字符能组成回文,则输出YES,否则输出NO。 2、用map记录字符串中每个字符出现的次数,su…

Unity学习shader笔记[二百]仿马赛克效果碎片画思路

最近看到个场景的图片,对他的生成有点兴趣,就想了解。 清晰的画面经过后处理后变成这种。思路和马赛克基本一样。 美术处理 这种图片处理 本身ps就有,美术方便的话,可以让美术给图,然后给出的网格里面uv分布是0到1&…

Spark内核调度

目录 一、DAG (1)概念 (2)Job和Action关系 (3)DAG的宽窄依赖关系和阶段划分 二、Spark内存迭代计算 三、spark的并行度 (1)并行度设置 (2)集群中如何规划并…

给Windows文件夹添加备注信息

自己的电脑中文件夹为了安装各种开发环境,基本都是英文字母命名,就导致好多东西猛地一看找不着。此时加个备注会不会就好很多呢?就如以下这种 设置方法: 1、展示备注 右键展示的列表头部,会出现展示项,一…

前沿重器[36] | ACL23-基于检索的大语言模型-报告阅读

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…

Jenkins+Ant+Jmeter接口自动化集成测试

一、Jenkins安装配置 1、安装配置JDK1.6环境变量; 2、下载jenkins.war,放入C:\jenkins目录下,目录位置随意; Jenkins启动方法: cmd进入Jenkins目录下,执行java -jar jenkins.war 浏览器输入:l…

Server Name Indication(SNI),HTTP/TLS握手过程解析

Server Name Indication(SNI)是一种TLS扩展,用于在TLS握手过程中传递服务器的域名信息。在未使用SNI之前,客户端在建立TLS连接时只能发送单个IP地址,并且服务器无法知道客户端请求的具体域名。这导致服务器需要使用默认…

Spring中动态代理设计模式

目录 一、什么是动态代理 二、动态代理开发步骤 2.1 搭建开发环境 2.2 具体过程 三、动态字节码技术 四、动态代理开发简化代理开发 一、什么是动态代理 其实不管是静态代理还是动态代理其本质都是一样的,都是通过代理类为目标类增加额外功能,从而方便目…

Day7力扣打卡

打卡记录 合法分组的最少组数(贪心) 链接 举例说明,假设 c n t [ x ] 32 cnt[x]32 cnt[x]32, k 10 k10 k10,那么 32 10 10 10 2 321010102 321010102,多出的 2 2 2 可以分成两个 1 1 1&#xf…

Verilog基础:$fopen和$fclose系统函数、任务的使用

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 $fopen和$fclose是两个用于打开和关闭文件的系统函数、任务。最初,在Verilog-1995标准中,最多只能同时打开32个文件,其所使用的…

Flink部署模式及核心概念

一.部署模式 1.1会话模式(Session Mode) 需要先启动一个 Flink 集群,保持一个会话,所有提交的作业都会运行在此集群上,且启动时所需的资源以确定,无法更改,所以所有已提交的作业都会竞争集群中…

2023/10/22总结

项目上 登录注册忘记密码已经全部完善——连接数据库,发送验证码等 把ER图和项目功能点也给做完了(可能后期还需要修改 ,因为问题会在实践的时候出现) 功能点图 刷题记录 接下来的任务是争取早日完成这个项目。

图论04-【无权无向】-图的广度优先遍历BFS

文章目录 1. 代码仓库2. 广度优先遍历图解3.主要代码4. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 广度优先遍历图解 3.主要代码 原点入队列原点出队列的同时,将与其相邻的顶点全部入队列下一个顶点出队列出队列的同时,将…

Python基础入门例程4-NP4 读入整数数字

描述 在学会读入字符串以后,小白还想要读入整数,请你帮他使用input函数读入数字并输出数字与变量类型。 输入描述: 输入只有整数。 输出描述: 将输入的数字输出,同时换行输出变量类型。 示例1 输入: …

《算法通关村第二关黄金挑战一一K个一组反转》

《算法通关村第二关黄金挑战一一K个一组反转》 描述 每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 解法 头插法 理解…

【超级基础版】十进制与二进制的转换

目录 一、为什么是二进制? 二、二进制的加法和乘法 三、二进制向十进制转换 四、十进制整数向二进制转换 五、十进制小数向二进制小数的转换 六、八进制和十六进制的引入 一、为什么是二进制? 我们知道电脑的数据本质上是0和1,就是我们…