系统复杂度的几个方面

本文探讨了系统复杂度的不同方面,包括系统与子系统、模块与组件的关系,以及架构设计中的框架与架构。通过结构化程序设计、面向对象编程的历史背景,阐述了软件复杂度控制的重要性。文章强调了高性能、高可用、可扩展性和低成本等目标在架构设计中的挑战,并讨论了任务分配、任务分解、存储高可用、状态决策、可扩展性设计和成本控制等关键点,最后提到了安全和规模对系统复杂度的影响。
摘要由CSDN通过智能技术生成

系统与子系统

系统:系统是由一群有关联的个体组成的

  1. 规则:系统内的个体需要按照指定的规则运作。规则规定了系统内个体分工和协作的方式。
  2. 能力:系统能力与个体能力有本质的差别,系统能力不是个体能力之和,而是产生了新的能力。

子系统其实子系统的定义和系统定义是一样的,只是观察的角度有差异,一个系统可能是另外一个更大系统的子系统。

按照这个定义,系统和子系统比较容易理解。我们以微信为例来做一个分析。

  1. 微信本身是一个系统,包含聊天、登录、支付、朋友圈等子系统。
  2. 朋友圈这个系统又包括动态、评论、点赞等子系统。
  3. 评论这个系统可能又包括防刷子系统、审核子系统、发布子系统、存储子系统。
  4. 评论审核子系统不再包含业务意义上的子系统,而是包括各个模块或者组件,这些模块或者组件本身也是另外一个维度上的系统。例如,MySQLRedis等是存储系统,但不是业务子系统。

模块与组件

模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已

从逻辑的角度来拆分系统后,得到的单元就是模块;从物理的角度来拆分系统后,得到的单元就是组件划分模块的主要目的是职责分离;划分组件的主要目的是单元复用。

框架与架构

框架关注的是“规范”,架构关注的是“结构”软件架构指软件系统的顶层结构

首先,系统是一群关联个体组成,这些个体可以是子系统”“模块”“组件等;架构需要明确系统包含哪些个体

其次,系统中的个体需要“根据某种规则”运作,架构需要明确个体运作和协作的规则。

第一次软件危机与结构化程序设计(20世纪60年代~20世纪70年代)

结构化程序设计的主要特点是抛弃goto语句,采取“自顶向下、逐步细化、模块化”的指导思想。本质上还是一种面向过程的设计思想,但通过“自顶向下、逐步细化、模块化”的方法,将软件的复杂度控制在一定范围内,从而从整体上降低了软件开发的复杂度。结构化程序方法成为了20世纪70年代软件开发的潮流。

第二次软件危机与面向对象(20世纪80年代)

第二次软

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值