一、概念
架构是体现在组件中的一个系统的基本组织、它们彼此的关系与环境的关系及指导它的设计和发展的原则。
系统是组织起来完成某一特定功能或一组功能的组件集。系统这个术语包括了单独的应用程序、传统意义上的系统、子系统、系统之系统、产品线、整个企业及感兴趣的其他集合。
系统用于完成其环境中的一个或多个任务。
环境或者上下文决定了对这个系统的开发、运作、政策以及会对系统造成其他影响的环境和设置。
任务是由一个或者多个利益相关者通过系统达到一些目标的系统的一个用途或操作。
二、系统架构
系统架构(System Architecture )是系统的一种整体的高层次的结构表示,是系统的骨架和根基,支撑和链接各个部分,包括组件、连接件、约束规范以及指导这些内容设计与演化的原理,它是刻画系统整体抽象结构的一种手段。系统架构设计的目的是对需要开发的系统进行一系列相关的抽象,用于指导系统各个方面的设计与实现,架构设计在系统开发过程中起着关键性作用,架构设计的优劣决定了系统的健壮性和生命周期的长短。
三、架构设计的作用
架构设计的作用主要包括以下几点:
·解决相对复杂的需求分析问题;
·解决非功能属性在系统占据重要位置的设计问题;
·解决生命周期长、扩展性需求高的系统整体结构问题;
·解决系统基于组件需要的集成问题;
·解决业务流程再造难的问题。
----系统架构设计是成熟系统开发过程中的一个重要环节,是连接用户需求和系统进一步设计与实现的桥梁,也是系统早期阶段质量保证的关键步骤。
四、系统架构发展阶段

五、软件架构的常用分类及建模方法
比较典型的架构模型包括分层架构 、事件驱动架构 、微核架构 、微服务架构 和云架构等五类。
1、分层架构
分层架构:将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口进行通信。

核心思想是分而治之,其中各层的作用:
①表现层(Presentation Layer):用户界面UI,负责视觉和用户互动;
②业务层(Business Layer):实现业务逻辑;
③持久层(Persistence Layer):提供数据,SQL语句就放在这一层;
④数据库(Database Layer):保存数据。
有的项目在逻辑层(业务层)和持久层之间加了一个服务层(Service),提供不同业务逻辑需要的一些通用接口。用户的请求将依次通过这四层的处理,不能跳过其中任何一层。
2、事件驱动架构
事件驱动架构(EDA)是通过事件进行通信的软件架构,是一种流行的分布式架构模式,适用于松散耦合系统。分成四个部分:

其中各个部分的功能:
①事件队列(Event Queue):接收事件的入口;
②分发器(Event Mediator):将不同的事件分发到不同的业务逻辑单元;
③事件通道(Event Channel):分发器与处理器之间的联系渠道;
④事件处理器(Event Processor):实现业务逻辑,处理完成后会发出事件,触发下一步操作。
对于简单的项目,事件队列、分发器和事件通道可以合为一体,整个软件就分成事件代理和事件处理器两部分。
3、微核架构
微核架构(Microkernel Architecture )又称为插件架构(Plug-in Architecture),是指软件的内核相对较小,主要功能和业务逻辑都通过插件实现。内核(Core )通常只包含系统运行的最小功能。插件则是互相独立的,插件之间的通信应该减少到最低,避免出现互相依赖的问题。

组成部分及作用:
■ 核心系统(内核):负责和具体业务功能无关的通用功能(系统运行的最小功能),例如模块加载、模块间通信等 。
■ 插件模块:负责实现具体的业务逻辑,插件是互相独立的,插件之间的通信应该减少到最低,避免出现互相依赖的问题。
4、微服务架构
微服务架构(Microservices Architecture )是服务导向架构(Service-Oriented Architecture, SOA)的升级。每一个服务就是一个独立的部署单元(Separately Deployed Unit)。这些单元都是分布式的,互相解耦,通过远程通信协议(比如REST, SOAP)联系。

微服务架构分成三种实现模式:
· RESTful API模式:服务通过API提供,云服务就属于这一类;
· RESTful应用模式:服务通过传统的网络协议或者应用协议提供,背后通常是一个多功能的应用程序,常见于企业内部;
· 集中消息模式:采用消息代理(Message Broker)可以实现消息队列、负载均衡、统一日志和异常处理,缺点是会出现单点失败,消息代理可能要做成集群。
5、云架构
云架构(Cloud Architecture)主要解决扩展性和并发的问题,是最容易扩展的架构。它的高扩展性体现在将数据都复制到内存中,变成可复制的内存数据单元,然后将业务处理能力封装成一个个处理单元(Processing Unit)。若访问量增加,就新建处理单元;若访问量减少,就关闭处理单元。由于没有中央数据库,所以扩展性的最大瓶颈消失了。由于每个处理单元的数据都在内存里,需要进行数据持久化。云架构主要分成两部分:处理单元(Processing Unit)和虚拟中间件(Virtualized Middleware)。

(1) 处理单元:实现业务逻辑。
(2) 虚拟中间件:负责通信、保持会话控制(sessions)、数据复制、分布式处理和处理单元的部署。 虚拟中间件又包含四个组件:
-
消息中IIE件(Messaging Grid):管理用户请求和会话控(sessions),当一个请求进来以后,它决定分配给哪一个处理单元。
-
数据中间件(Data Grid):将数据复制到每一个处理单元,即数据同步。保证某个处理单元都得到同样的数据。
-
处理中间件(Processing Grid):可选,如果一个请求涉及不同类型的处理单元,该中间件负责协调处理单元。
-
部署中间件(Deployment Manager):负责处理单元的启动和关闭,监控负载和响应时间,当负载增加,就新启动处理单元,负载减少,就关闭处理单元。
六、软件架构的模型
系统架构的常用建模方法,根据建模的侧重点的不同,可以将分成4种:结构模型 、框架模型 、动态模型 和过程模型。
1、结构模型:这是一个最直观、最普遍的建模方法。此方法以架构的构件、连接件和其他概念来刻画结构。并力图通过结构来反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格和性质。研究结构模型的核心是架构描述语言。
2、框架模型:框架模型与结构模型类似,但它不太侧重描述结构的细节,而更侧重整体的结构。框架模型主要以一些特殊的问题为目标建立只针对和适应问题的结构。
3、动态模型:动态模型是对结构或框架模型的补充,主要研究系统的"大颗粒"行为的性质。例如,描述系统的重新配置或演化。这里的动态可以是指系统总体结构的配置、建立或拆除通信或计算的过程,这类系统模型常是激励型的。
4、过程模型:过程模型是研究构造系统的步骤和过程,其结构是遵循某些过程脚本的结果。
这4种模型并不是完全独立的,通过有机的结合才可形成一个完整的模型来刻画软件架构,也将能更加准确、全面地反映软件架构。软件架构可从不同角度来描述用户所关心架构的特征。
七、软件架构的应用场景

而对于现代大型软件,很少使用单一的架构风格进行设计与开发,而是混合多种风格,从不同视角描述大型软件系统的能力,并可保证软件系统的可靠性、可扩展性、可维护性等非功能属性的正确描述。