系统设计是定义满足特定要求的系统的架构,接口和数据的过程,在您对系统有了需求之后,下一步就是将它们转化为技术规范,以便构建您的系统。
这是系统设计所在的地方。系统设计为您提供了针对您的需求的技术解决方案。系统设计是一个迭代过程,因此您可能最终会获得满足系统要求的多种设计。
什么是系统设计
系统设计是为满足特定需求的系统而定义架构、接口和数据的过程。以满足企业或组织的特定需求
在了解需求之后,将需求转换为满足客户需求的物理系统设计。根据是自己使用系统和提供商业解决方而实施不同的设计活动
系统设计需要一个系统的方法来建立和设计一个系统。一个好的系统设计需要工程师考虑所有的基础设施,从硬件/软件,到数据及其存储方式。
系统设计包括以下设计方法
架构设计:描述系统的视图、模型、行为和基础设施。
逻辑设计:表示系统的数据流和输入/输出
物理设计:包括用户如何新增、修改信息,系统如何向用户表示信息,以及数据如何建模/存储。
不同类型的系统
您可以使用不同的方法来满足系统对可扩展性、可靠性、安全性、性能和一致性的要求
水平缩放
在水平缩放中,通过添加更多的机器,以应对不断增长的需求/流量。采用负载均衡方式在整个系统上分配负载。如果其中一个服务挂掉后,请求将重定向到其他机器上的服务。并且用户增加时会很好地进行扩展。
垂直缩放
垂直扩展使用一台机器来处理所有请求,并提高响应时间和吞吐量。尽管它提供了更快的网络调用、数据一致性和无负载平衡,但有单点故障和硬件限制
单体应用
单体应用程序,把一个系统的不同组件打包在一起。这些对于小型团队来说可能方便开发,并且具有更快的过程调用。尽管如此,这可能会增加代码管理的复杂度和单点故障
微服务
微服务把系统拆分成不同的子服务,每个子服务可以进行单独开发并定义良好的接口、可进行独立多节点部署。具有高度的可测试性和可维护性。微服务开发比较复杂,需要引入服务治理。
Step 1: 澄清需求
这是重要的一步,需要对需求进行分类(功能需求+用户期望、非功能需求/软件质量)和分解以便定义和分解目标、消除歧义、识别潜在的瓶颈。这一步有助于使我们关注主要目标。
功能需求
功能需求是系统必须交付的需求。这些是系统的主要目标。功能需求包括业务规则、身份验证、管理功能、授权级别等。
非功能要求
非功能需求通过不同的质量要求来定义系统设计。非功能性需求包括性能、安全性、可靠性、可伸缩性、可维护性、可用性、高可用性、一致性等。我们可以用这些指标来衡量系统设计的质量
Step 2: 评估系统的重要部分
这一步是关于系统的规模、根据系统的不同采用的评估方式也不同如果如每秒查询次数(QPS)、每秒处理的事务数量(TPS)、并发数、吐吞量、页面访问量(PV)、日活(DAU Daily Active User))、月活(MAU Month Active User)、和系统需要处理的数据、吐吞量、存储、带宽等参数。
💡
QPS:
Queries Per Second,每秒查询数。每秒能够响应的查询次数。QPS 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。每秒的响应请求数,也即是最大吞吐能力。TPS: Transactions Per Second 的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。
Step 3: 数据流
这涉及系统的数据模型以及数据如何在不同组件之间传输。选择数据库系统也是其中的一部分,比如关系型数据库、非关系型数据库、图数据库
Step 4: 组件设计
一次性不可能设计出一个完整的系统、我们需要把系统拆分成不同的组件/子系统,然后对每个组件进行详细的设计,但是在这一步只需要进行组件拆分画出组件之间的交互关系。
Step 5: 详细设计
在Setp4中确定了组件,在这一步需要对每个组件进行详细的设计,分析每个组件锁解决特定问题的技术方案,建议至少设计三种可选技术方案,然后分析每个技术方案的优缺点,选择一个合适的方案
在这个阶段进行权衡分析也很重要。在这一步骤中,通常会考虑到这些问题:
我们需要缓存多少数据才能加快响应时间?
我们应该在哪里使用负载均衡器?
是否需要对数据进行分区以分发到多个数据库?
部署节点的数量
是否需要进行加入限流、降级、熔断
是否需要采用消息队列
是否需要分布式锁、分布式事务
是否就需要链路跟踪、监控
Step 6: 识别并解决瓶颈
通过完成详细的设计,下一步是识别系统中的瓶颈并减轻它们。瓶颈可以包括流量,数据,存储,可用性,冗余,备份等的任何内容。
现阶段需要考虑的一些问题是
这个系统是否有单点故障? 我们如何排除它?
如果丢失了一些服务器,您是否有足够的数据副本为用户提供服务?
我们有足够的服务副本来防止关闭吗?
记住要保持你的设计简单,事情不会总是按照你设计方式进行,所以你可能在系统设计、开发过程中做出一些设计变更。
现代企业架构框架白皮书 | 跟着Byte学架构

