【架构论文-1】面向服务架构(SOA)
【摘要】
本文以我参加公司的“生产线数字孪生”项目为例,论述了“面向服务架构设计及其应用”。该项目的目标是构建某车企的数字孪生平台,在虚拟场景中能够仿真还原真实产线的动作和节拍,实现虚实联动,从而提前规避问题,节约成本,预测节拍,进行故障诊断和预测维护,从而完成系统和设备产线的优化。在此项目中,我担任系统架构师以及主要管理人员,主导了项目的开发,架构设计,项目管理等工作。本文首先分析了面向服务架构的主要技术和标准的具体内容,并说明在构建面向服务架构中遇到的问题和具体实施效果。实践证明,采用面向服务的架构设计,降低了系统的耦合,使软件有了更好的开放性和扩展性,满足了客户的业务要求,使得开发工作取得了成功。此数字孪生平台于2022年6月验收上线,目前已经稳定运行一年多,得到了客户的一致认可。
【背景】
近年来,随着数字孪生技术的兴起,虚拟仿真在工业互联网和智能制造领域具有越来越广泛的应用背景。通过数字孪生和工业生产过程相结合,可实现实时监测、预测分析、远程控制和优化调整,提高生产效率,降低成本和风险。2021年12月,某新能源汽车车企决定发起“车间数字孪生”项目,实现生产线节拍的高效提升,实现数字化技术的全面覆盖。该项目投资800万,计划6个月完工,我司成功拿下该项目。2021年12月,我作为系统架构设计师,全面负责“车间产线数字孪生”项目的架构设计工作,整个项目采用了面向服务SOA的架构来进行项目的开发,将业务进行拆分,单独开发部署,提高了项目的灵活性,确保了项目的顺利交付。
【过渡】
在本项目中,需求方对性能和可用性等质量属性有要求,提出系统在某模块出现问题后,尽可能少地影响其他模块,修复系统要在10分钟内完成。介于以上质量属性,为了将各个模块间解耦,为了提升修复问题的速度,为了提升部署修复后模块的速度,经过公司讨论后决定使用面向服务SOA架构来开发项目,下面说明实现SOA的主要技术和标准以及每种技术和标准的具体内容。最后描述本次项目开发过程中构件面向服务架构时遇到了哪些问题和解决方案以及个人感悟。
【理论】
SOA是一个组件模型,它将应用程序的不同功能单元进行拆分,并通过服务之间良好的接口联系起来,使得构建在各种各样的系统中的服务可以以通用的方式进行交互,与SOA紧密相关的技术主要有UDDI、WSDL、SOAP。其中UDDI是统一发布、描述、集成协议,提供了一种服务发布、查找、定位的方法。以便被需要该服务的用户发现和使用,UDDI是SOA的基础设施,对应着服务注册中心的角色,是服务注册的规范;WSDL是服务描述语言,服务器通过WSDL说明自己有什么服务可以对外调用,它有一套基于XML的语法定义,包含服务实现定义和服务接口定义,服务内容描述通过WSDL标准实现;SOAP是简单对象访问协议,定义了一种方法将XML消息从A点传到B点,采用Http作为底层通讯协议,RPC作为一致性的调用途径,XML作为数据传输的格式,通过SOAP应用程序可以在网络中进行数据交换和远程调用过程。
【实践】
SOA的主要实现方式有WebService、ESB和服务注册表,本次在项目中使用的是WebService的方式实现SOA。在该方式中包含三个重要角色,分别是服务提供者,服务请求者和服务注册中心,下面说明具体的构建过程以及遇到的问题和实施效果。
- 服务提供者,主要完成服务的设计、定义、描述和发布工作。在此数字孪生项目中,我们使用了Spring Boot作为服务提供者的框架,Spring Boot提供了快速构建和部署的能力。使用Spring Boot可以简化程序的配置和开发流程。并使用Spring Web来创建RESTFUL API端点,用以提供一套结构清晰、标准统一、方便扩展的接口,我们可以使用RESTFUL API作为服务提供者的接口标准。通过定义合适的API端点和参数,来实现设备数据的接受、存储、查询和控制功能。我们选择了MongoDB作为数据库来存储实时设备数据,并使用了SpringData MongoDB来简化与MongoDB的交互。一旦服务提供者通过测试与调试,可以将其部署在生产环境中。可以使用Docker等容器化技术,将服务提供者打包为容器,并部署到适当的服务器或云平台。通过服务提供者,我们可以接收来自现场设备以及传感器的实时数据,并将其存储在MongoDB数据库中。同时,服务提供者实现了查询和控制功能,使得服务请求者可以通过发送请求和控制指令来获取设备数据以及运行状态。
- 服务注册中心,服务注册中心是连接服务提供者和服务请求者的纽带,服务提供者在此发布服务描述,服务请求者在此查找需要的服务。在此数字孪生项目中,我们使用了Spring Cloud Netflix Eureka 作为服务注册中心的框架,Spring Cloud Netflix Eureka是一个开源的服务注册和发现框架,提供了服务注册中心的发现。并与其他组件进行集成。使用Spring Boot来构建服务注册中心。我们的服务提供者发送注册请求将自身注册到服务。
- 服务请求者,服务的请求者即服务的消费者,通过UDDI可在服务注册中心查找、调用服务。在此数字孪生项目中,我们使用了Spring Boot作为服务请求者的框架,并使用Spring Web来创建RESTFUL API端点。使用Apache HttpClient作为HTTP客户端库来发送设备数据查询请求和控制指令发送请求。同时,我们作为Chart.js作为数据可视化框架来实时展示数据的图表,一旦服务请求者通过测试和调试,我们可以向数据管理系统发送查询请求,查询当前的设备数据,并将数据以图标的形式展示给用户,同时我们可以发送控制指令来改变设备运行的状态,例如调整机械臂的关节角速度和传感器的开关。
【结尾】
实践证明SOA架构的使用,成功降低了系统的耦合度,是软件有了更好的开放性和拓展性,各方面表现优异,同时项目也如期在23年年初正式上线,并得到了客户的一致好评。但项目建设过程中也存在一些不足,由于疫情的原因,很多同事无法在现场办公,影响了沟通效率。我们采用了视频电话+邮件确认的制度,保证了每个同事的信息共享,解决了信息传达的问题。作为一名软件从业人员,唯一不能停下来的技术学习的脚步,我们要紧跟时代发展,提高自身的技术,并灵活运用在每个项目中。
相关文章:
【架构论文-1】面向服务架构(SOA)
【摘要】 本文以我参加公司的“生产线数字孪生”项目为例,论述了“面向服务架构设计及其应用”。该项目的目标是构建某车企的数字孪生平台,在虚拟场景中能够仿真还原真实产线的动作和节拍,实现虚实联动,从而提前规避问题ÿ…...
刚刚!更新宁德时代社招Verify测评语言理解数字推理SHL题库、网盘资料、高分答案
宁德时代社招入职的Verify测评主要分为两大块:语言理解和数字推理。语言理解部分包括阅读理解、逻辑填空和语句排序,要求在17分钟内完成30题。数字推理部分包括数字序列、数学问题解决和图表分析,同样要求在17分钟内完成18题。这些测评题目旨…...
C++笔记---智能指针
1. 什么是智能指针 1.1 RALL设计思想 RAII(Resource Acquisition Is Initialization,资源获取即初始化)是一种资源管理类的设计思想,广泛应用于C等支持对象导向编程的语言中。它的核心思想是将资源的管理与对象的生命周期紧密绑定…...
CentOS 7系统中更改YUM源为阿里云的镜像源
引言 更换阿里的镜像源可以带来诸多好处,包括提高下载速度、提升稳定性、同步更新、简化配置、节省带宽资源以及增强系统安全性等。因此,对于使用CentOS系统的用户来说,更换阿里的镜像源是一个值得考虑的选择。 1.备份yum源 mv /etc/yum.r…...
Python酷库之旅-第三方库Pandas(206)
目录 一、用法精讲 961、pandas.IntervalIndex.mid属性 961-1、语法 961-2、参数 961-3、功能 961-4、返回值 961-5、说明 961-6、用法 961-6-1、数据准备 961-6-2、代码示例 961-6-3、结果输出 962、pandas.IntervalIndex.length属性 962-1、语法 962-2、参数 …...
3.4CQU数学实验???
meshgrid 是一个用于生成网格点坐标的函数。它常用于在二维或三维空间中创建坐标网格,用于可视化和数据处理。 在二维情况下,meshgrid 函数接受两个一维数组作为输入,并返回两个二维数组,这两个数组中的元素分别表示了所有可能的…...
Linux(CentOS)开放端口/关闭端口
一、普通用户使用 sudo 操作,开放/关闭端口,80 1、检查端口是否开放 sudo firewall-cmd --zonepublic --query-port80/tcp 2、开放端口 sudo firewall-cmd --zonepublic --add-port80/tcp --permanent 3、重新加载(开放或关闭端口后都需…...
GreenDao适配AGP8.7+
升级配置 工具版本Android StudioLadybug 2024.2.1 Path2AGP8.7.2KPG1.8.21GGP3.3.1明细 classpath "com.android.tools.build:gradle:$agp_version"classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kgp_version"classpath "org.greenrobot:g…...
【前端】Typescript从入门到进阶
以下是 TypeScript 的常用知识点总结,涵盖了从基础到入门的内容,并配有代码示例: 1. TypeScript 基础 1.1 安装和配置 安装 TypeScript 并初始化配置文件: npm install -g typescript tsc --init 1.2 基本类型 TypeScript 提供…...
在 RHEL 8 | CentOS Linux release 8.5.2111上安装 Zabbix 6
1. 备份YUM源文件 cd /etc/yum.repos.d/ mkdir bak mv C* ./bak/ wget -O /etc/yum.repos.d/CentOS-Linux-BaseOS.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo yum clean all yum makecache2. 将 SELinux 设置为宽容模式,如下所示。 sudo s…...
光纤HDMI线怎么连接回音壁?
第一步:准备HDMI线、光纤线(TOSLINK线)、视频源设备、回音壁 第二步:连接HDMI线,找到视频源设备上的HDMI输出口,将HDMI线的一端插入这个接口,再把HDMI线的另一端插入回音壁的HDMI输入口。注意检…...
屏幕后期处理
1、屏幕后期处理效果 屏幕后期处理效果( Screen Post-Processing Effects)是一种在渲染管线的最后阶段应用的视觉效果,允许在场景渲染完成后对最终图像进行各种调整和效果处理,从而增强视觉体验 常见的屏幕后期处理效果有&#x…...
K8资源之endpoint资源EP资源
1 endpoint资源概述 endpoint资源在K8S中用来表s示vc与后端 Pod 之间的连接关系的对象。当创建svc时,svc根据标签是否相同或svc名字是否和ep名字相同,把svc和ip关联上。 删除svc时,会自动的删除同名的ep资源。 2 ep资源和svc的关联测试 […...
微软日志丢失事件敲响安全警钟
NEWS | 事件回顾 最近,全球最大的软件公司之一——微软,遭遇了一场罕见的日志丢失危机。据报告,从9月2日至9月19日,持续长达两周的时间里,微软的多项核心云服务,包括身份验证平台Microsoft Entra、安全信息…...
Qt生成应用程序exe
1. 将工程用MinGW编译器在release模式下编译,生成可执行文件XXX.exe,新建一个文件夹如:F:\Setup\minGW,把exe文件放到这个目录下。 2. 将该编译器的bin文件添加到PATH环境变量里:bin文件路径为:D:\Qt\Qt5.…...
C#中的HttpContent、HttpClientHandle、HttpWebRequest
C#中的HttpContent 在C#中,HttpContent 是 System.Net.Http 命名空间下的一个类,它是 HttpClient 类用来发送和接收HTTP内容的基础。HttpContent 表示HTTP请求或响应的正文内容,并且可以序列化和反序列化数据。 HttpContent 是一个抽象类&a…...
23.网工入门篇--------介绍一下园区网典型组网架构及案例实践
园区网典型组网架构主要分为小型、中型、大型三种类型,以下是详细介绍及相关案例实践: 小型园区网: 架构特点: 用户规模:适用于接入用户数量较少的场景,一般支持几个至几十个用户。覆盖范围:仅限…...
QT鼠标事件
QT鼠标事件 1.概述 这篇文章介绍如何使用事件和获取事件的信号 2.创建项目 创建一个widget类型项目,在widget.ui文件中添加一个label控件 然后在项目名称上右键选择Add new... 添加文件,选择 C Class 自定义类名Mylabel,选择基类Base …...
Ubuntu 的 ROS 操作系统turtlebot3环境搭建
引言 本文介绍如何在Ubuntu系统中为TurtleBot3配置ROS环境,包括安装和配置ROS Noetic的步骤,为PC端控制TurtleBot3提供操作指南。 安装和配置的过程分为PC设置、系统安装、依赖安装等部分,并在最后进行网络配置,确保PC端能够顺利…...
C++笔记---异常
1. 异常的概念 1.1 异常和错误 异常通常是指在程序运行中动态出现的非正常情况,这些情况往往是可以预见并可以在不停止程序的情况下动态地进行处理的。 错误通常是指那些会导致程序终止的,无法动态处理的非正常情况。例如,越界访问、栈溢出…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
