何谓架构

架构到底是什么?

框架是和架构比较相似的概念,且两者有较强的关联关系,参考维基百科框架与架构的定义:

软件架构:是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对像。

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

也就是说明了:

1.框架是组件规范:例如,MVC就是一种最常见的开发规范,类似的还有MVP、MVVM、J2EE等框架。

2.框架提供基础功能的产品:例如,SpringMVC是MVC的开发框架,除了满足MVC的规范,Spring提供了很多基础功能来帮助我们实现功能,包括注解(@Controller等)、SpringSecurity、SpringJPA等很多基础功能。

软件架构指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。

按照维基百科的解释:软件架构实则是各个组件的互相搭配和组件之间的相互配合,是抽象的高层事务的的逻辑流程。简单来说架构就是各个系统组件如何通讯、协调、以及控制操作的逻辑。可以类比人体的结构来举个简单的例子来理解就是:人体是由心肝脾肺胃、耳鼻嘴等多个重要器官组成,各个器官各司其职,它们之间相互配合共同维持人的正常生活。这里的心、胃等就是整个人体架构的组件,血液就是数据,血管就是传输数据的媒介,人的皮肤和长相就是用户的界面风格,逻辑组织就是食物要首先进入胃去消化然后才会进入大肠,而不是进入肾脏。按照这个解释,我们使用的kafka、redis、ssm、rabbitmq、xxljob等都是组件,这些组件各有各的作用,各自承担自己的责任去共同完成整个系统的高效流转.单纯从定义的角度来看,框架和架构的区别还是比较明显的,框架关注的是“规范”,架构关注的是“结构”。

参考维基百科的定义,可以架构重新定义为:软件架构指软件系统的顶层结构。这个定义看似很简单,但包含的信息很丰富,基本上把系统、子系统、模块、组件、架构等概念都串起来了。

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

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

第三,维基百科定义的架构用到了“基础结构”这个说法,我改为“顶层结构”,可以更好地区分系统和子系统,避免将系统架构和子系统架构混淆在一起导致架构层次混乱。

架构漫谈对架构这样总结:

1.根据要解决的问题,对目标系统的边界进行界定。

2.并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。

3.并对这些切分出来的部分,设立沟通机制。

4.根据3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。

为什么要有架构

首先,架构设计可以降低满足需求和需求变化的开发成本,对于复杂的需求,架构设计通过对系统抽象分解,把复杂系统拆分,例如淘宝这类复杂的网站,最终拆分成一个个小的微服务,单个微服务开发的难度,其实和个人博客网站的难度相差无几,普通程序员都可以完成。对于需求的变化,已有一些成熟的架构实践,例如分层架构,把UI界面和业务逻辑分离,把UI的变动不影响业务逻辑的代码。

其次,架构设计可以帮助组织人员一起高效协作,对复杂系统的抽象拆分后,开发人员可以独自完成功能模块,最后通过约定好的接口协议集成。

前后端分拆后,有的开发人员就负责前段UI开发,有的就负责后端服务的开发,再根据团队规模大小,前段还可以再细分,有的负责iOS,有的负责网站,有的负责android,这样最终各个开发小组规模不大,既有效协作,又能各自保证战斗力。

再次,架构设计可以帮助组织好各种技术.架构设计可以用合适的编程语言和协议,把框架、技术组件、数据库等技术或者工具有效组织起来,一起实现需求目标。经典的分层架构,UI层通过选择合适的前端框架,例如React/Vue实现复杂的界面逻辑,服务层用Web框架提供稳定的网络服务,数据访问层通过数据库API读写数据库,数据库就负责记录数据

最后,架构设计可以保障服务稳定运行。现在很多成熟的架构设计方案,可以保障服务的稳定运行,比如分布式的架构,可以把高访问量分摊到不同的服务器,这样即使流量很大,分流到单台服务器压力也不大,比如异地多活这样的架构方案保证一个机房宕机,还可以继续服务。

我们可以这么说,架构设计就是通过组织人员和技术,低成本满足需求和需求变化,保障软件稳定高效运行。

架构设计的重要性

首先架构设计可以降低软件开发的风险,在设计变更相对容易的阶段,考虑架构可能的方案。其次架构设计是降低成本,改进质量,按时和按需交付产品的关键因素。

一个简单的"helloworld"程序,你不会去想着做什么架构设计,直接就代码实现了。不过如果让你实现一个双十一秒杀系统时,你还可以直接上来就写代码吗?这时候你就需要进行系统分析,架构设计等一系列工作。随着软件系统规模的增加,系统的组织结构的复杂,会导致了一系列的问题:内部耦合严重,开发效率低;牵一发动全身,后续修改和扩展困难;系统逻辑复杂,容易出问题,排查修复困难。

架构设计的主要目的就是为了解决复杂度带来的问题。理解每个架构背后所需要解决的复杂点,对比自己的业务复杂点,可以参考复杂点相似的方案。

 

posted @ 2022-09-14 11:28  学习中_1  阅读(224)  评论(0编辑  收藏  举报