软件架构分类(转载)
思维导图:
作者:阮⼀峰(以下内容)
⽇期:2016年9⽉ 3⽇
软件架构(software architecture)就是软件的基本结构。
合适的架构是软件成功的最重要因素之⼀。⼤型软件公司通常有专门的架构师职位(architect),只有资深程序员才可以担任。
O'Reilly 出版过⼀本免费的⼩册⼦(),介绍了五种最常见的软件架构,是⾮常好的⼊门读物。我读后受益匪浅,下⾯就是我的笔记。
⼀、分层架构
分层架构(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)联系。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论