架构设计的目的

第一章:架构设计的目的


什么是架构?

问题:架构到底是做什么?架构师这个职位应该做什么? 很可能已经成为架构师的人,也不明确。这种不明确,会导致,架构师没有系统的做设计的能力,也无法分解工作,指导软件工程师,完成工作。最终导致混乱。


架构师的职责

网上架构师招聘的JD(职位描述)

架构师招聘

  • 业务职责:分析需求,明确业务的可行性

  • 管理这里:流程优化、组织建设、氛围建设

  • 架构师技术职责:分析技术,明确技术的可行性


软件架构的定义

软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件体系结构是构建计算机软件实践的基础。

要理解这个概念,需要先理解一些软件设计中其他的一些概念。

软件架构的几种容易混淆的概念。


系统与子系统的概念

我们经常会听到系统与子系统的概念。

系统是整体的概念,是由一系列子系统组成。各子系统之间是互相关联的。

子系统也是一个整体的概念,是由更小的一系列单元组成。

系统与子系统关系

系统与子系统的几个特性:

  1. 子系统之间是有联系的:子系统之间是有关系的。电脑由内存、CPU、主板等子系统组成,内存、CPU、美女是不能组成和一套系统的。

  2. 子系统之间是有分工的:子系统应该根据自己定义的规则来搭建。 例如:内存不能做CPU的事情。

正是有这些概念,才能把大系统变为小系统。


系统与子系统的举例

以QQ为例: 1.QQ是一个系统,包含了聊天、QQ空间、QQ红包能子系统。 2.QQ空间这个系统又包含了相册、评论、点赞等子系统 3.点赞这个系统又包含了防坐标点赞、点赞统计、点赞推送等子系统。


模块与组件的概念

日常所闻,易混淆:

1.在你的系统中,登录模块负责登录,注销模块负责注销。

2.邮件模块中,我们使用了消息组件Kafka,作为消息中间件。

模块与组件关系


什么是模块

软件模块(Software Module)是一套一致而互相有紧密关连的软件组织。包含了程序和数据结构两个部分。

软件模块是现代软件开发往往利用模块作合成的单位。 模块的接口表达了由该模块提供的功能和调用它时所需的元素。 模块是可能分开地被编写的单位,能允许广泛人员同时协作、编写及研究不同的模块。

重点:程序、数据结构、代码、接口

模块代码


什么是组件

软件组件,定义为自包含的、可编程的、可重用的、与语言无关的软件单元。

软件组件可以很容易被用于组装应用程序中[1]。

如:Kafka、Redis、用户组件(Ant Design)

中间件组件

Ant desgin react组件


框架与架构的区别

框架和架构经常出现,很难分清。


框架的定义

经常听说MVC框架、

软件框架(software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件 组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

  • 框架是一种组件的规范,例如J2EE规范、MVC三层框架

  • 可以是软件产品,如Spring MVC就是一种产品,Dubbox 有可以理解为实现分布式调用的一种框架或产品。


软件架构

软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。软件体系结构是构建计算机软件实践的基础。

软件架构更注对整个系统的描述,而不是整个系统的开发规范。

框架更注重规范、架构更注重组成元素之间的关系,结构。

架构肯定比框架要大气。

框架 架构
目的 是一种约束,一种规范 架构让我们能够正确、合理地理解、设计和构建复杂的信息系统。
词性 名词:是一个客观的存在的规范,标准 动词:是一个方法论,包含一系列活动过程和步骤

软件架构的目的


软件架构为什么出现


软件架构的目的

软件由1个人编写到1个团队编写,代码越来越复杂,Linux系统超千万代码。软件架构出现的目的是解决复杂性,将复杂软件切分为一个个小系统、小模块、小组件。然后交于不同的人,甚至小组实现。

解决复杂性

解决复杂性

解决复杂性

解决复杂性

解决复杂性


从哪里切入架构

不知道如何开始,最架构师忌讳的事情。初学者,经常遇到的问题:

1.老板说我们开始步入直播领域。直播这么多模块,我应该从哪里开始,用户中心、推荐系统、视频存储、视频压缩、视频分发? 到底哪里开始。

2.怎么设计指标,让大家可以根据指标写程序。 性能指标、高可以用指标怎么设计?

3.我到底使用spring boot好,还是使用django好?

4.到底用mysql好,还是pqsql好?

架构的目的:解决复杂性,让复杂的事情,能够简单,最后落地 。 从最困难的开始设计。