系统架构(SystemArchitecture),软件架构(SoftArchitecture)是IT领域常见的名词,架构设计是软件系统构建过程中极其关键的一部分。
系统架构为什么重要?常见的架构模式又有哪些呢?
一起来看下常见的架构模式:Client-Server、PeertoPeer、MVC、Layered、Distribute-Cluster、Micro-Service、Even-Source、Hexagonal逐个击破。
Architecture,原意建筑学,其实软件架构的概念就是源于建筑学。建筑学是建筑物设计和建造相关的艺术和技术的综合。建筑学是一门横跨工程技术和人文艺术的学科。它研究的是建筑物可资使用的空间、可供欣赏的形象,以及围绕空间、形象如何产生确立、调整美化等的一系列问题。并且其所研究的对象不仅是建筑物本身,更主要的是研究人们对建筑物的要求及其如何得以满足,研究建筑物实体从无到有的产生过程中相应的策划、设计、实施等。
建筑学研究建筑的规划、设计和实施。软件架构研究软件的规划、设计和实施。
在架构设计中,根据业务、技术、组织、灵活性、可扩展性以及可维护性等因素,将应用系统划分成不同的部分,使这些部分之间相互分工、相互协作,从而完成特定的需求。架构贯穿系统实现的整个过程,是软件系统实现的主要参考,是软件系统实现的蓝图。软件系统的规划、设计和实施依架构的设计而组织实施。
系统架构为什么重要我们知道摩尔定律——计算机硬件的能力大致每两年提高一倍的速度发展。然而软件开发的流程却没有这样的提速过程,开发成本也没有下降,系统架构的设计方法论和设计模式不断变化,而这个重要的流程依旧没有一个完全可靠和一劳永逸的解决方案。为什么?软件开发过程有什么特别的难题?有下面几点:
复杂性(Complexity)
软件可以说是人类创造的最复杂的系统类型。软件的各个模块之间有各种显性或隐性的依赖关系,随着系统的成长和模块的增多,这些关系的数量往往以几何级数的速度增长。而理解运用这些复杂性的人并没有太多的变化。
不可见性(Invisibility)
软件工程师能直接看见源代码,但是源代码不是软件本身。并且静态的源代码和运行的系统也不一样,软件运行环境的复杂性也增加了软件系统的不可预测性。软件系统不能以简单的方式描述出来,设计文档,描述说明,流程图,架构图这些也不过是让复杂的软件系统以更易于理解和易于交流的方式展示,却依旧不能完全描述系统的全貌。
易变性(Changeability)
修改软件看似很容易,修改软件比修改硬件容易多了,修改软件系统也比修改一座巍立建筑物容易的多。所以人们自然地期待软件系统能够适应未来的变化。但变化却是复杂的,环境也是复杂的,这些复杂的情况往往让一个易于修改的事情却变成一件越来越困难的事情。
服从性(Conformity)
软件系统不能独立存在,它总是运行在硬件上面,也总是要服从系统中其他组成部分的要求,也要服从用户的要求、行业的要求。
软件系统的以上特性使得系统架构的设计显得尤其重要。系统架构设计通过以下方式来解决上面的软件难题:
抽象
抽象是系统架构设计的重要一步。抽象是将复杂的概念简单化。在最高层次上,将软件系统抽象为对象和过程两个高层次概念。对象可以是系统、组件、接口、类、方法等等不同层次的概念,过程是系统运行的方式和流程。抽象使具象的事物概念化,从而确定边界,易于理解,易于交流。
分解
分解与组合相互作用。分解就是将高层次的抽象概念分解成低层次的抽象概念,就是将实体分成小的部件或组成部分,在应对复杂度的诸多方式中,”分而治之“是一项基本策略,它把大问题持续分解成小问题,直到每一个小问题都能够解决为止。
语言
语言的边界就是世界的边界。领域语言、设计语言确定系统的what、how和why。语言使系统显见于文档,设计图等等易于理解的层次,也使得系统的易变性被规范在可预见和可控制的范围之中。
几种架构模式Client-Servercs有了互联网就有了client-server模式。client-server模式以请求-响应方式工作,客户端发送请求信息,服务端接受请求,作出相应处理,然后发回响应信息。所有我们访问的互联网网站都是这种架构。在桌面程序流行的时代,互联网还没有当前这么发达的时代。Client-Server还只代表DesktopClient-Server模式,使用浏览器的方式称之为B-S模式,即Browser-Server模式。如今Browser、DesktopApplication、MobileApplication、MobileWeb等统称为Client。
因此我们当前访问的大部分网站,如新闻咨询网站、博客网站等等都属于这种模式。
PeertoPeerp2p端对端服务模式(PeertoPeer,简称P2P),亦称为“点对点模式”,是指通过互联网将个人与个人连接起来,绕开中心平台而直接提供服务、完成交易的模式。P2P的早期含意是计算机通信领域中的“对等网络协议”,它打破了传统的Client/Server(C/S)模式,使得成千上万台彼此连接的计算机都处于对等地位,网络的参与者直接共享他们所拥有的一部分硬件资源(包括处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过互联网,能被其它对等节点(Peer)直接访问而无需经过统一的中间体。在该网络中的参与者既是资源(服务或内容)提供者(Server),又是资源获取者(Client)。
P2P模式流行于文件分享与下载、计算与存储、即时通信和协同共享等领域。
MVCmvcModel-View-Controller,MVC架构是面向对象编程的一大进步。服务将逻辑划分为三个不同的组建:Model——模型,即数据,通常存储在数据库中,在内存中进行逻辑操作。View——用户可见的组建,用于用户交互和数据展示,如WebGUI。Controller——逻辑操作,连接Model和View的组件,操作Model逻辑和View交互展示逻辑。
MVC模式在客户端和H5前端都比较流行。也一直是Web后端流行的架构模式,在JavaWeb领域催生的Struts、SpringMVC等Web后台框架,让曾经复杂的Web开发变成一种异常简单的开发。
随着前后端渐渐分离,之前的后台MVC已经将View完全交于前端,前后端通过相关协议通信,完成View数据的传输。
Layered分层架构是运用最为广泛的架构模式,几乎每个软件系统都需要通过层(Layer)来隔离不同的