点击上方“Java之间”,选择“置顶或者星标”

你关注的就是我关心的!

译者:王延飞

译文链接: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)

微内核架构模式也称为插件模式。这种模式允许你将其他应用程序功能作为插件添加到核心应用程序,从而提供可扩展性以及功能分离。

微内核架构模式由两种类型的架构组件组成:核心系统和插件模块。

  • 插件模块,提供应用程序功能和自定义处理逻辑的可扩展性,灵活性和隔离性。

  • 传统上,微内核架构模式的核心系统仅包含使系统运行所需的最小功能。

微内核架构模式的最佳示例是Eclipse IDE。下载基本的Eclipse产品为你提供的只是一个编辑器功能。但是,一旦开始添加插件,它就会成为高度可定制和有用的产品。

优点:

  • 极大的灵活性和可扩展性

  • 一些插件允许在应用程序运行时添加

  • 良好的便携性

  • 易于部署

  • 能够快速响应不断变化的环境

  • 插件模块可以单独进行测试。

  • 高性能,因为你可以自定义和简化应用程序以仅包括所需的那些功能。

  • 应用场景

  1. 从不同来源获取数据,转换数据并将其输出到不同地方的应用程序

  2. 工作流应用程序

  3. 任务类应用程序

2.微服务模式 (Microservices Pattern )

当你将应用程序作为一组微服务编写时,实际上就是在编写可以协同工作的多个应用程序。其中每个微服务都有自己的职责,团队可以独立于其他微服务进行开发。这些微服务之间唯一的依赖就是通信。当微服务彼此通信时,你必须确保它们之间发送的消息能够向后兼容。

优点:

  • 可以分别编写,维护和部署每个微服务

  • 易于扩展,因为你可以仅扩展需要扩展的微服务

  • 更新迭代应用程序的各个部分比较容易,因为它们较小,并且与其他部分的耦合较少

  • 团队成员能快速响应且富有成效

  • 高度可维护和可测试–微服务模式满足快速频繁的开发和部署

  • 可独立部署–无需与其他团队协调即可部署其服务

应用场景:

  • 小型网站

  • 边界明确的企业数据中心

  • 快速发展的业务

  • 多部门协作的开发团队

3.分层架构模式( Layered Architecture Pattern)

最常见的架构模式是分层架构模式。分层体系架构模式是n层模式,其中软件系统组件根据职责被设计在不同的层中。

这是大多数软件的传统设计方法,并且具有独立性。这意味着所有组件都是互连的,但彼此之间不依赖。分层体系架构模式的每一层在应用程序中都有特定的角色和职责。例如,显示层将负责处理用户界面交互逻辑,而业务层将负责执行与请求关联的特定业务规则。

分层体系架构模式的强大功能之一是,组件之间职责分离。特定层中的组件仅处理与该层有关的逻辑。

优点:

  • 高可测试性,每一层都可以单独测试。

  • 高度易于开发,因为这种模式众所周知,并且实现起来并不太复杂,而且大多数公司都通过逐层分离技能来开发应用程序,这种模式已经成为大多数业务应用程序开发的自然选择。

  • 可维护

  • 易于单独更新某一层

应用场景:

  • 标准业务线应用程序,其功能不只是CRUD操作

  • 需要快速构建的新应用程序

  • 适用于经验不足的开发团队

  • 需要严格的可维护性和可测试性的应用

4.基于事件的模式(Event-based Pattern)

这是用于开发高度可扩展系统、最常见的分布式异步架构模式。该架构模式由用于监听并异步处理事件的一系列组件组成。事件驱动的架构模式构建了一个接收所有数据的中央单元,然后将其委托给处理特定类型的单独模块。

优点:

  • 容易适应复杂,经常混乱的环境

  • 弹性伸缩

  • 当出现新的事件类型时,很容易扩展

应用场景:

  • 具有异步数据流的异步系统

  • 用户界面交互

5.基于空间的架构模式(Space-based Pattern)

基于空间的架构模式,可以专门用于解决软件系统的伸缩性和并发性问题。

对于用户访问量经常发生变化、偶尔出现高并发的应用程序,这是一种有用的软件架构模式。这种模式,通过消除中央数据库约束,并使用复制基于内存的数据网格来实现伸缩性。

基于空间的架构模式旨在通过在多个服务器之间拆分处理和存储数据,来避免高负载下的软件系统功能崩溃。

优点:

  • 能够快速响应不断变化的环境。

  • 尽管基于空间的架构模式通常不是分布式,但它们是动态的,并且基于云的复杂工具允许将应用程序轻松“推送”到服务器,从而简化了部署。

  • 通过内存中的数据访问和此模式中内置的缓存机制可实现高性能。

  • 高可伸缩性来自于对集中式数据库的依赖很小或根本没有依赖的事实,因此提高了可伸缩性。

应用场景

  • 数据量大的应用程序,例如用户日志

  • 低价值数据,偶尔可能丢失而不会造成严重后果

  • 社交类的应用程序

最近热文阅读:1、常用算法复杂度速查表,蹲坑的功夫都能背2、最棒 Spring Boot 干货总结3、SQL查找是否"存在",别再count了,很耗费时间的4、读写分离很难吗?SpringBoot结合aop简单就实现了5、我一个普通程序员,光靠GitHub打赏就年入70万,其实你也可以6、Linus:我们都老了,但Linux维护后继无人!7、不好意思,这才是微服务划分的正确姿势8、为什么不建议把数据库部署在 Docker 容器内?9、程序员必备的150个Linux命令!10、如何保证缓存与数据库的双写一致性?关注公众号,你想要的Java都在这里

5种主要的软件架构模式相关推荐

  1. 10种常见的软件架构模式-快速记忆

    10种常见的软件架构模式-快速记忆 这里通过数字宫殿的方法快速记忆10种常见的设计模式,通过记忆名字+理解的情况下熟悉常见的软件架构模式 文章目录 10种常见的软件架构模式-快速记忆 前言 一.快速记 ...

  2. 10种常见的软件架构模式

    有没有想过要设计多大的企业规模系统?在主要的软件开发开始之前,我们必须选择一个合适的体系结构,它将为我们提供所需的功能和质量属性.因此,在将它们应用到我们的设计之前,我们应该了解不同的体系结构. 什么 ...

  3. 10种常用的软件架构模式

    ▲ 点击上方"分布式实验室"关注公众号 回复"1"抽取纸质技术书 - 1 - 分层模式(Layered Pattern (n-tier)) 分层架构模式是最常见 ...

  4. 架构师必须了解的 5 种最佳软件架构模式

    世界变得越来越依赖软件,软件系统已经渗透到了人类生活的方方面面,并带来了很多便利.从移动应用(用于和人联系),到医疗应用和深度学习模型,到金融技术系统,再到智能建筑(利用技术来自动化许多功能). 为了 ...

  5. 精华:软件架构模式的7种武器

    架构模式是对给定上下文的软件架构中常见问题的一种通用的可复用的解决方案.一种模式就是特定上下文的问题的一种解决方案. 然而,很多开发者至今还对各种软件架构模式之间的差别搞不清,甚至对其所知甚少. 大体 ...

  6. 程序员必知的7种软件架构模式

    作者:Trung Anh Dang 策划:万佳 架构模式是对给定上下文的软件架构中常见问题的一种通用的可复用的解决方案. 一种模式就是特定上下文的问题的一种解决方案. 然而,很多开发者至今还对各种软件 ...

  7. 程序员必知的几种软件架构模式

    程序员必知的几种软件架构模式 前序 分层架构模式 多层模式 管道 - 过滤器架构 客户端 - 服务器架构 模型 - 视图 - 控制器架构(MVC) 事件驱动架构 微服务架构 前序 架构模式是对给定上下 ...

  8. 软件体系架构模式之一什么是软件架构模式

    什么是软件架构模式 计划启动未开发的软件项目?然后选择正确的架构模式将对项目的结果起关键作用.选择市场上最流行或最新的技术并不总是意味着会带来最好的结果.但是,选择最合适的解决方案将为行之有效的问题和 ...

  9. 不可不知的软件架构模式

    什么是系统架构(Architecture) 设计不仅仅指的是外观和感觉,它还包括运作方式.-- 史蒂夫·乔布斯 系统架构(System Architecture),软件架构(Soft Architec ...

最新文章

  1. android 键盘只顶edittext,EditText Keyboard 未解之谜
  2. 400名微软员工详细薪资信息泄露,资历和国籍对薪资影响巨大!
  3. phpcms 指定id范围 调用_phpcms v9使用GET调用指定id文章内容、页面数据方法
  4. Android调用蓝牙打印机
  5. linux密码忘记grub登陆,Linux忘记密码后使用grub重置密码
  6. html iframe 不限制大小_渗透技术再升级:如何利用HTML注入泄漏用户数据
  7. python3记录(3)-os.walk() 方法
  8. Java多线程编程(1)--Java中的线程
  9. Vue源码阅读一:说说vue.nextTick实现
  10. 「あるいは」 「もしくは」 「または」 「それとも」的区别
  11. 字符串+流+java_Java读取流并拼接转换成字符串
  12. 四十三、配置防盗链、访问控制Directory、访问控制FilesMatch
  13. 在线抽奖、限时秒杀、拼团抢购,别的商城有的功能你也可以轻松拥有!
  14. 论项目管理中的量化管理
  15. 动态规划解决最长公共子序列
  16. 一个星期使用三种不同的开发模式完成资讯类App——《听风资讯》
  17. NodeJS 发送 POST 请求 curl -d JS 类的静态属性使用
  18. 明风社和大家分享利用网络赚钱的集中方法
  19. 5 个 JavaScript “罕见”原生的 API
  20. vue当前页面中英文语言切换

热门文章

  1. 自动化脚本之-中文转拼音字母
  2. 《C++项目开发实战入门》攻坚战
  3. 递推例题--upc皇家棋神
  4. ZooKeeper 集群
  5. Jackson 使用样例
  6. 平方沙龙|如何识别与管理创业合伙人之间的关系和潜在的法律风险
  7. python表情代码_Python实现表情包的代码实例
  8. SpringBoot返回XML格式数据
  9. 糖尿病患者怎样养成良好习惯
  10. ExternalInterface.available