什么是系统设计 – 学习系统设计

系统设计被定义为为系统的不同组件、接口和模块创建架构并提供有助于在系统中实现这些元素的相应数据的过程。系统设计是任何分布式系统设计背后的核心概念。

系统设计涉及识别数据源,它是描述、创建和规划框架以满足特定业务的必要性和先决条件的直觉。 

为什么要学习系统设计?
在任何开发过程中,无论是软件还是任何其他技术,最重要的阶段是设计。如果没有设计阶段,您就无法跳转到实现或测试部分。系统也是如此。

系统设计不仅是系统开发中至关重要的一步,而且还提供了处理异常情况的支柱,因为它代表了软件的业务逻辑。 

系统设计的目标

  1. 实用性:我们需要一个系统,该系统应该针对他们正在设计的相应受众(用户)集。
  2. 准确性:上述系统设计的设计方式应满足几乎所有设计要求,无论是功能性还是非功能性要求。
  3. 完整性:系统设计应满足所有用户要求  
  4. 高效:系统设计不应过度使用超过资源成本,也不应过度使用,因为现在我们知道这会导致低彻底投入(输出)和更少的响应时间(延迟)。
  5. 可靠性:设计的系统应在一定时间内接近无故障的环境。  
  6. 优化:时间和空间很可能就是我们为单个组件在系统中工作的代码块所做的事情。 
  7. 可扩展(灵活性):系统设计应该根据客户的不同用户需求随时间变化,我们知道这些需求会不断变化。

系统开发生命周期
任何系统都不是一天或一步就能设计出来的。对于每个系统设计,都会发生一系列步骤/阶段/阶段来获得强大的系统。该系列被定义为系统开发生命周期(SDLC)。我们需要对系统的生命周期有深入的了解,才能定义代码块中任何变量的范围,因为只有这样我们才能深入了解庞大的系统如何在现实世界的机器中交互。 

系统开发生命周期的阶段如下:

  1. 计划
  2. 分析
  3. 设计
  4. 发展
  5. 实施
  6. 维持

系统设计的组成部分
以下是系统设计的一些主要组成部分。简要讨论。详细版本将在不同的帖子中讨论:

  1. 负载均衡器:系统可扩展性、可用性和性能衡量的最关键组件。 
  2. 键值存储:它是一种类似于哈希表的存储系统,其中键值存储是分布式哈希表。
  3. Blob 存储: Blob 代表二进制大对象,顾名思义是非结构化数据的存储,例如 YouTube、Netflix。 
  4. 数据库:它是有组织的数据集合,以便可以轻松访问和修改它们。 
  5. 速率限制器:这些设置服务可以满足的最大请求数。
  6. 监控系统:这些基本上是系统管理员监控基础设施(如带宽、CPU、路由器、交换机等)的软件。 
  7. 分布式系统消息队列:生产者和消费者之间的交易媒介。
  8. 分布式唯一ID生成器:在大型分布式系统中,每时每刻都会发生多个任务,因此为了区分它,为每个事件分配一个对应的标签。  
  9. 分布式搜索:在每个网站上,访问者要寻找的重要信息都被放入搜索栏中。
  10. 分布式日志服务:从头到尾跟踪事件序列。
  11. 分布式任务调度器:  CPU、内存、存储等计算资源。 

系统架构
软件架构是我们定义设计组件如何描述、设计和部署的一种方式。 

它基本上是软件系统的骨架设计,描述了软件系统的组件、抽象级别和其他方面。为了用外行人的语言理解它,企业的目标或逻辑应该非常清晰并列在一张纸上。这里有大型项目的目标和进一步扩大规模的指南,用于扩大现有系统和即将推出的系统。

系统架构模式
有多种方法可以组织软件架构中的组件。软件架构中不同的预定义组件组织称为软件架构模式。尝试并测试了很多模式。他们中的大多数人都成功地解决了各种问题。在每种模式中,组件的组织方式不同,以解决软件架构中的特定问题。  

不同类型的软件架构模式包括:

  1. 分层图案
  2. 客户端-服务器模式
  3. 事件驱动模式
  4. 微内核模式
  5. 微服务模式

系统设计中的模块化和接口

  • 模块化设计是指产品设计的方法/程序,涉及集成或组合较小的独立元素以创建成品。大型产品(如汽车)可以分为更小、更简单的组件,并使用模块化设计方法单独开发和生产。最终产品是通过集成(或组装)这些组件中的每一个来创建的。
  • 系统设计中的界面是用户交互的区域。它由便于系统导航的屏幕显示、收集数据的屏幕和表单以及系统报告组成。

现有系统的演进/升级/规模
随着技术使用的增加,无论是离线还是在线,现在每个开发人员都必须设计和创建可扩展的系统。如果系统不具有可扩展性,随着用户的增加,系统很可能会崩溃。因此,缩放的概念就发挥了作用。 

假设有一个具有特定磁盘和 RAM 配置的系统正在处理任务。现在,如果我们需要改进我们的系统或扩大规模,我们有两种选择。 

  1. 现有系统的升级规格:我们只是通过升级RAM和磁盘大小以及许多其他组件来改进处理器。请注意,这里我们不关心网络带宽的可扩展性和可用性。在这里,根据演变,我们正在研究可用性因素,仅考虑保持可扩展性。这称为垂直缩放。
  2. 通过将多个系统连接在一起创建分布式系统:我们在上面看到,如果可扩展性达不到标准,那么我们需要多个系统来进行此测量,因为可用性测量确实有限制。为了扩展,我们需要更多的系统(更多的块),这称为水平扩展。    

数据如何在系统之间流动
数据通过数据流图或 DFD在系统之间流动。 

数据流图或 DFD被定义为通过信息的数据流的图形表示。DFD 旨在展示如何将系统划分为更小的部分,并突出显示这些部分之间的数据流。

系统设计优势
在详细讨论了系统设计的介绍之后,现在有必要讨论一下它的优缺点。 

系统设计的一些主要优点包括:

  • 降低产品的设计成本。
  • 快速的软件开发过程
  • 节省 SDLC 的总体时间
  • 提高程序员的效率和一致性。 
  • 节省资源

缺点:

  • 容易设计过度
  • 与敏捷冲突
  • 与Devops重合

https://www.jdon.com/71571.html

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

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

相关文章

excel公式名称管理器

1.问题 在日常使用excel的时候,发布一个表格文件,需要限制表格的某列或某行只能从我们提供的选项中选择,自己随便填写视为无效,如下图所示,上午的行程安排只能从"在岗"、"出差"、"病假"…

java面试汇总

JVM内存模型与Java线程内存模型的区别 JVM内存模型描述的是Java虚拟机在执行Java程序时如何管理和使用内存,主体围绕:方法区(Method Area)、堆(Heap)、程序计数器(Program Counter Register&am…

AI绘图模型不会写字的难题解决了

介绍 大家好,最近有个开源项目比较有意思,解决了图像中不支持带有中文的问题。 https://github.com/tyxsspa/AnyText。 为什么不能带有中文? 数据集局限 Stable Diffusion的训练数据集以英文数据为主,没有大量包含其他语言文本的…

LeetCode-141环形链表 LeetCode-142环形链表二

一、前言 本篇文章在我之前讲完的链表、链表与递归的基础上进行讲解,本次我们以leetcode为例,讲解链表的其他题型,今天我们先了解一下环形链表,这里我们以leetCode141和leetCode142为例。 二、LeetCode141 首先关于这道题&#…

微服务注册中心之Eureka

微服务注册中心之Eureka eureka 搭建集群 版本说明 Spring Boot 2.1.7.RELEASE spring-cloud-starter-netflix-eureka-server Finchley.SR2 spring-boot-starter-security 2.1.7.RELEASE pom.xml 文件 <?xml version"1.0" encoding"UTF-8"?> &l…

游戏缺少emp.dll详细修复教程,快速解决游戏无法启动问题

在现代游戏中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“emp.dll丢失”。emp.dll是一个动态链接库文件&#xff0c;它包含了许多程序运行所需的函数和数据。当一个程序需要调用这些函数时&#xff0c;系统会从emp.dll文件中加载相应的内容。因此&#x…

VSCode上远程调试代码出现的问题

记录一下&#xff1a; 真的是汗流浃背了&#xff0c;师妹叫帮忙如何在VSCode上远程调试代码&#xff0c;一些自己已经经历过的问题&#xff0c;现在已经忘记了。又在网上一顿搜索&#xff0c;这次记录下吧。。。 出现以下问题&#xff1a; 1. 终端界面总是sh-4.4 $ &#xff…

【每日试题】java面试题之中间件

什么是中间件&#xff1f; 中间件是指位于客户端和服务器之间的一层软件&#xff0c;它可以提供一系列的服务&#xff0c;简化了开发和管理复杂的分布式应用系统。 中间件的分类有哪些&#xff1f; 中间件可以分为消息中间件、缓存中间件、数据访问中间件、分布式计算中间件、…

LINUX加固之命令审计

一、前言 在LINUX安全范畴中&#xff0c;安全溯源也是很重要的一个环节。对主机上所有曾操作过的命令详细信息需要有一份记录保存&#xff0c;当系统遭受破坏或者入侵&#xff0c;拿出这份记录&#xff0c;可以帮助定位一些可疑动作。 很多系统通常都会配置安全堡垒机&#xff…

jmeter断言-三种

1.响应断言 substring是指包含就行 不用完全相等 2.json断言 3.持续时间断言

Consule安装与SpringBoot集成

Consule Consul 是由 HashiCorp 开发的一款软件工具&#xff0c;提供了一组功能&#xff0c;用于服务发现、配置管理和网络基础设施自动化。它旨在帮助组织管理现代分布式和微服务架构系统的复杂性。以下是Consul的一些关键方面和功能&#xff1a; 服务发现&#xff1a;Consul…

JS常用数据类型转换

js提供了5中基本数据类型&#xff1a;数字 number 字符串 string 布尔 boolean 空值 null 未定义的 undefined 常用的是数字型和字符串型之间的转换&#xff0c;常用的转换方法如下&#xff1a; 1 数字型转换成字符串型 a) 使用String&#xff08;&#xff09;方…

java设计小分队01

1.开发流程&#xff1a; 编辑&#xff1a;生成.java文件编译&#xff1a;javac命令&#xff0c;生成.class文件运行&#xff1a;java命令 2.标识符下列那个&#xff08;不&#xff09;合法&#xff1a; 除了第一个词小写&#xff0c;其他词首字母大写&#xff1b;java标识符为…

Bash脚本中的分支控制:深入理解Case语句

在编写Bash脚本时&#xff0c;我们经常需要根据不同的条件执行不同的代码块。传统的if-elif-else语句在处理多条件分支时可能会变得冗长和复杂。幸运的是&#xff0c;Bash提供了一个更为简洁的选择结构&#xff1a;case语句。在本文中&#xff0c;我们将深入探讨case语句的使用…

2024第一篇: 架构师成神之路总结,你值得拥有

大家好&#xff0c;我是冰河~~ 很多小伙伴问我进大厂到底需要怎样的技术能力&#xff0c;经过几天的思考和总结&#xff0c;终于梳理出一份相对比较完整的技能清单&#xff0c;小伙伴们可以对照清单提前准备相关的技能&#xff0c;在平时的工作中注意积累和总结。 只要在平时…

仅仅几行 Python 代码,却可帮你快手完成大部分工作

Python 作为一种脚本语言&#xff0c;开发简单&#xff0c;几行代码却能发挥大作用。 本文将介绍几种有趣的 Python 脚本&#xff0c;一定能在你的生活和工作中发挥用处。 自动整理文件和文件夹 手动整理文件和文件夹可能很乏味。这个 Python 脚本可按扩展名类型自动将文件排…

NPC问题

1. P 问题和 NP 问题&#xff1a; P 问题&#xff08;多项式时间可解问题&#xff09;&#xff1a; P 问题是可以在多项式时间内有效解决的问题&#xff0c;即存在一个算法&#xff0c;其运行时间是输入规模的多项式函数。例如&#xff0c;排序算法、搜索算法等都属于 P 问题。…

【DevOps-02】Code编码阶段工具

一、简要说明 在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。 Git安装安装GitLab配置GitLab登录账户二、Git安装 Git官网 Githttps://git-scm.com/

gin框架实战(一)- HTTP请求参数校验之神器validator

1 快速安装 使用之前&#xff0c;首先要获取validator这个库&#xff1a; $ go get github.com/go-playground/validator/v10 2 功能 golang http 请求参数校验工具&#xff0c;具备复杂参数校验规则。 3 操作符 标记 标记说明 , 多操作符分割 | 或操作 - 跳过字段…

重新定义出行,PIX移动空间-Robobus2.0正式发布

PIX从创始之初就以重塑城市作为愿景&#xff0c;基于对未来终局的思考&#xff0c;我们重新定义了下一代汽车–移动空间&#xff0c;汽车不再只是一个交通工具&#xff0c;而是一个个提供服务的移动空间&#xff0c;这也将最终重塑城市&#xff0c;使城市成为一个真正的超级有机…