软件架构(software architecture)便是软件的根本结构。
适宜的架构是软件成功的最重要因素之一。大型软件公司一般有专门的架构师职位(architect),只要资深程序员才能够担任。
O'Reilly 出书过一本免费的小册子《Software Architecture Patterns》(PDF), 介绍了五种最常见的软件架构,是非常好的入门读物。我读后收获颇丰,下面便是我的笔记。
一、分层架构
分层架构(layered architecture)是最常见的软件架构,也是事实上的规范架构。假如你不知道要用什么架构,那就用它。
这种架构将软件分红若干个水平层,每一层都有明晰的人物和分工,不需求知道其他层的细节。层与层之间经过接口通讯。
尽管没有清晰约好,软件一定要分红多少层,可是四层的结构最常见。
• 体现层(presentaTIon):用户界面,担任视觉和用户互动
• 事务层(business):完结事务逻辑
• 耐久层(persistence):供给数据,SQL 句子就放在这一层
• 数据库(database) :保存数据
有的软件在逻辑层和耐久层之间,加了一个服务层(service),供给不同事务逻辑需求的一些通用接口。
用户的恳求将顺次经过这四层的处理,不能越过其间任何一层。
长处
• 结构简略,简略了解和开发
• 不同技术的程序员能够分工,担任不同的层,天然合适大多数软件公司的安排架构
• 每一层都能够独立测验,其他层的接口经过模仿处理
缺陷
• 一旦环境改变,需求代码调整或添加功用时,一般比较费事和费时
• 布置比较费事,即便只修正一个小地方,往往需求整个软件重新布置,不简略做继续发布
• 软件晋级时,或许需求整个服务暂停
• 扩展性差。用户恳求很多添加时,有必要顺次扩展每一层,因为每一层内部是耦合的,扩展会很困难
二、事情驱动架构
事情(event)是状况发生改变时,软件宣布的告诉。
事情驱动架构(event-driven architecture)便是经过事情进行通讯的软件架构。它分红四个部分。
• 事情行列(event queue):接纳事情的进口
• 分发器(event mediator):将不同的事情分发到不同的事务逻辑单元
• 事情通道(event channel):分发器与处理器之间的联络途径
• 事情处理器(event processor):完结事务逻辑,处理完结后会宣布事情,触发下一步操作
关于简略的项目,事情行列、分发器和事情通道,能够合为一体,整个软件就分红事情署理和事情处理器两部分。
长处
• 分布式的异步架构,事情处理器之间高度解耦,软件的扩展性好
• 适用性广,各种类型的项目都能够用
• 功用较好,因为事情的异步实质,软件不易发生阻塞
• 事情处理器能够独登时加载和卸载,简略布置
缺陷
• 触及异步编程(要考虑长途通讯、失掉呼应等状况),开发相对杂乱
• 难以支撑原子性操作,因为事情经过会触及多个处理器,很难回滚
• 分布式和异步特性导致这个架构较难测验
三、微核架构
微核架构(microkernel architecture)又称为"插件架构"(plug-in architecture),指的是软件的内核相对较小,首要功用和事务逻辑都经过插件完结。
内核(core)一般只包括体系运转的最小功用。插件则是相互独立的,插件之间的通讯,应该削减到最低,防止呈现相互依靠的问题。
长处
• 杰出的功用延伸性(extensibility),需求什么功用,开发一个插件即可
• 功用之间是阻隔的,插件能够独立的加载和卸载,使得它比较简略布置,
• 可定制性高,习惯不同的开发需求
• 能够渐进式地开发,逐渐添加功用
缺陷
• 扩展性(scalability)差,内核一般是一个独立单元,不简略做成分布式
• 开发难度相对较高,因为触及到插件与内核的通讯,以及内部的插件挂号机制
四、微服务架构
微服务架构(microservices architecture)是服务导向架构(service-oriented architecture,缩写 SOA)的晋级。
每一个服务便是一个独立的布置单元(separately deployed unit)。这些单元都是分布式的,相互解耦,经过长途通讯协议(比方REST、SOAP)联络。
微服务架构分红三种完结形式。
• RESTful API 形式:服务经过 API 供给,云服务就归于这一类
• RESTful 运用形式:服务经过传统的网络协议或许运用协议供给,背面一般是一个多功用的运用程序,常见于企业内部
• 会集音讯形式:选用音讯署理(message broker),能够完结音讯行列、负载均衡、一致日志和反常处理,缺陷是会呈现单点失利,音讯署理或许要做成集群
长处
• 扩展性好,各个服务之间低耦合
• 简略布置,软件从单一可布置单元,被拆成了多个服务,每个服务都是可布置单元
• 简略开发,每个组件都能够进行继续集成式的开发,能够做到实时布置,不间断地晋级
• 易于测验,能够独自测验每一个服务
缺陷
• 因为着重相互独立和低耦合,服务或许会拆分得很细。这导致体系依靠很多的微服务,变得很杂乱和粗笨,功用也会欠安。
• 一旦服务之间需求通讯(即一个服务要用到另一个服务),整个架构就会变得杂乱。典型的比如便是一些通用的 UTIlity 类,一种处理方案是把它们拷贝到每一个服务中去,用冗余交换架构的简略性。
• 分布式的实质使得这种架构很难完结原子性操作,买卖回滚会比较困难。
五、云架构
云结构(cloud architecture)首要处理扩展性和并发的问题,是最简略扩展的架构。
它的高扩展性,首要原因是没运用中心数据库,而是把数据都仿制到内存中,变成可仿制的内存数据单元。然后,事务处理才能封装成一个个处理单元(prcessing unit)。访问量添加,就新建处理单元;访问量削减,就封闭处理单元。因为没有中心数据库,所以扩展性的最大瓶颈消失了。因为每个处理单元的数据都在内存里,最好要进行数据耐久化。
这个形式首要分红两部分:处理单元(processing unit)和虚拟中间件(virtualized middleware)。
• 处理单元:完结事务逻辑
• 虚拟中间件:担任通讯、坚持sessions、数据仿制、分布式处理、处理单元的布置。
虚拟中间件又包括四个组件。
• 音讯中间件(Messaging Grid):办理用户恳求和session,当一个恳求进来今后,决议分配给哪一个处理单元。
• 数据中间件(Data Grid):将数据仿制到每一个处理单元,即数据同步。确保某个处理单元都得到相同的数据。
• 处理中间件(Processing Grid):可选,假如一个恳求触及不同类型的处理单元,该中间件担任和谐处理单元
• 布置中间件(Deployment Manager):担任处理单元的发动和封闭,监控负载和呼应时刻,当负载添加,就新发动处理单元,负载削减,就封闭处理单元。
长处
• 高负载,高扩展性
• 动态布置
缺陷
• 完结杂乱,本钱较高
• 首要合适网站类运用,不适宜很多数据吞吐的大型数据库运用
• 较难测验