系统架构为什么重要?常见的架构模式都有哪些?
一起来看下常见的架构模式:Client-Server、Peer to Peer、MVC、Layered、Distribute-Cluster、Micro-Service、Even-Source、Hexagonal 逐个击破。
Architecture,原意建筑学,其实软件架构的概念就是源于建筑学。建筑学是建筑物设计和建造相关的艺术和技术的综合。建筑学是一门横跨工程技术和人文艺术的学科。它研究的是建筑物可资使用的空间、可供欣赏的形象,以及围绕空间、形象如何产生确立、调整美化等的一系列问题。并且其所研究的对象不仅是建筑物本身,更主要的是研究人们对建筑物的要求及其如何得以满足,研究建筑物实体从无到有的产生过程中相应的策划、设计、实施等。
建筑学研究建筑的规划、设计和实施。软件架构研究软件的规划、设计和实施。
在架构设计中,根据业务、技术、组织、灵活性、可扩展性以及可维护性等因素,将应用系统划分成不同的部分,使这些部分之间相互分工、相互协作,从而完成特定的需求。架构贯穿系统实现的整个过程,是软件系统实现的主要参考,是软件系统实现的蓝图。软件系统的规划、设计和实施依架构的设计而组织实施。
系统架构为什么重要
我们知道摩尔定律——计算机硬件的能力大致每两年提高一倍的速度发展。然而软件开发
的流程却没有这样的提速过程,开发成本也没有下降,系统架构的设计方法论和设计模式不断变化,而这个重要的流程依旧没有一个完全可靠和一劳永逸的解决方案。为什么?软件开发过程有什么特别的难题?有下面几点:
1.复杂性(Complexity)
2.软件可以说是人类创造的最复杂的系统类型。软件的各个模块之间有各种显性或隐性的依赖关系,随着系统的成长和模块的增多,这些关系的数量往往以几何级数的速度增长。而理解运用这些复杂性的人并没有太多的变化。
3.不可见性(Invisibility)
4.软件工程师能直接看见源代码,但是源代码不是软件本身。并且静态的源代码和运行的系统也不一样,软件运行环境的复杂性也增加了软件系统的不可预测性。软件系统不能以简单的方式描述出来,设计文档,描述说明,流程图,架构图这些也不过是让复杂的软件系统以更易于理解和易于交流的方式展示,却依旧不能完全描述系统的全貌。
5.易变性(Changeability)
6.修改软件看似很容易,修改软件比修改硬件容易多了,修改软件系统也比修改一座巍立建筑物容易的多。所以人们自然地期待软件系统能够适应未来的变化。但变化却是复杂的,环境也是复杂的,这些复杂的情况往往让一个易于修改的事情却变成一件越来越困难的事情。
7.服从性(Conformity)
8.软件系统不能独立存在,它总是运行在硬件上面,也总是要服从系统中其他组成部分的要求,也要服从用户的要求、行业的要求。
软件系统的以上特性使得系统架构的设计显得尤其重要。系统架构设计通过以下方式来解决上面的软件难题:
∙peer抽象
∙抽象是系统架构设计的重要一步。抽象是将复杂的概念简单化。在最高层次上,将软件系统抽象为对象和过程两个高层次概念。对象可以是系统、组件、接口、类、方法等等不同层次的概念,过程是系统运行的方式和流程。抽象使具象的事物概念化,从而确定边界,
易于理解,易于交流。
∙分解
∙分解与组合相互作用。分解就是将高层次的抽象概念分解成低层次的抽象概念,就是将实体分成小的部件或组成部分,在应对复杂度的诸多方式中,”分而治之“是一项基本策略,它把大问题持续分解成小问题,直到每一个小问题都能够解决为止。
∙语言
∙语言的边界就是世界的边界。领域语言、设计语言确定系统的what、how和why。语言使系统显见于文档,设计图等等易于理解的层次,也使得系统的易变性被规范在可预见和可控制的范围之中。
几种架构模式
Client-Server
有了互联网就有了 client-server 模式。client-server 模式以请求-响应方式工作,客户端发送请求信息,服务端接受请求,作出相应处理,然后发回响应信息。所有我们访问的互联网网站都是这种架构。在桌面程序流行的时代,互联网还没有当前这么发达的时代。Client-Server 还只代表 Desktop Client-Server 模式,使用浏览器的方式称之为 B-S 模式,
即 Browser-Server 模式。如今 Browser、Desktop Application、Mobile Application、Mobile Web 等统称为 Client。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论