什么是架构

 
架构”这个词常见,但若是深究一下“架构”到底指什么,大部分人也许并不必定可以准确地回答。
例如:架构和框架是什么关系?有什么区别?
Linux 有架构,MySQL 有架构,JVM 也有架构,使用 Java 开发、MySQL 存储、跑在 Linux 上的业务系统也有架构,应该关注哪一个架构呢?
微信有架构,微信的登陆系统也有架构,微信的支付系统也有架构,当咱们谈微信架构时,究竟是在谈什么架构?
要想准确地回答这几个问题,关键在于梳理几个有关系而又类似的概念:系统与子系统、模块与组件、框架与架构。

 

 
1.系统与子系统
    系统:由一群有关联的个体组成,按照某种规则运做,能完成个别元件所不能单独完成的工做的群体。
    子系统:子系统也是由一群有关联的个体组成的系统。是更大的系统中的一部分。
 
2.模块与组件
    模块:软件模块(Module)是一套一致而互相有紧密关联的软件组织。包含了程序和数据结构两部分。模块有接口,模块间能够互相调用。
    组件:自包含的、可编程的、可重用的的软件单元。软件组件能够很容易被用于组装应用程序中。
     模块和组件都是系统的组成部分,只是从不一样的角度拆分系统而已。
 
3.框架与架构
    框架(framework):为了实现某个业界标准或完成特定基本任务的软件组件规范。也指为了实现某个软件组件规范时,提供规范要求只基础功能的软件产品。
    架构(Architecture):软件架构的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。
     框架关注的是“规范”,架构关注的是“结构”。
 
4.从新定义架构
    参考维基百科的定义,我将架构从新定义为: 软件架构指软件系统的顶层结构
    这个定义看似很简单,但包含的信息很丰富,基本上把系统、子系统、模块、组件、架构等概念都串起来了,我来详细解释一下。
    • 首先,“系统是一群关联个体组成”,这些“个体”能够是“子系统”“模块”“组件”等;架构须要明确系统包含哪些“个体”。
    • 其次,系统中的个体须要“根据某种规则”运做,架构须要明确个体运做和协做的规则。
    • 第三,维基百科定义的架构用到了“基础结构”这个说法,我改成“顶层结构”,能够更好地区分系统和子系统,避免将系统架构和子系统架构混淆在一块儿致使架构层次混乱。
 
5.架构的分类(系统架构,技术架构,应用架构)
    • 系统架构:指的完整系统的组成架构,例如系统分红几个部分?服务平台、管理门户、终端门户、ATM门户、外部系统以及接口、支撑系统等,将这些系统进行合理的划分。而后再进行功能分类细分,例如服务平台内部划分为系统管理、用户管理、账号管理、支付管理、接口层、统计分析等逻辑功能。总之,将整个系统业务分解为逻辑功能模块,而且科学合理,就是系统架构了。
    • 技术架构:从技术层面描述,主要是分层模型,例如持久层、数据层、逻辑层、应用层、表现层等,而后每层使用什么技术框架,例如Spring、hibernate、ioc、MVC、成熟的类库、中间件、WebService等,分别说明,要求这些技术可以将整个系统的主要实现归纳。
    • 应用架构:主要考虑部署,例如你不一样的应用如何分别部署,如何支持灵活扩展、大并发量、安全性等,须要画出物理网络部署图。按照应用进行划分的话,还须要考虑是否支持分布式SOA。