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

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

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

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

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

系统设计的目标

  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重合