5种主要的软件架构模式
程序员的成长之路互联网/程序员/技术/资料共享 关注
阅读本文大概需要 4.5 分钟。
译者:王延飞译文链接:https://dzone.com/articles/5-major-software-architecture-patterns在全球软件架构峰会上,我们讨论了很多软件架构模式,因此我决定写一篇有关它的文章,重点介绍知名的软件架构师的见解。
什么是软件架构模式?
软件架构模式是经过验证的,具有良好设计结构的方法。更具体地说,架构模式是在实践中归纳总结的一组设计决策,具有明确定义的属性,并可以重复使用。软件开发有时可以看作是选择,定制和组合架构模式的过程。软件架构师必须决定如何采用哪几种架构模式,如何使这些架构模式与软件系统特定的上下文相适应。Mark Richards他写了一本书,名为《软件架构模式》,其中主要介绍了5种软件架构模式:微内核模式(Microkernel Pattern),微服务模式 (Microservices Pattern ),分层架构模式( Layered Architecture Pattern),基于事件的模式(Event-based Pattern),基于空间的架构模式(Space-based Pattern)。5种主要的软件架构模式
1.微内核模式(Microkernel Pattern)
微内核架构模式也称为插件模式。这种模式允许你将其他应用程序功能作为插件添加到核心应用程序,从而提供可扩展性以及功能分离。微内核架构模式由两种类型的架构组件组成:核心系统和插件模块。插件模块,提供应用程序功能和自定义处理逻辑的可扩展性,灵活性和隔离性。
传统上,微内核架构模式的核心系统仅包含使系统运行所需的最小功能。
优点:
极大的灵活性和可扩展性
一些插件允许在应用程序运行时添加
良好的便携性
易于部署
能够快速响应不断变化的环境
插件模块可以单独进行测试。
高性能,因为你可以自定义和简化应用程序以仅包括所需的那些功能。
应用场景
从不同来源获取数据,转换数据并将其输出到不同地方的应用程序
工作流应用程序
任务类应用程序
2.微服务模式 (Microservices Pattern )
当你将应用程序作为一组微服务编写时,实际上就是在编写可以协同工作的多个应用程序。其中每个微服务都有自己的职责,团队可以独立于其他微服务进行开发。这些微服务之间唯一的依赖就是通信。当微服务彼此通信时,你必须确保它们之间发送的消息能够向后兼容。优点:
可以分别编写,维护和部署每个微服务
易于扩展,因为你可以仅扩展需要扩展的微服务
更新迭代应用程序的各个部分比较容易,因为它们较小,并且与其他部分的耦合较少
团队成员能快速响应且富有成效
高度可维护和可测试–微服务模式满足快速频繁的开发和部署
可独立部署–无需与其他团队协调即可部署其服务
应用场景:
小型网站
边界明确的企业数据中心
快速发展的业务
多部门协作的开发团队
3.分层架构模式( Layered Architecture Pattern)
最常见的架构模式是分层架构模式。分层体系架构模式是n层模式,其中软件系统组件根据职责被设计在不同的层中。这是大多数软件的传统设计方法,并且具有独立性。这意味着所有组件都是互连的,但彼此之间不依赖。分层体系架构模式的每一层在应用程序中都有特定的角色和职责。例如,显示层将负责处理用户界面交互逻辑,而业务层将负责执行与请求关联的特定业务规则。分层体系架构模式的强大功能之一是,组件之间职责分离。特定层中的组件仅处理与该层有关的逻辑。优点:
高可测试性,每一层都可以单独测试。
高度易于开发,因为这种模式众所周知,并且实现起来并不太复杂,而且大多数公司都通过逐层分离技能来开发应用程序,这种模式已经成为大多数业务应用程序开发的自然选择。
可维护
易于单独更新某一层
应用场景:
标准业务线应用程序,其功能不只是CRUD操作
需要快速构建的新应用程序
适用于经验不足的开发团队
需要严格的可维护性和可测试性的应用
4.基于事件的模式(Event-based Pattern)
这是用于开发高度可扩展系统、最常见的分布式异步架构模式。该架构模式由用于监听并异步处理事件的一系列组件组成。事件驱动的架构模式构建了一个接收所有数据的中央单元,然后将其委托给处理特定类型的单独模块。优点:
容易适应复杂,经常混乱的环境
弹性伸缩
当出现新的事件类型时,很容易扩展
应用场景:
具有异步数据流的异步系统
用户界面交互
5.基于空间的架构模式(Space-based Pattern)
基于空间的架构模式,可以专门用于解决软件系统的伸缩性和并发性问题。对于用户访问量经常发生变化、偶尔出现高并发的应用程序,这是一种有用的软件架构模式。这种模式,通过消除中央数据库约束,并使用复制基于内存的数据网格来实现伸缩性。基于空间的架构模式旨在通过在多个服务器之间拆分处理和存储数据,来避免高负载下的软件系统功能崩溃。优点:
能够快速响应不断变化的环境。
尽管基于空间的架构模式通常不是分布式,但它们是动态的,并且基于云的复杂工具允许将应用程序轻松“推送”到服务器,从而简化了部署。
通过内存中的数据访问和此模式中内置的缓存机制可实现高性能。
高可伸缩性来自于对集中式数据库的依赖很小或根本没有依赖的事实,因此提高了可伸缩性。
应用场景
数据量大的应用程序,例如用户日志
低价值数据,偶尔可能丢失而不会造成严重后果
社交类的应用程序
推荐阅读:
太赞了,竟然用SpringBoot打造一款网页版的IM,进行聊天...
知乎高赞:为什么像王者荣耀这样的游戏Server不愿意使用微服务?
微信扫描二维码,关注我的公众号
写留言朕已阅