论软件架构风格的选择

【系统架构设计师】论文:论软件架构风格的选择 我参加了公司“数据中心管理系统”项目的开发,并担任系统架构师职务,负责系统的架构设计。该系统旨在将公司分散在全国各地的数据中心内的设备状态与信息通过一系列传输协议发送到服务端,服务端进行分析和处理后反馈给设备操作指令或给管理人员发送通知信息,最终实现终端监控并管理所有设备。本文以数据中心管理系统为例,论述了软件架构风格在项目中的选择与应用。 阅读详情

本文是参加系统架构师前写的一篇合格的文章。

摘要:

2018年5月我参与了某省电信智慧BSS系统的运营管理平台(NOSP)项目的开发。该项目为解决BSS系统的日常运营中提前发现故障、快速定位问题、保障服务稳定运行等方面提供全方位的软件支撑,我在该项目中担任系统架构师,主要负责系统的总体架构设计和技术选型。本文以该项目为例,主要论述了软件架构风格在该项目中的具体应用,通过采用微服务架构有效降低了系统耦合度;通过模型-视图-控制器架构解决自定义图表和报表展现问题,有效提升了可扩展性;通过采用管道与过滤器架构有效解决了分布式服务调用链的性能问题。事实证明,采用这些架构风格后,系统在在可扩展性、性能等的方面都达到了预期目标。系统自2019年2月上线后运行平稳,得到了领导和用户的一致好评。

正文:

随着2016年中国电信提出构造新一代运营商领先的智慧BSS3.0,以满足未来5年以上的市场营销与服务要求。2017年某省电信采用集团规定的平台+应用的方式重构了BSS核心系统,由于重构后的BSS系统涉及到PaaS平台的众多中间件和18个能力中心;同时采用容器化、集群的方式部署在超过140台物理主机、2000个容器中。整个BSS系统在性能和可扩展性等方面得到了极大的提升,但也增大了系统的运维难度,急需配套的运营系统来从整体上全方位的掌握BSS运行情况。由于我们不仅承建了该省的BSS核心系统,同时我们还深度参与了集团PaaS平台的开发,因此2018年5月我公司被该省电信委托建设新一代智慧运营管理平台(NOSP),以下简称该系统。该系统包含资源管理中心、组件管理中心、数据运营中心、监控告警中心、运营日志中心、运营分析中心等子系统。我以系统架构师的身份负责系统的总体架构设计和技术选型,7月份完成架构设计工作和基础开发框架的搭建,整个项目历时9个月,2019年2月顺利上线并通过验收。

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。而惯用模式可以为我们的项目提供通用解决方案,能够极大提高软件设计的重用的方法,加快我们的建设进程。传统的软架构风格可以分为数据流风格、调用/返回风格、独立构件风格、虚拟机风格和仓库风格。例如数据流风格中的管道过滤器风格,其中每个组件都有对应的输入和输出数据,输入数据经过组件的转换、计算、过滤等处理后,形成输出流;在输入数据完全处理完之前,就可以形成输出数据;此时组件就是过滤器,而连接件则为管道。独立构件风格中的事件驱动的架构以事件消息为载体,通过注册事件,然后事件被触发时,发送消息的方式不同系统或模块之间的调用。

我们在该系统设计过程中,为了解决不同开发小组负责的子系统的集成,自定义图表和报表展现以及分布式性能数据的流式处理过程,我们在项目中主要采用了微服务风格、MVC风格、管道与过滤器风格,具体阐述如下:

  1. 微服务架构风格

由于该系统涉及到多个不同的开发小组,每个开发小组使用的技术栈有所不同,为了实现各子系统之间的服务集成,我们评估了传统的SOA架构风格和微服务架构风格,传统的SOA架构风格更多地在于已有异构系统的集成,其采用的ESB、SOAP和WebService等技术,太过于笨重,不符合集团技术规范和互联网化的要求,所以我们最终决定采用基于Spring Cloud框架的微服务架构风格,我们在开发框架中二次封装了SPring Cloud的Eureka注册中心、Zuul的网关、携程的Apollo配置中心、Spring Boot的Acututor监控以及Hystrix的服务限流等功能。在实际开发过程中,各开发小组只要聚焦于自己所负责的微服务模块的功能API的实现,通过在springboot的bootstrap文件中配置相同的注册中心和配置中心,就可以实现服务间的互联互通,极大地提升了开发效率;同时提供了配套的管理控制台,降低了生产环境下的运维难度。

  1. MVC架构风格

我们采用MVC架构风格解决运营分析子系统中自定义图表和报表展现的难题。由于整个系统涉及到业主方的多个科室的运营人员,他们对日常运营数据的关注点和展现方式有较大的差异,需要支持自定义图表和报表。我们采用MVC架构风格能够解决这一难题,并充分考量了现有主流和成熟的技术框架,例如后端采用了SpringMVC框架,将后端代码组织成Controller、service和dao以及model4层,前端采用Vue框架负责展现图表和报表。dao和model层主要负责获取数据;service负责到dao转换和过滤数据;controller层作为控制器实现具体的业务逻辑,例如调用不同的service封装成前端需要的实体数据,最后以API的形式暴露给前端调用。基于MVC的架构风格,可以让开发人员清晰的明白系统的组织结构,解耦交互;同时在可扩展性上比较容易满足二次开发需求。

  1. 管道过滤器架构风格

在监控告警子系统中,我们采用管道过滤器架构风格,解决分布式性能数据的处理。由于BSS采用基于分布式服务框架Dubbo实现了各业务中心的服务能力,当BSS系统出现故障后,需要快速定位到服务调用链中具体某个服务出现问题,为了实现分布式服务的性能统计和链路跟踪展现,监控告警子系统需要实现从各容器中采集分布式服务的性能数据,然后再汇聚数据,加工处理数据,数据入库以及展现数据。首先由pinpoint采集的服务调用日志数据,然后通过Fluntd采集并推送到kafka集群,由kafka集群做中间缓冲区,然后采用Flink流式框架,从kafka集群中获取数据并计算,最后将计算后的结果写入MySQL数据库,同时将原始的源数据写入ElastricSearch集群。从实际效果看,管道过滤器风格的应用,高效地解决了大批量分布式服务跟踪数据的采集、计算、过滤、统计等过程的性能问题,可以实现5秒以内快速发现和定位故障。

总体来看,我们的软件开发工作是成功的,系统已于2019年2月底顺利完成验收,项目的系统架构和技术选型带来的性能、可扩展性和灵活性等方面的优势,在满足后续二次开发和数据接入方面,得到了开发人员、客户和领导的一致好评。目前已完成了所有存量资源数据的接入,可以满足CRM和计费系统的日常运营要求,在月底业务高峰期间,能定位和发现存在性能瓶颈的服务和故障节点,指导相应系统及时采取扩容和灾备方案。但系统开发过程中也面临两方面不足之处:第一在资源管理的数据建模阶段,没有完全识别出所有用户需求,导致集群模型在CRM系统和PaaS平台上理解有偏差,在做资源树的展现时无法串联;后期我们重新定义Mongodb文档的字段,修改相应功能的查询语句,就满足了要求。第二由于配置管理采用蓝鲸开源系统二次改造而来,在多模型关联查询时,性能有待改善;后期采用线程池和并发查询策略直接操作蓝鲸系统的数据库,使得查询性能控制在1s以内。

通过该项目的顺利实施,让我加深了对架构设计相关知识和技术的运用,同时也认识到在今后的工作和学习中,需要进一步梳理完善自身的知识结构,扩展知识的深度和广度,更好地参与到下一个项目中。

软考高级系统架构设计师系列论文三十八:论软件架构风格的选择 阅读详情

相关推荐

软件架构风格:选择合适的“建筑风格“

软件架构风格概述 软件架构风格定义了系统的组织方式和组件间关系,类似于建筑风格。文章对比了架构风格(宏观组织模式)与架构模式(特定问题解决方案)的区别,介绍了三种常见架构风格: 分层架构:自上而下分为表现层、业务层、持久层和数据库层,适合企业应用,结构清晰易于开发。 微内核架构:由核心系统和多个插件组成,核心稳定而插件可扩展,适用于IDE、ERP等系统。 事件驱动架构:通过事件总线/消息队列连接发布者和订阅者,具有松耦合、高扩展和异步处理特性,适合实时系统和物联网应用。

通俗易懂学IT 22

5种常见的架构风格

软件体系结构是具有一定形式的结构化元素的集合(构件的集合)。构件分为三类包括处理构件(对数据进行加工)、数据构件(被加工的信息)和连接构件(连接体系结构的不同部分)。当然也可以说是由构件、连接件和约束条件组成。软件架构风格是指描述某一特定应用领域中系统的组织方式的惯用模式。反应了领域中众多系统所共有的结构和语义特性,并指导如何将各个构件有效的组织成一个完整的系统。接下来具体介绍每一个架构风格,并说明优缺点。

sinat_33276017的博客 6437

软件架构原理与实战:如何选择合适的架构风格

1.背景介绍 随着计算机技术的不断发展,软件系统的规模和复杂性不断增加。为了更好地组织和管理软件系统的结构和组件,软件架构设计成为了一个重要的研究领域。软件架构是指软件系统的组件、模块、子系统之间的组织结构和协作关系。选择合适的架构风格对于确保系统的可靠性、可扩展性、可维护性至关重要。 在本文中,我们将讨论软件架构的核心概念、算法原理、具

AI天才研究院 155

软件架构风格总结以及场景应用

数据流风格:有批处理风格、管道-过滤器调用/返回风格:有主程序/子程序、面向对象、层次结构等独立构件风格:有进程通信、事件驱动风格、发布-订阅风格等虚拟机风格:有解释器、基于规则的系统等仓库风格:有数据库系统、黑板系统、超文本系统等过程控制风格:有开环、闭环等其他未分类的架构风格:有C2、异构风格、混合风格等。

码农研究僧的博客 5846

5、软件架构风格全解析

本文全面解析了常见的软件架构风格,包括整体架构、微服务、事件驱动架构和分层架构等,详细分析了它们的特点、优缺点以及适用场景。同时,文章还提供了架构选择的参考流程,并探讨了不同架构风格的组合使用方式,帮助开发者根据项目需求选择最合适的架构方案。

vscode6remote的博客 51

软考 系统架构设计师系列知识点之软件架构风格(10)

软考 系统架构设计师系列知识点之软件架构风格(10)

phmatthaus的专栏 1122

10种常见的架构风格,你用过几种?

架构风格是解决特定问题的“经验模板”,理解它们的核心逻辑(组件如何组织、如何通信),才能在实际场景中灵活选择。最好的架构是“适合当前业务”的架构,而非盲目追新(如为小应用强行上微服务)。希望本文能帮你在架构设计时“有据可依”,少走弯路。

excellent_fish_c的博客 3034

11、软件架构风格与设计决策解析

本文深入解析了软件架构风格与设计决策,从GGG组件设计的权衡与选择,到单体架构与分布式架构的区别与应用场景,全面探讨了不同架构风格的优劣势。同时,文章还详细分析了分布式架构中常见的四大谬误,并提供了解决策略。此外,结合业务需求、可扩展性要求和团队技术能力,为架构风格的选择提供了实用建议。无论对新手还是经验丰富的架构师,本文都具有很高的参考价值。

s4t5u6v的博客 69

如何选择合适的架构风格

1.前言 架构风格描述包含了各种架构特征的组件,对于进阶架构设计的童鞋来说,面对各种复杂的需求,熟悉各种架构风格是非常必要的。如这些架构风格的特征,部署模型、数据策略等等。架构风格主要可以分为单体与分布式架构两种,两者的区别是以代码的部署与运行方式作为主要区分点,其中单体架构是将所有的代码打包放在一个单元去部署和运行,而分布式架构是将代码放在多个部署单元上的,通过远程访问协议来连接。单体架构中比较典型的有分层架构、管道架构、微内核架构等,分布式架构典型的有基于服务的架构、事件驱动的架构、...

欢迎来到我的博客 1656

介绍七种常见还危险的病毒(带样本)

简介:能够感染用户计算机bai系统中的.exe、.dll和.html文件,将自身加密以后缀加到目标文件中。样本(源文件):https://wwx.lanzoux.com/iJx4njrpz1c / https://wwx.lanzoui.com/iYRNLwd8ldc。英文名称:Virus.Win32.Viking.A(标准) / Worm.Win32.Fujack.A(标准)英文名称:Net-Worm.Win32.Blaster.A(标准)/ Lovesan.A/ Msblast.A。

2301_78858007的博客 8415

如何用 OBProxy 实现 OceanBase 的最佳路由策略

本文基于业务中一类常见的路由问题展开,对OceanBase的路由功能及对应配置项做详细介绍,指导用户在业务实践中如何正确的配置路由策略及快速排查路由问题

OceanBase分布式数据库的博客 1685

论软件系统架构风格

摘要 本人于2020年1月参与某集团保险一体化研发项目,该系统致力于实现全国保险业务种类的整合、数据分析、订单汇总、账单汇总,为集团人员提供全国保险账单的管理、安全监控、数据保护方面提供全方位的软件支持,在该项目中我主要担任系统架构师岗位,负责整体架构设计与中间件选型。 本文以该保险一体化项目为例,主要讨论了软件架构风格在该项目中的具体应用。底层架构风格我们采用了虚拟机风格中的解释器,因该保险业务需要对接上游系统共计26种不同的数据协议,使用解释器风格可以满足保险一体化数据协议兼容性需求;中间层关于应用层的

mischen520的博客 5844

stm32h743 FM25CL64铁电存储器踩坑记录

调试FRAM经验总结: 1、跑完FRAM读写代码之后,逻分仪发现总线上只有简单、短暂的电平变化,明显不是SPI的通信数据。 (经提醒发现连片选拉高拉低都没有执行到位) 后来发现是因为片选引脚没有初始化,所以直接拉高拉低是无效的。 2、引脚成功初始化后发现CLK、MISO、MOSI数据仍不正常。通过加打印的方式发现跑到HAL_SPI_Transmit中之后还没有执行到写SPI数据寄存器的那一步就return了。 后来经提醒发现: 上图中的指针使用方式错误 后来又发现: 打印出来发现

kuniqiw的博客 3844

如何选择合适的软件架构风格

1.背景介绍 在当今的数字时代,软件开发已经成为了企业和组织中不可或缺的一部分。随着业务规模的扩大和技术的发展,软件系统的复杂性也不断增加。因此,选择合适的软件架构风格成为了关键的一环。 软件架构风格是一种在设计和实现软件系统时采用的一种基本的组织结构和原则。它为软件系统提供了一个框架,使得开发人员可以专注于实现具体的功能和需求。在这篇文章中,我们将讨论如何选择合适的软件架构风格,以及它们的核...

AI天才研究院 614

二维卡尔曼滤波位置,速度融合

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

Johnlee2019的博客 8451

巡检领域红外热成像相机镜头焦距选择方法总结

摘要:巡检机器人红外热成像相机镜头焦距的选择需综合考虑检测距离、视场角、目标分辨率等核心要素。短焦距(4-6mm)适用于室内近距离巡检,中焦距(12-19mm)适合变电站等中等距离场景,长焦距(25-50mm)则用于光伏板等远距离检测。选型需遵循焦距计算公式f=SL×d,确保目标占据≥3×3像元,同时考虑机器人安装空间、环境适应性及软件联动需求。建议通过样机实测或仿真软件验证选型合理性,以实现对设备故障的精准识别。

start_up_go的博客 299

软件架构的风格分类与选择标准

微服务的优势在于技术异构性和容错性,但同时也带来了分布式系统的复杂性,如服务发现、数据一致性等问题。分层架构是最常见的架构风格之一,它将系统划分为若干层次,如表现层、业务逻辑层和数据访问层。在软件开发中,架构风格的选择直接影响系统的性能、可维护性和扩展性。不同的架构风格适用于不同的业务场景,如何合理分类并选择适合的架构风格,是开发者和架构师必须面对的核心问题。架构风格的选择需综合考虑业务需求、团队能力和技术生态。通过理解不同架构风格的特点与适用场景,开发者能够更科学地设计系统,为项目的长期成功奠定基础。

jzflqp_616的博客 224

DDD系列 - 第6讲 仓库Repository - Mybatis篇

书接上回,之前通过一个关于拆解、微服务、面向对象的故事,向大家介绍了如何从微服务、面向对象一步步演进到DDD的,整个演进过程如下图:其中在领域层,我们定义了富血模型的领域模型,包括聚合、聚合根、实体、值对象等。聚合在代码层面中的表现形式即是一个包Package,起到了边界的作用,聚合内的对象间高内聚,而聚合间低耦合。聚合中放着实体、值对象、仓库等,实体相较于值对象的一个典型区别就是实体存在唯一标识,并且可通过该唯一标识查询到该实体并对其进行相关操作,值对象不存在唯一标识且通常作为实体。

罗小爬的技术宝书 1785

软件架构设计:架构风格

架构风格是软件架构设计的基础,选择合适的架构风格可以显著提升系统的质量属性(如可维护性、可扩展性、性能等)。在实际设计中,架构师需要根据具体需求、技术栈和团队能力,灵活选择和组合不同的架构风格。

大道至简 1336

一文读懂 CST 时/频域求解器

本文系统介绍了CST Studio Suite中的关键网格技术——六面体网格、四面体网格以及TLM求解器专用的八叉树非均匀网格技术。重点阐述了六面体网格的三项核心技术:理想边界拟合(PBA)技术可精确处理曲面边界,薄片技术(TST)能高效模拟薄层结构,自适应八叉树网格实现计算资源最优分配。同时详细对比了六面体网格与四面体网格的特点及适用场景,前者适用于系统级EMC/EMI分析等时域问题,后者擅长处理复杂曲面和异质材料的频域问题。

一只豌豆象的博客 465

AutoSAR MemMap模块详解及使用注意事项

在本文中,我们将深入探讨MemMap模块的实例解析,并介绍在使用该模块时需要注意的一些事项。在上述代码中,我们使用了MEMMAP_START_SEC_VAR_32BIT和MEMMAP_START_SEC_CODE来定义MemMap区域的起始位置,使用MEMMAP_STOP_SEC_VAR_32BIT和MEMMAP_STOP_SEC_CODE来定义MemMap区域的结束位置。1.合理划分MemMap区域:根据实际需求,合理划分MemMap区域,将不同类型的变量放置在不同的区域中,以便于管理和访问。

weixin_50547796的博客 2533

软考系统架构设计师范文1:论软件架构风格的选择

21年11月考过了软考系统架构师,分享一下自己备考的论文,虽然没有压中去年的题目,但论文结构希望可能帮助今年备考的同学们。

Ditto的分享 2536

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

软件架构设计风格

在软件系统的开发过程中,架构设计是决定系统可维护性、可扩展性、性能以及团队协作效率的关键环节。不同的架构设计风格为开发者提供了不同的组织方式和模块化策略,用以应对各种业务需求、技术挑战和演化目标。从传统的分层架构,到微服务、事件驱动、服务网格、黑板、无服务器架构等,每种架构风格都有其特定的适用场景与优势。理解这些架构风格的核心理念与适配条件,能够帮助我们更有策略性地做出技术选型,构建更加健壮、灵活和可演进的软件系统。

MCN的博客 1716

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

系统架构师——软件架构风格

软件架构风格是系统组织方式的模式化解决方案,包含构件、连接件和组合约束三大要素。主要风格包括:数据流风格(批处理、管道-过滤器)、调用/返回风格(主程序/子程序、面向对象、分层)、独立构件风格(进程通信、事件驱动)、虚拟机风格(解释器、规则系统)和仓库风格(数据库、黑板系统)。不同风格适用于不同场景,如管道-过滤器适合流式处理,事件驱动适合GUI应用。选择架构风格需综合考虑系统需求、领域特性、技术约束等因素,好的风格选择能提高设计效率、改善系统质量并促进团队沟通。

weixin_52280209的博客 720

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 论面向服务架构及其应用
下一篇: 论软件的安全性设计
正说杂谈
博客等级 码龄15年 30粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正说杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值