当前位置: 首页 > news >正文

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

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

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

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

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

系统设计的目标

  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

相关文章:

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

系统设计被定义为为系统的不同组件、接口和模块创建架构并提供有助于在系统中实现这些元素的相应数据的过程。系统设计是任何分布式系统设计背后的核心概念。 系统设计涉及识别数据源,它是描述、创建和规划框架以满足特定业务的必要性和先决条件的直觉。 为什么要…...

基于Python的城市热门美食数据可视化分析系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从XX点评APP采集北京市的餐饮商铺数据,利用数据挖掘技术对北京美食的分布、受欢迎程度、评价、评论、位置等情况进行了深入分析,方便了解城市美食店…...

万字长文谈自动驾驶occupancy感知

文章目录 prologue欢迎大家点赞收藏与我交流讨论paper listVision-based occupancy :1. [MonoScene: Monocular 3D Semantic Scene Completion [CVPR 2022]](https://arxiv.org/pdf/2112.00726.pdf)2. [Tri-Perspective View for Vision-Based 3D Semantic Occupancy Predictio…...

KBDNO1.DLL文件缺失,软件或游戏无法启动运行,怎样快速修复

不少小伙伴,求助电脑报错“KBDNO1.DLL文件缺失,软件或游戏无法启动或运行”,应该怎么办? 首先,我们先来了解“KBDNO1.DLL文件”是什么? KBDNO1.DLL是Windows操作系统中的一个动态链接库文件,主…...

计算机网络【EPOLL 源码详解】

IO多路复用 在以前,传统的网络编程是多线程模型,一个线程单独处理一个请求。 然而,线程是很昂贵的资源: 线程的创建和销毁成本很高,linux的线程实际上是特殊的进程;因此通常会使用线程池来减少线程创建和…...

第82讲:MySQL Binlog日志的滚动

MySQL Binlog日志的滚动 MySQL Binlog日志滚动指的就是产生一个新的Binlog日志,然后进行记录,因为如果都在一个Binlog中记录,查询是非常慢的,检索的效率也很低。 Binlog日志滚动有三种方法: 重启MySQL 数据库一般不重…...

2024.1.3C语言补录 宏函数

在C语言中,宏函数可以使用预处理器指令 #define 来定义。宏函数与常规函数类似,但它们在预处理阶段进行替换,而不是在运行时。 定义:#define 宏名称(参数列表) 宏体 其中: #define 是预处理器指令,用于定义宏。宏名…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Column组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Column组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Column组件 沿垂直方向布局的容器。 子组件 可以包含子组件。 接…...

快手推荐算法工程师三面回顾

快手三次技术面试一次HR面试的简单回顾,希望对大家有所启发。 一面 面试官一上来就让写算法题,第一个是计算岛屿数量,第二个是最长回文字串。 然后就是介绍自己的论文。对于论文的工作,面试官只是在问关于论文的问题&#xff0…...

Sonarqube安装(Docker)

一,拉取相关镜像并运行 # 拉取sonarqube镜像 docker pull sonarqube:9.1.0-community在运行之前要提前安装postgres并允许,新建数据库名为sonar的数据库 Docker安装postgres教程 docker run -d --name sonarqube --restartalways \ -p 19000:9000 \ …...

双击shutdown.bat关闭Tomcat报错:未设置关闭端口~

你们好,我是金金金。 场景 当我startup.bat启动tomcat之后,然后双击shutdown.bat关闭,结果报错了~ 排查 看报错信息很明显了,未配置关闭端口,突然想起来了我在安装的时候都选的是默认的配置,我还记得有这…...

HLS 2017.4 导出 RTL 报错:ERROR: [IMPL 213-28] Failed to generate IP.

软件版本:HLS 2017.4 在使用 HLS 导出 RTL 的过程中产生如下错误: 参考 Xilinx 解决方案:https://support.xilinx.com/s/article/76960?languageen_US 问题描述 DESCRIPTION As of January 1st 2022, the export_ip command used by Vivad…...

【Kubernetes】kubectl 常用命令

kubectl 常用命令 1.基础命令2.部署命令3.集群管理命令4.故障诊断与调试命令5.高级命令6.设置命令7.其他命令 kubectl 是 Kubernetes 提供的命令行管理工具。通过使用 kubectl,可以管理和操作 Kubernetes。 1.基础命令 命令 说明 create通过文件名或标准输入创建 …...

鸿蒙开发第一天

一、开发准备工作 1、开发工具的安装 1)下载地址:https://developer.huawei.com/consumer/cn/deveco-studio/ 2)查询API文档链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/syscap-00000014080893…...

Midjourney表情包制作及变现最全教程

盘点Midijourney(AIGF)热门赚米方法,总有一种适合你之AI绘画操作技巧及变现渠道剖析 【表情包制作】 首先我们对表情包制作进行详细的讲解: 当使用 Midjourney(AIGF) 绘画来制作表情包时,你可以…...

UNIAPP中借助store+watch完成实时数据

简介 手机端蓝牙连接校验仪,校验仪上传校验数据至手机完成展示。基于watch,完成实时展示数据。对象放在store中。实现分为store中的配置,数据接收,数据展示 store配置 在state中配置属性,在mutations中配置更新方法…...

COLMAP 三维重建 笔记

目录 安装COLMAP 需要设置环境变量 COLMAP数据下载 使用ColmapOpenMVS进行物体的三维重建 安装COLMAP 1.1 下载Colmap:https://demuc.de/colmap/#download 选择cuda版本的进行下载。 1.2 下载OpenMVS,可以选择下载源码自行编译也可以选择封装好的可…...

即时设计:一键查看设计稿与页面差异,让设计师的工作更便捷高效

设计稿走查 在设计工作中,对设计稿和实际页面进行对比是必不可少的环节。然而,传统的对比方式往往耗时耗力,无法精确测量差异。为了解决这个问题,我们推出了一款强大的工具,它可以通过图片对比,轻松查看设…...

知识库问答LangChain+LLM的二次开发:商用时的典型问题及其改进方案

前言 如之前的文章所述,我司下半年成立大模型项目团队之后,我虽兼管整个项目团队,但为让项目的推进效率更高,故分成了三大项目组 第一项目组由霍哥带头负责类似AIGC模特生成系统第二项目组由阿荀带头负责论文审稿GPT以及AI agen…...

Mac内心os:在下只是个工具,指望我干人事?

呜呜呜,今天去医院看病了,乌央央的好多人。最近在研究苹果开发者工具中的HealthKit,等我研究透给大家安利。今天还是继续闲聊吧😂😂提前感谢大家体谅我这个病号,发射小红心,biubiubiu~ 据说&am…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...