8、架构:服务端介绍

news2024/11/23 21:10:27

作为一个产品化的项目,就必然有服务端的支持,这次的项目我们依然使用与上一本小册一样的技术栈 NestJS作为产品的服务端开发语言。

服务端的内容对于常规的前端开发会比较难上手,因为除了服务端的开发语言之外,我们还需要安装各种各样的中间件来完成我们的需求,比如数据库、Redis、以及其他日志、监控等等的额外内容,所以如果团队内部以及有服务端的同学支持,可以只看服务端的一些架构相关内容,具体的代码实现可以暂时忽略。对于工程中所使用的环境以及中间件配置,这里依然再次推荐和耳朵写的一篇介绍文章,总体内容非常全面,需要的同学可以点击查看【环境与中间件配置】,还有其他的环境问题的话,可以留言或者加群沟通一起解决。

由于整个项目比较庞大,涉及的内容与模块也非常多,一个人很难维护所有的内容,所以这里需要将这样一个巨大的服务拆解为一个个子应用,然后以微服务的模式再集成为一个完成的项目,这样可以减少各个模块之间的强依赖性且方便各个模块的独立开发与构建。

在正式开发服务端项目之前,将拆分出来的各个微服务应用进行简单的介绍以方便大家理解它们的功能。

Auth & User


用户与权限系统,我们将基于 RBAC 权限管理模型开发一个独立的系统来管理后续所有系统的用户与权限,减少每个系统都需要重复开发权限的功能。

什么是 RBAC 模型

RBAC(Role-Based Access Control)  的三要素即用户角色权限。 用户通过赋予的角色,执行角色所拥有的权限。

RBAC 引入之后用户的流程如上图所示,用户在进入系统之后,会先进行角色判断,再根据对应的角色查询所匹配的权限,最后根据返回结果来判断是否可执行。

由于 RBAC 权限管理系统在上一本小册中进行了详细的介绍,这里就不过多阐述概念性的内容,这期小册的用户权限系统会基于之前的项目延续开发,减少研发成本,采用的数据库结构如下所示:

Materials


整个搭建体系中比较核心的服务就是物料资产管理,作为搭建服务的基础,需要针对每个搭建的原子物料的产物进行统一管理,包括版本、安全以及配套的开发提效的一些功能。

与之前网关小册中介绍的物料服务不同的是,在新的搭建体系中的物料服务保存的物料类型只有下述几种:

  • 基础组件
  • 物料组件
  • 区块
  • 模板

主要是去除了页面类型,因为页面是一种直面用户的产物结果,也不具备原子性复用性,所以就不再归属于物料系统里面管理,而是将搭建产物放在搭建服务中进行统一的管理。

上图是物料服务的数据库表结构展示,避免有些同学不理解所以这里再次解释一下:

在我们的物料管理类型中分为虚拟物料实体物料,分别对应的是开发物料的代码仓库管理模式采用的 monorepo 跟 multirepo

对于上述两种代码仓库管理模式各有千秋,常规的物料系统一般都是采用 multirepo 管理产物,这样方便工程的构建与管理产物的版本。对于业务组件库这种本身就有领域壁垒的类型产物,以 multirepo 的模式来管理非常方便,也能够让大部分的开发所接受,但这都不是绝对的,具体也要看自己的习惯以及团队的模式。

对于基础组件库来说,开发使用 monorepo 模式来管理代码肯定是最为方便的,因为基础组件库本身有不少的逻辑与基础能力可以复用,所有的依赖都是聚合在一个仓库,方便即时修改与同步。

但这种模式对于物料管理系统来说就没有那么友好了,monorepo 的构建产物不具备唯一性,同时每次的构建产物结果可能存在多个,产物的结果无论是新增还是删除都无法被物料系统所感知,鉴于这种情况才引入虚拟物料的概念,在构建后将产物结果手动同步给物料系统,也可以通过前端界面来手动维护版本管理。

在 NestJS 的小册中,由于并没有实际的场景对应,所以仍有部分同学有困惑,那么在接下来的搭建体系中会对这个概念有更好的理解。

DevOps


Materials 系统只会管理搭建所需要的物料,虽然会关注物料的产物但不会关注搭建产物的构建与发布,而将搭建产物的 CI/CD 过程放在物料系统中显然不合适,但两者又有非常多的重复功能可以复用,所以在此之上重新抽离一套专注于前端资源的 DevOps 项目,作为搭建服务与物料服务的底层 CI/CD 模块,此模块只负责通用性的 CI/CD 过程,不具备业务属性,不同的属性将在物料与搭建服务中进行开发。

所以 DevOps 模块的表结构也会比较简单,仅仅只保留了构建相关的表,与 Materials 系统共用 Projct 表。

一个完整的 DevOps 服务涉及的内容也是非常多的,除了 CI/CD 之外还会包含项目管理、质量监控等等模块,但对于低代码这个产品体系中,我们仅聚焦开发 CI/CD 构建的模块,用于我们搭建中需要的物料以及搭建后的产物的构建与发布,所以不会有非常多重量级的开发任务,如果想了解更多 DevOps 的同学,可以参考我之前的工程化专栏相关的系列文章或者 DevOps 小册。

Space


最后是本小册重点的搭建系统,它承担了整个搭建产物的 CURD 模块,同时会对接 DevOps 底层 CI/CD 模块以及对接 GateWay 消费搭建产物。

简单介绍下搭建服务所具备的一些基本功能:

  • 搭建产物 CI/CD 模块
    • 链接 DevOps 进行不同产物的构建
      • 构建 CSR 发布组合物料
      • 构建 SSR 渲染静态文件
      • 直接发布 Schema
  • 搭建产物管理
    • 业务线划分管理
    • 版本管理
    • 定时上下架

由于我们是将各个功能模块都拆解非常细节,所以实际搭建服务的表结构显得略微单薄,但是整体的业务逻辑还是会稍微复杂点。

总结


以上就是我们整个产品的服务端模块介绍以及表结构介绍,这仅仅是一个比较简单的通用性的例子而不是最终的产品,所以在后期开发过程中会进行一定的表结构更改以及拓展,但主体结构不会有大的改动,对于一些常规的小项目上述的模块其实已经足够满足了。

此章节的内容会随着项目的更新进度不断优化

写在最后

如果你有什么疑问或者更好的建议,欢迎在评论区提出。 👏

8 架构:服务端介绍

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

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

相关文章

如何查看docker File!!!!

1.如何查看dockerfile! 先docker images 查看所有的镜像,然后再一个目录下先创建一个脚本,把下面内容复制进去 #!/bin/bash export PATH$PATH if [ $# -eq 1 ];thendocker history --format {{.CreatedBy}} --no-trunctrue $1 |sed "s…

基于PyQt5的桌面图像调试仿真平台开发(6)去马赛克

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

c++ connect函数连接失败 解决方法

bool Connect() {//初始化网络WSADATA wsadata;WSAStartup(MAKEWORD(2, 2), &wsadata);if (0 ! WSAStartup(MAKEWORD(2, 2), &wsadata))return false;if (LOBYTE(wsadata.wVersion) ! 2 ||HIBYTE(wsadata.wVersion) ! 2) {printf("请求协议版本失败!\n");ret…

12.JavaWeb-Node.js+创建Vue项目

1.Node.js的概念 传统的Web服务器中,每个请求都会创建一个线程,这会导致线程数的增加,从而影响服务器的性能和扩展性,Ryan Dahl借助Chrome的V8引擎提供的能力实现了Node.js——可以在服务端运行的JavaScript(可以把Nod…

SQL-每日一题【197.上升的温度】

题目 表: Weather 编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。 返回结果 不要求顺序 。 查询结果格式如下例。 示例 1: 解题思路 前置知识 交叉连接(CROSS JOIN) 即笛卡尔积&…

Vue Router 的params和query传参的使用和区别

//$router : 是路由操作对象,只写对象 //$route : 路由信息对象,只读对象//操作 路由跳转 this.$router.push({name:hello,params:{name:word,age:11} })//读取 路由参数接收 this.name this.$route.params.name; this.age this.$route.params.age; 1…

ADS笔记,时域和频域绘图

为防止遗忘,记录一下ADS的时间域和频谱图的绘制 在ADS中想得到电路的时域和频域图的话,可以用谐波平衡仿真HB或者选择一个准瞬态仿真控制器插入到原理图中来实现。 目录 方法一:谐波平衡仿真HB时域设置频域设置 方法二:准瞬态仿…

【Linux】git三板斧教程(免密提交配置)

git 什么是git?Linux下安装git基于git的一些商业网站介绍在gitee上创建仓库注册账号创建项目将仓库克隆到本地 git三板斧git三板斧第一招:git add三板斧第二招:git commit三板斧第三招:git push git免密码提交git log查看提交日志…

通俗易懂的期权入门知识汇总,硅铁期权即将上市适合用那种期权策略管理风险

【1】期权:是指某一标的物的买卖权或选择权。具有在某一限定时期内按某一指定的价格买进或卖出某一特定商品或合约的权利。这种权利是买进者拥有的一种权利,并非一种义务 【2】保证金:为确保执行,期权卖方存入的担保金 【3】多头…

Python flask入门教程(flask教程)(轻量级Web框架)

文章目录 flask能做什么?1. 路由和视图函数2. 模板引擎3. 表单处理4. 数据库集成5. 用户认证和授权6. 文件上传和下载7. RESTful API开发拓展:什么是RESTful API开发 8. 扩展性9. 轻量级和灵活性总结 flask入门1. 安装Flask2. 创建Flask应用3. 定义路由和…

深入理解MySQL事务和@Transactional注解:相似之处与作用解析

前言: 今天碰到几个面试人把Transactional注解,和mysql事务搞混,刻意来一篇讲一下这两者的区别,拒绝死记防止新人面试尴尬 先从简单介绍开始 MySQL事务 MySQL事务是数据库管理系统提供的一种机制,用于执行一组数据库操作,这些操作要么全部成功提交&a…

weblogic系列所有漏洞复现弱口令、CVE-2023-21839、CVE-2018-2894、CVE-2017-10271

文章目录 weblogic介绍:所用工具: weblogic弱口令漏洞详情:复现: Weblogic未授权远程代码执行漏洞 (CVE-2023-21839):漏洞详情:复现: Weblogic任意文件上传CVE-2018-2894漏洞描述:复现: 提提神Weblogic反序列化漏洞&am…

详解SystemVerilog中time slot的调度

1. 前言 本文讲一下SystemVerilog的time slot里的regions以及events的调度。SystemVerilog语言是根据离散事件执行模型定义的,由events驱动。SystemVerilog描述是由连接的执行thread或processes组成。Process是可衡量的,也具有状态,并且可以…

Java中操作文件(二)

目录 一、什么是数据流 二、InputStream概述 2.1、方法 2.2、说明 三、FileInputStream概述 3.1、构造方法 3.2、利用Scanner进行字符串读取,简化操作 四、OutputStream概述 4.1、方法 4.2、PrinterWriter简化写操作 五、小程序练习 示例1 示例…

3D渲染的最佳CPU推荐, 目前流行的 3D 渲染 CPU

在 3D 渲染领域,选择合适的 CPU 对于确保最佳性能和生产力至关重要。CPU 充当渲染工作站的动力源,处理复杂的计算并高效执行渲染任务。市场上有众多选择,了解 2023 年最流行的 3D 渲染 CPU 非常重要。 AMD 锐龙 9 5950X AMD Ryzen 9 5950X …

r‘./csv‘和f‘./csv‘有啥区别

r./csv 和 f./csv 在文件路径中具有不同的含义和用途。 r./csv:这是使用原始字符串(raw string)表示法来表示文件路径。在原始字符串中,反斜杠字符(\)不会被视为转义字符,而是作为普通字符。因…

Linux之CentOS_7.9部署MySQL_5.7静默安装实测验证安装以及测试连接全过程实操手册

前言:前面记录了Windows环境的MySQL的安装卸载及相关测试评估,这里记录下在Linux下MySQL的静默部署方式。当然还有更多的其他部署,大家可根据自身环境及学习来了解。 环境: 1、CentOS-7.9-x86_64-DVD-2009.iso 2、MySQL-5.7.42-…

7.4 【Linux】设置开机挂载

7.4.1 开机挂载 /etc/fstab 及 /etc/mtab 根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。 其它 mount point 必须为已创建的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则 (FHS) 所有 mount point 在同一时间之内﹐只…

Go Mutex 错过后悔的重要知识点

Go Mutex 的基本用法 Mutex 我们一般只会用到它的两个方法: Lock:获取互斥锁。(只会有一个协程可以获取到锁,通常用在临界区开始的地方。)Unlock: 释放互斥锁。(释放获取到的锁,通常用在临界区结束的地方。) Mutex 的模型可以用…

基于STM32麦克风阵列音频信号处理系统设计

v hezkz17进数字音频系统研究开发交流答疑 附录: ADAU1452音频处理系统