inoVat技术文档

集成方式

支持多种三方系统的接入和集成方式

单点登录方式接入其他已有系统

通过SCO-IDaaS认证服务的Token与三方系统的认证服务进行接入,实现单点登录。并保证本系统中用
户权限和数据使用/操作的独立性。

数据接口方式与三方系统进行数据交互

本系统多种数据接口定义和解析方式
支持RestAPI(Http协议)
支持WebService接口集成
支持经过认证的第三方数据源等。

消息通信机制

消息通信由消息中间件RocketMQ完成,具体通信机制如下图
在这里插入图片描述

Name Server

Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。

Broker

Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只
能对应一个Master,Master与Slave的对应关系通过指定相同的Broker Name,不同的Broker Id来定
义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与Name Server集群中的所有节点建立长连接,定时(每隔30s)注册Topic信息到所有Name
Server。Name Server定时(每隔10s)扫描所有存活broker的连接,如果Name Server超过2分钟没有收
到心跳,则Name Server断开与Broker的连接。

Producer

Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic
路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状
态,可集群部署。
Producer每隔30s(由ClientConfig的pollNameServerInterval)从Name server获取所有topic队列的
最新情况,这意味着如果Broker不可用,Producer最多30s能够感知,在此期间内发往Broker的所有消
息都会失败。
Producer每隔30s(由ClientConfig中heartbeatBrokerInterval决定)向所有关联的broker发送心跳,
Broker每隔10s中扫描所有存活的连接,如果Broker在2分钟内没有收到心跳数据,则关闭与Producer
的连接。

Consumer

Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic
路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。
Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。
Consumer每隔30s从Name server获取topic的最新队列情况,这意味着Broker不可用时,Consumer
最多最需要30s才能感知。
Consumer每隔30s(由ClientConfig中heartbeatBrokerInterval决定)向所有关联的broker发送心
跳,Broker每隔10s扫描所有存活的连接,若某个连接2分钟内没有发送心跳数据,则关闭连接;并向该
Consumer Group的所有Consumer发出通知,Group内的Consumer重新分配队列,然后继续消费。
当Consumer得到master宕机通知后,转向slave消费,slave不能保证master的消息100%都同步过来
了,因此会有少量的消息丢失。但是一旦master恢复,未同步过去的消息会被最终消费掉。
消费者队列是消费者连接之后(或者之前有连接过)才创建的。IP、消费者group、topic、tag,任何
一个元素不同,都认为是不同的消费端,每个消费端会拥有一份自己消费队列(默认是broker队列数量
*broker数量)。新挂载的消费者队列中拥有commitlog中的所有数据。

技术架构

整体技术栈用途

用途名称版本
基础框架SpringBoot2.4.4
数据存储MySQL8.0/5.7
消息中间件rabbitmq4.8.0
缓存数据存储Redis6.0.6
JSON序列化框架FastJSON-Alibaba1.2.75
反向代理服务Nginx1.21
ORM中间件MyBatis-plus3.4.2
Http框架OkHttp4.0.0
日志引擎Kibana7.7.1
注册中心nacos2.0.0
接口平台yapi1.9.2
文件服务VsFTP-
搜索引擎Elasticsearch8.0

主要组件介绍

SpringBoot

使用该框架用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式
来进行配置,从而使开发人员不再需要定义样板化的配置。

Nginx

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,
在BSD-like 协议下发行。其特点是占有内存少,并发能力强,nginx的并发能力在同类型的网页服务器
中表现非常优秀,在SCO方案中,Nginx作为反向代理服务器和负载均衡服务器使用。

RabbitMQ

消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳
定性。主要用于解决流量的削峰填谷、程序应用的系统解耦、提升响应性能、处理蓄流压测四大主要功
能;
削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题)
系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死)
提升性能(当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统)
蓄流压测(线上有些链路不好压测,可以通过堆积一定量消息再放开来压测)

MySQL

MySQL 是最流行的开源关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的

RDBMS

(Relational Database Management System:关系数据库管理系统)应用软件之一。

Redis

redis是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类
key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。SCO方案中使用Redis作为
缓存数据的数据存储服务组件使用。

性能说明

安全性

使用SpringSecurity安全框架,基于JWT的Token验证。支持多种认证架构模式的灵活切换,满足集中部
署和分级部署情况下的认证需求。

数据存储兼容性

支持多种数据库,系统开发期间,使用了数据存储层面的中间件。大幅度降低了对某一种特定数据的依
赖。在进行少量配置调整的情况下,可以快速切换底层数据库(需满足支持SQL92/99标准)。可支持
国际国内的多款主流数据库,如:达梦数据库、TiDB、GBase(南大通用)、Oracle、Microsoft SQL
Serever、IBM DB2等。

高可用与负载均衡

基于容器云的容器调度,实现容器应用服务动态伸缩、弹性拓展、滚动更新。保障应用程序能够7*24小
时全天运行。

微服务列表

服务名用途
Inovat-stockcalculate计算服务
Inovat-dataplatform基础数据服务
Inovat-dataclean数据清洗服务
Inovat-auth登录认证服务
Inovat-crontab定时任务
Inovat-api调用转发服务
Inovat-zuul网关路由服务
Inovat-webweb服务
Inovat-python-prediction预测服务

标准&可选软件架构方案

说明:必选架构方案在图中由实心线框标出、可选架构方案及组件由虚线框标出
在这里插入图片描述

基于容器云的必选架构组件

  • 负载均衡服务容器
  • 日志和搜索引擎应用服务容器
  • 关系型数据库容器
  • 缓存服务容器
  • 事件总线MQ消息中间件容器
  • 文件中间件
  • 注册中心

基于容器云的可选架构组件

  • SCO-Idaas门户集成

应用层级架构图

在这里插入图片描述

技术优势
  1. 采用国家密码管理局认可的算法,并符合密码行业标准和技术规范;
  2. 支持符合国密标准的硬件密码设备,完善的密钥保护机制,多级密钥管理,密钥永不以明文出现在
    密码卡外,加解密在密码设备内进行;
  3. 支持本地事务及分布式事务,保证全局事务一致性的前提下,提高事务处理性能;4. 单机支持TB级、分布式支持PB级数据高效管理,支持上千应用连接的大规模并发访问;具备完善
    的数据分区技术和数据并行访问能力;
  4. 数据接口集成标准化,具有SAP集成认证证书;
    API说明文档
    程序编程接口的使用说明
    软件安装手册
    环境要求、安装步骤
    K8s容器云环境、Docker、Gitlab容器(需要李剑涛老师帮助完善)

技术选型

微服务or单应用

开发围绕着是搭建微服务架构还是单应用架构的讨论不曾停止,单应用运维方便,注意力更集中在单一的服务上;而微服务是对于逻辑层面或是业务层面的解耦,虽然运维成本增加,但是后期的维护方面具备一定的优势。
团队基于采用新的架构体系融入到产品中的思想,从业务层面对于服务间进行解耦,搭建数据中台,权限中台,计算服务,定时服务等,采用微服务设计方案。

注册中心

开源网关有consul、Eureka、nacos等,Eureka由于不会再有后续更新而不作为选择目标。开始选择了consul,但是稳定性在使用过程中出现问题,之后将注意力聚焦在nacos上,nacos引起团队的注意主要有几点,一是nacos是阿里团队开发,版本稳定性和对于国内开发人员使用更加习惯;再一个就是nacos集注册中心和配置中心于一身,起到节省资源开资的效果;最后一点,是nacos更为稳定。

网关

网关选择了zuul,产品本身对于转发等要求不高,就使用了springcloud的zuul作为网关

数据库的选取

业务数据的数据库选取mysql,因为普及率最高,且免费,团队开发人员对mysql更为熟练掌握;elasticsearch作为数据匹配的工具来使用,本身es就是作为搜索引擎而生,对于数据的相似度匹配或是查询方面有着强大优势;redis进行如字典数据、用户token、常访问数据的数据缓存,因频繁访问mysql对于其压力较大,缓存到redis会减轻mysql的压力,并且redis基于内存的机制,其访问速度很快。

CI/CD如何实施

使用k8s+docker+jenkins+maven相结合的方式进行,因为整体架构采用的微服务,运维和部署面临着问题,所以采用k8s+docker的镜像部署管理,使用jenkins+maven实现提交代码后自动发版,减轻运维压力,使团队能将更多注意力转移到开发本身上来

前后端接口协议

采用前后端分离的开发方式,前端和后端约定了一套合理的响应规范,定义ResponseModel对象来承载返回数据。

代码规范

使用阿里代码规约

代码结构

|- inovat-server-api                                调用转发转接微服务
    |- feign                                        微服务转发模块
    |- controller                                   网关请求接收模块
|- inovat-server-auth                               登录认证微服务
    |- auth                                         登录认证
    |- menu                                         菜单
    |- role                                         角色识别
|- inovat-server-crontab                            定时任务微服务
    |- Requisitions                                 领用预测,领用量计算
|- inovat-server-dataclean                          数据清洗微服务
    |- category                                     分类清洗
    |- funclocation                                 功能位置清洗
|- inovat-server-dataplatform                       主数据微服务
    |- CalWatching                                  计算日志
    |- DataFactory                                  工厂
    |- DataOrderHistory                             历史订单
    |- DataRepairOutline                            维修工单
    |- DataUpload                                   数据上传模块
    |- Dictionary                                   字典
    |- File                                         文件管理模块
    |- MaterialBatchInfo                            物料批次
    |- MaterialCategoryTree                         物料分类树
    |- Material                                     物料
    |- MaterialFunclocation                         物料功能位置
    |- MatParChildRlat                              物料父子码
    |- MatReplace                                   物料父子码关系
    |- SystemConfig                                 系统设置
|- inovat-server-framework                          主干微服务
    |- commondb                                     通用主数据处理模块
    |- exception                                    异常封装模块
    |- log                                          日志封装模块
    |- util                                         工具包
|- inovat-server-stockcalculate                     计算微服务
    |- cache                                        缓存
    |- feign                                        AI调用
    |- hanlder                                      个性导入处理
    |- impl                                         接口实现模块
        |- CalculatePlatformGenerate                计算平台
        |- MaterialCalculateProcess                 计算过程
        |- MaterialCalculateStoreAdvice             计算结果存储
        |- MaterialPurchaseParam                    计算参数
        |- MaterialPurchasePlanHistoryRelation      计算历史
        |- MaterialPurchasePlan                     采购计划
        |- PredictionMonth                          月份预测
        |- PurPlanExecute                           采购计划执行
    |- jobs                                         定时任务执行
    |- timer                                        定时任务触发
|- inovat-web                                       web微服务
|- inovat-zuul                                      网关微服务
|- inovat-python-prediction                         智能预测微服务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值