论微服务架构及应用

 2021年初,我所在的公司承担了某能源集团化工产业部的化工生产运营综合管控系统,简称运营管控系统。我有幸担任了该项目的系统架构师,主要负责系统的体系架构、架构评估和研发管理工作。
    随着国内外化工行业日新月异的繁荣与发展,化工产业部在数字化、网络化、信息化方面要求不提提高。传统管理方式和技术手段也越来越难以适用瞬息万变的市场情况了。加上原来化工产业部原来建设的信息系统大多部署困难,升级麻烦,扩展性差等原因。从2018年开始,化工产业部陆续投资建设了MES(生产制造管理系统)、设备信息管理系统、MES、能源管理系统、安全运营管控系统。这些系统在无论是业务得切合度,还是系统本身的运行情况都非常良好。但是这些系统是各自运行,相互独立,是一个个所谓的信息孤岛。正是因为这些信息孤岛,使得运营管控系统就应运而生了。
   针对化工业务当前的特点以及集团化工产业部的具体业务情况,经过项目组讨论,大家一致决定采用微服务架构来设计和实现运营管控系统。数据库采用PostgreSQL数据库,操作系统采用华为欧拉系统。大家都知道,微服务是一种架构风格,它的主要特点有服务组件化、独立部署、耦合程度低、高度自治、故障隔离等。所谓的微服务组件化是将复杂的单体应用程序拆分成更小的服务,每个服务都围绕具体的业务功能或者流程来构建从而实现服务组件化。独立部署是每个微服务都可以独立开发、测试、部署。不需要依赖其他服务。这样团队可以并行工作,从而提高开发效率;耦合程度低是服务之间通过轻量级通信机制进行交互,达到降低服务之间的耦合程度,使得系统更容易维护和扩展,从而提高系统的灵活性和可定制性。其中轻量级通信机制有REST api,事件流,消息代理等。高度自治是每个服务可以选择独立的技术栈,包括数据库和部署方式从而提高系统的灵活性和可定制性。故障隔离是每个微服务都是独立的,一个服务发生故障不影响其他服务正常运行,从而实现故障隔离,提高系统可用性。
   在决定采用微服务架构后,第一要务就是按业务需求拆分服务。根据运营管控具体业务需求,系统一共分5大模块,工厂模型、智慧工作台、通用服务、业务活动监测、运营管控。我们把这5个大模块分别部署成了5个独立的服务。但是,通用服务模块实现的功能主要是通过ETL方式在数据库之间抽取、推送数据。可以说不属于微服务。其余的四个服务都是采用通用的前后分离模式,前端vue页面或者报表+后端Springboot服务,底层实现原理其实都是ajax+json方式。这其实就是典型微服务。工厂模型、智慧工作台、业务活动监测、运营管控,为了完全达到独立部署,互不影响,四个模块不仅用四台服务器部署成四个独立的服务,同时也配置了四个独立数据库。但是,为了方便服务之间相互调用,又单独配置一个Nginx代理服务器,统一代理上述四个服务,这样所有的服务就有一个统一的访问入口。另外说明一点,所有服务器都部署在集团机房,相关的安全措施以及服务器监控软件、日志软件都是集团运维团队统一实施部署。
   数据推送模块的功能不仅在各个模块之间的推送数据,也在各个系统之间的推送数据。正因为有了数据推搡功能,各个系统、各个模块,可以说都能拥有整个化工板块的数据,从而使得各个系统融为了一个有机整体。系统之间也真正实现无缝衔接。而业务活动监测主要通过一些关键业务指标的定义,同时收集部分相关数据然后进行分析、展示,另外加上一些特殊算法。化工业务人员不仅能从业务活动监测页面看到相关设备和装置的实时数据,还能通过图标或者其他方式做一定的分析和预测。这个功能模块看简单,做起来还是比较复杂的,我们的团队在这个过程有过许多的反反复复,也有过一定经验教训。不仅学到很多化工方面的专业知识,在软件开发方面也积累些许宝贵经验。还有,工厂模型是管理整个化工板块的基础数据,包括物料、物料分类、装置、组织机构等数据,这些数据如果有变化,通过MQ以消息形式推送到其他各个系统。智慧工作台主要实现了两个功能模块,一个功能是当前用户处理自己所需要处理的待办业务,还有一个功能模块就是当前登录用户查看自己所关注的业务数据变化情况。这两个模块相对都比较简单。
   最后说一下,运营管控是整个系统中最大的功能模块,也是最复杂的一个模块。该模块主要是两大功能,一个功能是各个化工厂通过报表的形式给化工产业部报送数据。另一个功能是数据展示功能,各级领导通过页面的形式查看各类生产、销售、采购、物质等数据图表。报送数据功能来自两个方面,一部分数据是各个化工厂业务人员通过报表手工录入,报表开发用的是FR报表工具。另外一部分数据是通过DCS和PLC等自动化系统采集过来,因为数据上传必须通过广域网,很难做到秒级传输,所以数据采集周期为1分钟。数据展示功能重点在各个化工厂以及化工产业部大屏上,不仅需要数据实时、准确,而且得有各种展现效果。这个模块的开发过程看似复杂,其实过程反而似乎没有曲折,因为我们有了前面经验,遇到问题好像没那么多,而且解决问题速度也相对比较快了。最关键的还是用微服务架构的过程中,我们前面做的功能模块形成组件,在开发后面模块过程中用起来了。
    从整个项目开发历程来看,虽然在业务监测活动模块中,有一些反复,也遇到了需求把握不准确的场景,但是微服务架构的使用弥补了短板,对我们确实有所帮助。在以后开发活动中,微服务架构应该是首选架构,尤其是遇到这种时间紧,任务重的项目。采用微服务架构可以说事半功倍,整个项目开发历时一年又3个月,在2022年3月成功上线,系统运行至今非常稳定,同时赢得了同事、领导、客户的一致好评。该项目在2022还被公司评为优秀项目。作为该项目的架构师、设计师。不仅学到了很多的知识,同时又一次积累到宝贵的经验。

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

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

相关文章

机器学习 | 线性判别分析(Linear Discriminant Analysis)

1 机器学习中的建模 1.1 描述性建模 以方便的形式给出数据的主要特征,实质上是对数据的概括,以便在大量的或有噪声的数据中仍能观察到重要特征。重在认识数据的主要概貌,理解数据的重要特征。 Task:聚类分析,数据降…

C++类和对象第三讲总结

1.对象指针:指针->成员 // 指针存放了对象的地址 // 指针作为函数参数,可以真正改变对象成员的值 // 指针可以指向对象数组,它存放了数组首元素地址 // 指针偏移量可以访问数组的每个对象 2.一个练习案例 使用指针和对象数组打印…

【数学公式大全整理——1.0】

导数公式 积分表 万能公式 初等函数 重要极限 ### 诱导公式 和差角 和差化积 倍角公式 半角公式 正弦 余弦定理 反三角函数 高阶求导公式

Java-SpringMVC

一、SpringMVC简介 1、什么是MVC MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为实体类Bean&#xff1a…

神秘顾客研究:如何利用神秘顾客检测门店的价格呢?

神秘顾客检测门店的价格是一种市场调研手段,旨在通过模拟普通顾客的行为来收集门店销售价格的数据,进而评估门店的定价策略、服务质量和市场竞争力。这种检测方式可以帮助企业更好地了解市场动态和消费者需求,为制定有效的市场策略提供数据支…

数据库系统概论(超详解!!!) 第三节 关系数据库标准语言SQL(Ⅳ)

1.集合查询 集合操作的种类 并操作UNION 交操作INTERSECT 差操作EXCEPT 参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同 查询计算机科学系的学生及年龄不大于19岁的学生。SELECT *FROM StudentWHERE Sdept CSUNIONSELECT *FROM StudentWHERE Sage&l…

Kubernetes(k8s):部署、使用 metrics-server

Kubernetes(k8s):部署、使用 metrics-server 一、metrics-server简介二、部署metrics-server2.1、 下载 Metrics Server 部署文件2.2、修改metrics-server.yaml 文件2.3、 部署 Metrics Server2.4、 检查 Metrics Server 三、使用 Metrics Se…

网络升级固件

资源信息 可知 : install\soc_cv1800b_milkv_duo_sd\boot.sd文件较设备中的同名文件多了128个字节的文件头;install\soc_cv1800b_milkv_duo_sd\rawimages\boot.sd文件与设备中同名文件相同; 环境搭建 服务器 启动TFTP服务 安装TFTP服务器…

windows下通过vscode访问ubuntu(绝大部分Linux下开发所采用的方案)

前言 本篇博客是介绍VSCode远程连接Ubuntu进行开发的解决方案,前提是安装好了VMWare,Ubuntu,windows下的VSCode。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关…

深信服:借助观测云实现全链路可观测性

导读 深信服科技股份有限公司 简称「深信服」( Sangfor Technologies Inc. ),是一家领先的网络安全和云计算解决方案提供商,致力于为全球客户提供高效、智能、安全的网络和云服务。随着公司业务的不断扩展,也面临着监…

OpenHarmony实战:轻量系统芯片移植准备

由于OpenHarmony工程需要在Linux环境下进行编译,此章节将指导厂商搭建OpenHarmony的编译环境、获取OpenHarmony源码,并且创建厂商工作目录完成厂商芯片的编译框架适配。 搭建编译环境 开展移植前请参考开发环境准备完成环境搭建工作。 获取源码 获取…

【Redis】Redis的类型及相关操作

一、常用的key操作命令 keys * 查看当前数据库的键值 ttl key 查看还有多少秒过期,-1表示永不过期,-2表示过期 del / unlink key 同样是删除,unlink是非阻塞删除,del则有可能导致阻塞 select dbindex 切换数据库 flushdb 清空…

群晖配置FTP服务结合内网穿透实现公网访问本地NAS中储存文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具,实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

文章分享:《呼吸道传染病标本采集及检测专家共识》

【摘要】呼吸道传染病临床特点多表现为发热和(或)呼吸道症状,病原学组成复杂,标本类型选择多样,如何从发热伴呼吸道症候群患者中早期正确识别出潜在呼吸道传染病患者是防控的关键环节。增强医务人员对呼吸道传染病临床…

unity学习(78)--unity调试--长痛不如短痛

1.在vs2022中,工具--获取工具与功能。 2. 安装图中工具,原来我早就安装了。 3 f9下断 同时点击图中按钮 vs此时变为如下状态 unity中出现如下提示: 4 在unity中运行游戏,vs这边确实成功断住了!

第四百三十七回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 们在上一章回中介绍了"不同平台上换行的问题"相关的内容,本章回中将介绍如何在页面上显示蒙板层.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们…

简易线程池实现

简易线程池实现 ThreadPool.hpp&#xff08;线程池&#xff09; #ifndef THREADPOOL_HPP #define THREADPOOL_HPP#include <iostream> #include <cstdlib> #include <unistd.h> #include <vector> #include <queue> #include "sem.hpp&qu…

【已解决】java: 无效的目标发行版: 19

问题描述 现在从Spring Boot官网下载的Spring boot文件的诸多配置的版本&#xff0c;无法直接选择和电脑已有配置相匹配的。所以直接下载安装包&#xff0c;并用IDEA打开后无法直接运行。 我在网站上下载的配置如下图&#xff1a; 我遇到的问题是运行时报错java: 无效的目标发…

Flink Checkpoint 状态后端详解:类型、特性对比及场景化选型指南

Apache Flink 提供了多种状态后端以支持 Checkpoint 机制下的状态持久化&#xff0c;确保在故障发生时能够快速恢复状态并实现 Exactly-Once 处理语义。以下是几种常见状态后端的详细介绍及其对比情况&#xff0c;以及不同场景下的选型建议&#xff1a; 1. MemoryStateBackend…

Go项目结构整洁实现|GitHub 3.5k

一、前言 hi&#xff0c;大家好&#xff0c;这里是白泽。今天给大家分享一个GitHub &#x1f31f; 3.5k 的 Go项目&#xff1a;go-backend-clean-arch https://github.com/amitshekhariitbhu/go-backend-clean-architecture 这个项目是一位老外写的&#xff0c;通过一个 HTT…