【架构论文-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。在该方式中包含三个重要角色,分别是服务提供者,服务请求者和服务注册中心,下面说明具体的构建过程以及遇到的问题和实施效果。

  1. 服务提供者,主要完成服务的设计、定义、描述和发布工作。在此数字孪生项目中,我们使用了Spring Boot作为服务提供者的框架,Spring Boot提供了快速构建和部署的能力。使用Spring Boot可以简化程序的配置和开发流程。并使用Spring Web来创建RESTFUL API端点,用以提供一套结构清晰、标准统一、方便扩展的接口,我们可以使用RESTFUL API作为服务提供者的接口标准。通过定义合适的API端点和参数,来实现设备数据的接受、存储、查询和控制功能。我们选择了MongoDB作为数据库来存储实时设备数据,并使用了SpringData MongoDB来简化与MongoDB的交互。一旦服务提供者通过测试与调试,可以将其部署在生产环境中。可以使用Docker等容器化技术,将服务提供者打包为容器,并部署到适当的服务器或云平台。通过服务提供者,我们可以接收来自现场设备以及传感器的实时数据,并将其存储在MongoDB数据库中。同时,服务提供者实现了查询和控制功能,使得服务请求者可以通过发送请求和控制指令来获取设备数据以及运行状态。
  2. 服务注册中心,服务注册中心是连接服务提供者和服务请求者的纽带,服务提供者在此发布服务描述,服务请求者在此查找需要的服务。在此数字孪生项目中,我们使用了Spring Cloud Netflix Eureka 作为服务注册中心的框架,Spring Cloud Netflix Eureka是一个开源的服务注册和发现框架,提供了服务注册中心的发现。并与其他组件进行集成。使用Spring Boot来构建服务注册中心。我们的服务提供者发送注册请求将自身注册到服务。
  3. 服务请求者,服务的请求者即服务的消费者,通过UDDI可在服务注册中心查找、调用服务。在此数字孪生项目中,我们使用了Spring Boot作为服务请求者的框架,并使用Spring Web来创建RESTFUL API端点。使用Apache HttpClient作为HTTP客户端库来发送设备数据查询请求和控制指令发送请求。同时,我们作为Chart.js作为数据可视化框架来实时展示数据的图表,一旦服务请求者通过测试和调试,我们可以向数据管理系统发送查询请求,查询当前的设备数据,并将数据以图标的形式展示给用户,同时我们可以发送控制指令来改变设备运行的状态,例如调整机械臂的关节角速度和传感器的开关。

【结尾】
实践证明SOA架构的使用,成功降低了系统的耦合度,是软件有了更好的开放性和拓展性,各方面表现优异,同时项目也如期在23年年初正式上线,并得到了客户的一致好评。但项目建设过程中也存在一些不足,由于疫情的原因,很多同事无法在现场办公,影响了沟通效率。我们采用了视频电话+邮件确认的制度,保证了每个同事的信息共享,解决了信息传达的问题。作为一名软件从业人员,唯一不能停下来的技术学习的脚步,我们要紧跟时代发展,提高自身的技术,并灵活运用在每个项目中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/469618.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 开发指南:初学者入门

Android 是全球最受欢迎的移动操作系统之一,为开发者提供了丰富的工具和资源来创建各种类型的应用程序。本文将为你提供一个全面的入门指南,帮助你从零开始学习 Android 开发。 目录 1. 了解 Android 平台[1]2. 设置开发环境[2]3. 学习基础知识[3]4. 创…

漏洞挖掘 | 某医院小程序支付漏洞+越权

漏洞挖掘 | 某医院小程序支付漏洞越权 登陆后点击个人信息,抓包,放到repeter模块 修改strUserID参数可以越权查看别人信息 放intruder模块可以跑数据,这里有几万信息泄露 回到首页,点击医生咨询功能点 随便选一个需要付费的医…

MFC图形函数学习07——画扇形函数

绘制扇形函数是MFC中绘图的基本函数,它绘制的仍是由椭圆弧与椭圆中心连线构成的椭圆扇形,特例是由圆弧与圆心连线构成的圆扇形。 一、绘制扇形函数 原型:BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); …

基于Python的膳食健康系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

头歌网络安全(11.12)

头歌禁止复制解决 必须先下篡改猴!!!! 头歌复制助手 Educoder Copy Helperhttps://scriptcat.org/zh-CN/script-show-page/1860 Java生成验证码 第1关:使用Servlet生成验证码 任务描述 本关任务:使用se…

ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析

在安卓14 安卓15的固件中。如果修改了系统级别的app。那么就会触发安卓14 15的应用签名验证。要么会导致修改的固件会进不去系统,或者进入系统有bug。博文将从几方面来解析去除安卓14 15应用签名验证的几种方法。 💝💝💝通过博文了解: 1💝💝💝-----安卓14去除…

第七部分:2. STM32之ADC实验--AD多通道(AD采集三路传感器模块实验:光敏传感器、热敏传感器、反射式传感器附赠温湿度传感器教程)

这个多通道采用非扫描模式--单次转换模式 1.代码配置链路图 2. ADC的输入通道 3.ADC的非扫描模式的转换模式(单次和连续) 4.ADC的扫描模式的转换模式(单次和连续) 5.采集校准 代码实验: 代码部分: #inclu…

crond 任务调度 (Linux相关指令:crontab)

相关视频链接 crontab 进行 定时任务 的设置 概述 任务调度:是指系统在某个时间执行的特定的命令或程序 任务调度的分类: 1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等。 2.个别用户可能希望执行某些程序,比如…

基于python 的opencv 使用GrabCut算法分割图像代码

#利用grabcut算法分割图像import numpy as np import cv2 from matplotlib import pyplot as plt import warningswarnings.filterwarnings("ignore", module "matplotlib")imgpath E:/code/image_opencv_test/lena.jpg img cv2.imread(imgpath)Coords1x…

AndroidStudio-文本显示

一、设置文本的内容 1.方式&#xff1a; &#xff08;1&#xff09;在XML文件中通过属性&#xff1a;android:text设置文本 例如&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andr…

css:没错又是我

背景 给元素添加背景样式 还可以设置背景颜色、背景图片&#xff08;教练我要学这个&#xff09;、背景平铺、背景图片位置、背景图像固定 背景颜色 这个我们用过&#xff0c;就是&#xff1a; a {background-color: hotpink; } 一般默认值是transparent&#xff0c;也就…

使用Git工具在GitHub的仓库中上传文件夹(超详细)

如何使用Git工具在GitHub的仓库中上传文件夹&#xff1f; 如果觉得博主写的还可以&#xff0c;点赞收藏关注噢~ 第一步&#xff1a;拥有一个本地的仓库 可以fork别人的仓库或者自己新创建 fork别人的仓库 或者自己创建一个仓库 按照要求填写完成后&#xff0c;点击按钮创建…

uniapp的基本使用(easycom规范和条件编译)和uview组件的安装和使用

文章目录 1、uniapp1.uview组件安装2.uview-plus组件安装 2、条件编译3、easycom规范1.组件路径符合规范2.自定义easycom配置的示例 总结 1、uniapp UniApp的UI组件库&#xff0c;如TMUI、uViewUI、FirstUI、TuniaoUI、ThorUI等&#xff0c;这些组件库适用于Vue3和TypeScript&…

攻防世界37-unseping-CTFWeb

攻防世界37-unseping-CTFWeb <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("…

【大数据学习 | HBASE高级】region split机制和策略

1. region split机制 ​ HRegionServer拆分region的步骤是&#xff0c;先将该region下线&#xff0c;然后拆分&#xff0c;将其子region加入到hbase:meta表中&#xff0c;再将他们加入到原本的HRegionServer中&#xff0c;最后汇报Master。 split前&#xff1a;hbase:meta表有…

FMC 扩展子卡6 路 422,8 组 LVDS,8 路 GPIO

FMC 扩展子卡6 路 422,8 组 LVDS,8 路 GPIO 卡是一款支持多路 LVCMOS 和 LVDS 信号互转的 FMC 扩展子板。它能支持 6 路 422 信号的输入 / 输出 ,8 组 LVDS 信号的输入 / 输出和 8 路 GPIO 信号的输入 / 输出。本产品基于一些逻辑转换芯片而设计&#xff0c;能实现差分信号转单…

old-cms(原生PHP开发的企业网站管理系统)

old-cms是一个使用原生PHP开发的实用的PHP企业网站管理系统&#xff0c;包括企业网站常用的功能板块&#xff0c;如&#xff1a;产品管理、新闻管理、栏目管理、模板标签管理、分类管理、诚聘英才、在线留言反馈、关于我们&#xff08;公司简介&#xff09;等等&#xff0c;也有…

IPv4与IPv6的优缺点

IPv4 和 IPv6 都是 TCP/IP 协议的版本。IP 是指互联网协议&#xff0c;是传输控制协议/互联网协议套件&#xff08;TCP/IP&#xff09;的主要部分。 TCP/IP 是一套标准和规则&#xff0c;用于规范不同网络上的设备之间打包数据&#xff08;数据报&#xff09;的传输和交换。互…

git命令及原理

git: 目录则被称之为“树” 文件被称作 Blob 对象. git help <command>: 获取 git 命令的帮助信息 git init: 创建一个新的 git 仓库&#xff0c;其数据会存放在一个名为 .git 的目录下 git status: 显示当前的仓库状态 git add <filename>: 添加文件到暂存区 git …

aws xray通过设置采样规则对请求进行过滤

参考资料 https://github.com/aws/aws-xray-sdk-pythonpython api reference&#xff0c;https://docs.aws.amazon.com/xray-sdk-for-python/latest/reference/node api reference&#xff0c;https://docs.aws.amazon.com/xray-sdk-for-nodejs/latest/reference/ 初始化环境…