Dante Cloud 是国内首个支持阻塞式和响应式融合的微服务

Dante Cloud 是国内首个支持阻塞式和响应式融合的微服务。以「高质量代码、低安全漏洞」为核心,采用领域驱动模型(DDD)设计思想,完全基于 Spring 生态全域开源技术和 OAuth2.1 协议,支持智能电视、IoT等物联网设备认证,满足国家三级等保要求、支持接口国密数字信封加解密、防刷、高防XSS和SQL注入等一系列安全体系的多租户微服务解决方案

[一] 发布背景

Dante Cloud 一直秉承着“简洁、高效、包容、务实”的理念,使用微服务领域及周边相关的各类新兴技术或主流技术进行建设,不断地深耕细作、去粗取精、用心打造。目标是构建一款代码质量高、维护投入低、安全防护强的,可以帮助用户快速跨越架构技术选型、技术研究探索阶段,降低传统项目中因安全漏洞、技术负债、低质代码等潜在隐患所产生的高维护投入,期望像项目名字寓意一样,在行业变革的时期承上启下,助力企业信息化建设和变革的产品。

Dante Cloud 在之前的版本中,一直采用的是传统的阻塞式开发方式,使用的也是业界主流的技术和组件。虽然,有很多自身独有的亮点功能,但与业界中同类型的产品并没有太大差别。
2023年年底,一网友建议:希望Dante Cloud支持GRPC和WebFlux容器以拉开跟同类型开源框架性能差异。这个建议打开了一个新的思路,因此,进入2024年以后,Dante Cloud 将响应式版本的设计和开发作为重点,努力将响应式相关的一些新的技术融入到产品中来。

经过几个月的不懈努力,终于不负所望,在开源三周年之际,同时支持阻塞式响应式融合生的版本发布了。

[二] 新版本特性

  • Spring Boot 已升级至 3.3.0
  • Spring Authorization Server 已升级至 1.3.0
  • 全面采用 Java 21,默认开启虚拟线程,以改善阻塞操作的处理降低系统资源的消耗
  • 支持传统的阻塞式微服务与基于 ReactorWebFlux响应式微服务同时运行在一套系统之中
  • 不强制使用响应式方式开发,可根据自身项目对资源吞吐量、资源消耗、特殊功能性能保障的需求,灵活的选择是采用响应式还是阻塞式来开发对应的服务。
  • 在保持 Dante Cloud 原有 Spring Authorization Server 深度扩展的各种特性的前提下,实现响应式服务的动态鉴权与现有体系的完全融合(无需在代码中使用@PreAuthorize写死权限,全部通过后台动态管理)
  • 向“响应式编程”转变,基于 Reactor 重构大量核心代码,进一步提升本系统代码质量和运行效能
  • 重新架构所有核心组件模块,进一步降低各模块的耦合性,减少第三方组件依赖深度,简化各模块使用的复杂度,使用更贴近 Spring Boot 生态官方写法,提升模块组件的可插拔性以及响应式阻塞式不同环境下自动配置的适配能力
  • 实现响应式阻塞式不同类型服务,Session 共享体系以及自定义 Session 体系的完美融合(谁说微服务就一定用不到 Session :))。
  • 新增 GRPC 服务间调用和通信方式,系统核心服务间调用支持 OpenFeignGRPC 两种方式,可通过修改配置实现两种方式的切换。
  • 基于 RSocket 全面重写 WebSocket 消息系统,实现 WebSocket 的响应式改造以及与 Spring Security 体系的全面集成。支持多实例、跨服务的私信和广播
  • 新增 OAuth2 独立客户端,可用于客户端动态注册以及授权码模式
  • 新增基于 Grafana 生态的轻量级日志中心和链路追踪解决方案,使用 OSS 作为数据存储,极大地降低资源需求,可作为原有 Skywalking 和 ELK 重量级体系的备选方案,根据实际需要切换。
  • 开放纯手写动态表单功能。可实现BPMN、动态表单、Camunda 流程引擎的串联,实现工作流程运转(目前仅支持简单工作流)
  • 开放包含自定义属性面板的 BPMN 在线设计器功能。
  • 开放物联网设备认证和管理模块,支持基于 Emqx 的物联网设备通信和管理。
  • 开放阿里云内容审核、百度 OCR、环信、Emqx、天眼查、Nacos、PolarisMash等第三方 OpenApi 封装模块
  • 前端工程支持 Docker 运行,相关参数可通过配置环境变量修改。已上传至 Docker Hub,可以直接下载运行。

[三] 设计答疑

1. 为什么不做“纯血”响应式

响应式固然有其优势所在,但是使用响应式也不得面对一些现实问题:

  • 要做纯血响应式,首先要有生态的保证。目前响应式的接受度还并不是很高,很多组件还都不支持响应式。除非有精力将所有用到的不支持的组件改写一遍,否则很难做到纯血,特别是对于微服务系统来说。
  • 绝大多数应用都是需要使用数据库的,Java 领域现有的 orm 组件,要么不支持响应式(比如 JPA)、要么支持的不是特别好(比如 Hibernate)、要么需要自己编写的内容太多(比如 R2DBC),所以从投入产出比的角度说目前在数据层面做响应式并不“划算”

所以,还是要具体看应用系统的类型,在条件不具备的情况下没有必要做到纯血响应式

2. 响应式可以带来哪些好处

响应式阻塞式的好处,网上有大把的文章介绍,具体就不赘述了。对于实际应用中比较明显的优势:

  • 响应式资源的利用效能更高,对于高资源消耗的功能,响应式的优势更突出
  • 微服务系统往往会需要集成更多内容,特别在数据层面,可能会存在同时使用多种类型数据存储以及数据的流转和迁移,常规事件驱动与响应式的“流”式思维比传统阻塞式更为契合。
  • 响应式可以与事件驱动更好的配合。在 Spring 生态中在多个方面都大量使用了事件驱动,而响应式的核心设计思想也与事件驱动殊途同归。

正因为 Dante Cloud 用了很多 Spring Integration 的内容,传统阻塞式方式越用越别扭,才越来越觉得有必要做响应式支持。如果有时间可以好好看看 Spring Integration,也许会为你打开一个新的世界。

3. 学习响应式编程有哪些难点

  • 如果基于 Reactor 学习响应式编程,难点和突破点就在于 FluxMono 两个类。把这两个类的方法用透、弄明白,基本上就可以消除所有开发阻碍了。
  • 响应式编程最大的难点就是编程思维的转换,因为习惯了阻塞式编程,一时会很难适应响应式式开发思维

世上无难事只怕有心人

[四] Dante Cloud 大事记

总结过往,走向未来!

  • 2021.05.15 Dante Cloud 正式开源
  • 2021.08.04 完成软件著作权登记
  • 2022.02.10 对 Dante Cloud 来了一次“庖丁解牛”,拆解出 Dante Engine 组件库出,为从 Spring Security OAuth2 迁移至 Spring Authorization Server 做前序铺垫。
  • 2022.05.20 首个基于 Spring Authorization Server 的、全新架构的 Dante Cloud 版本发布
  • 2022.07.01 基于 Vue3、Vite2、Pinia、Quasar2、Typescript、Hooks 等最新技术栈全新构建前端工程正式发布
  • 2022.07.30 正式加入 Dromara 开源社区,项目名称由 Eurynome Cloud 更名为 Dante Cloud
  • 2022.08.15 Dante Cloud Star 数突破 1K。
  • 2022.08.18 陆续迎来 Dante Cloud 首批 Committer (狂练胸肌李大懒、jokeway、未来、Looo、我问这瓜保熟吗、Ymind、tao), 感谢有你,作者从此不再孤单。
  • 2022.10.08 基于 pnpm 的 monorepo 模式新版前端上线
  • 2022.12.20 发布首个适配 Spring Boot 3 的正式版。
  • 2023.04.12 Dante Cloud Star 数突破 1.5K。
  • 2023.05.25 全新适配 Spring Boot 3.1.0,开源两周年纪念版本发布
  • 2023.12.07 首个适配 Spring Boot 3.2.0 和 Spring Cloud 2023.0.0 的版本发布
  • 2023.12.15 陆续迎来 Dante Cloud 新的 Committer(Kaiser_Li、James7、leven-space)
  • 2023.12.20 着手规划响应式版本的设计和开发
  • 2024.01.01 Dante Cloud Star 数突破 2K
  • 2024.04.20 响应式版本首个 RC 版本发布
  • 2024.05.23 Dante Cloud 3.1.X 版本停止维护
  • 2024.05.28 Dante Cloud 响应式版本正式发布

[五] 其它说明

1. 分支说明

分支名称对应 Spring 生态版本对应 JDK 版本用途现状
masterSpring Boot 3.3 和 Spring Cloud 2023.0.1JDK 17主要发布分支推荐使用代码分支
developSpring Boot 3.3 和 Spring Cloud 2023.0.1JDK 17Development 分支新功能、ISSUE 均以此分支作为开发,发布后会 PR 至 master 分支。开发分支不保证可用
reactive-masterSpring Boot 3.3 和 Spring Cloud 2023.0.1JDK 21响应式主要发布分支推荐使用的响应式代码分支
reactive-developSpring Boot 3.3 和 Spring Cloud 2023.0.1JDK 21响应式 Development 分支下一代响应式微服务版本开发分支。开发分支不保证可用
3.1.XSpring Boot 3.1 和 Spring Cloud 2022.0.XJDK 17历史代码,不再维护基于 Spring Boot 3.1 时代开发的代码分支,稳定可用,不再维护
2.7.XSpring Boot 2.7 和 Spring Cloud 2021.0.XJDK 8历史代码,不再维护基于 Spring Boot 2.7 时代开发的代码分支,稳定可用,不再维护
spring-security-oauth2Spring Boot 2.6 和 Spring Cloud 2021.0.XJDK 8历史代码,不再维护基于原 Spring Security OAuth2 实现的微服务,稳定可用,因相关组件均不在维护,所以该版本不再维护

2. 系统文档

为了更好的帮助大家理解学习 Dante Cloud,新增文档站点 https://www.herodotus.vip 。 该站点目前包含矫正和重新梳理后的系统部署相关内容,后续计划根据系统涉及的详细知识点和模块陆续补充对应设计实现和认知理解相关文章。 原有站点如无特殊原因,仍旧会保留。


欢迎 Star 一波来支持我们!

Gitee:https://gitee.com/dromara/dante-cloud
Github:https://github.com/dromara/dante-cloud

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

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

相关文章

YOLOv5改进(六)--引入YOLOv8中C2F模块

文章目录 1、前言2、C3模块和C2F模块2.1、C3模块2.2、BottleNeck模块2.3、C2F模块 3、C2F代码实现3.1、common.py3.2、yolo.py3.3、yolov5s_C2F.yaml 4、目标检测系列文章 1、前言 本文主要使用YOLOv8的C2F模块替换YOLOv5中的C3模块,经过实验测试,发现Y…

SwiftUI调用相机拍照

在 SwiftUI 中实现拍照功能,需要结合 UIViewControllerRepresentable 和 UIImagePickerController 来实现相机功能。下面是一个详细的示例,展示如何使用 SwiftUI 来实现拍照功能: 1. 创建一个 ImagePicker 组件 首先,创建一个 U…

C++之类的三种继承修饰符(public、private、protected)总结

1、前言 前文博客介绍了修饰符public、private、protected在类中成员变量和函数访问权限限制的总结,主要如下: public(公有): 公有成员在类的内部和外部都可以被访问。 private(私有): 私有成员只能在类的内…

Qt xml学习之calculator-qml

1.功能说明:制作简易计算器 2.使用技术:qml,scxml 3.项目效果: 4.qml部分: import Calculator 1.0 //需要引用对应类的队友版本 import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 1.4 import QtScxml…

Linux 的权限

目录 Linux 的用户 root 用户 和 普通用户 如何新建普通用户? 如何切换用户? 一开始是以 root 用户登录: 一开始以普通用户登录: 如何删除用户? Linux文件权限 什么是读权限( r )&#…

牛客网输入输出11道题——python3版本

目录 1 介绍2 训练3 参考 1 介绍 本博客用来记录python3版本的常见输入输出。 2 训练 题目1:AB(1) python3代码如下, import sys for line in sys.stdin:a, b map(int, line.split())print(ab)题目2:AB(2) python3代码如下&#xff0c…

vs2019 c++20 规范的 STL 库的智能指针 shared、unique 、weak 、auto 及 make_** 函数的源码注释汇总,和几个结论

智能指针的源码都在 《memory》 头文件中。因为头文件太长,再者本次整理是基于以前的零散的模板分析。故相当于抽取了该头文件中关于智能指针的源码进行分析,注释。 (1 探讨一)当独占指针指向数组时,其默认的删除器是…

Python3 逻辑运算符

前言 本文主要介绍python中的逻辑运算符,主要内容包括逻辑运算符简介、逻辑运算符优先级。 文章目录 前言一、逻辑运算符简介1、and(与) 运算2、or(或)运算3、not(非)运算 二、逻辑运算符优先级总结 一、逻辑运算符简介 逻辑运算符是用来做逻辑运算, …

13.RedHat认证-Linux Shell脚本

13.RedHat认证-Linux Shell脚本 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本。 bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写 sh:由Steve Bourne开发…

用大白话讲懂ceph与clinder的区别

Ceph是一个大仓库,而clinder只是食堂openstack的一个存储组件 详细解释如下: 当我们需要存储大量数据的时候,比如照片、视频、文件等,Ceph就像是一个巨大的仓库,可以帮助我们把这些数据安全地存放起来。 Ceph与传统的…

ABP框架+Mysql(二)

展示页面--图书列表页面 本地化 开始的UI开发之前,我们首先要准备本地化的文本(这是你通常在开发应用程序时需要做的).本地化文本在前端页面会常用。 本地化文本位于 Acme.BookStore.Domain.Shared 项目的 Localization/BookStore 文件夹下: 打开 en.json (英文翻译)文件并更…

STM32-- GPIO->EXTI->NVIC中断

一、NVIC简介 什么是 NVIC ? NVIC 即嵌套向量中断控制器,全称 Nested vectored interrupt controller 。它 是内核的器件,所以它的更多描述可以看内核有关的资料。M3/M4/M7 内核都是支持 256 个中断,其中包含了 16 个系统中…

MySQL—函数—数值函数(基础)

一、引言 首先了解一下常见的数值函数哪些?并且直到它们的作用,并且演示这些函数的使用。 二、数值函数 常见的数值函数如下: 注意: 1、ceil(x)、floor(x) :向上、向下取整。 2、mod(x,y):模运算&#x…

Kmeans聚类模型

K均值(K-Means)聚类是一种常用的无监督学习算法,用于将数据集中的样本划分为K个不同的簇(cluster),使得每个样本都属于距离最近的簇的中心。K均值聚类的目标是通过最小化簇内样本的方差或欧氏距离的平方和来确定簇的中心,从而实现聚类分析。 一、Kmeans聚类模型原理 随…

CTF本地靶场搭建——GZ:CTF基础使用

GZ::CTF 是一个基于 ASP.NET Core 的开源 CTF 平台。 简介 GZ::CTF 是一个基于 ASP.NET Core 的开源 CTF 平台,采用 Docker 或 K8s 作为容器部署后端,提供了可自定义的题目类型、动态容器和动态分值功能。 本项目缘起于作者认为 CTFd 的实现不优雅&a…

Photoshop 首选项设置建议

Windows Ps菜单:编辑/首选项 Edit/Preferences 快捷键:Ctrl K macOS Ps菜单:Photoshop/首选项 Photoshop/Preferences 快捷键:Cmd K 对 Photoshop 的首选项 Preferences进行设置,可以提高修图与设计效率。下面是一些…

burp插件new_xp_capcha识别验证码的简易安装

1.new_xp_capcha 插件是大佬开发的可以正常白嫖,感谢大佬,我找了个不需要任何高级操作就可以做的安装手法,因为我在网上搜了一下就发现这个的安装过程攻略都还蛮复杂,我这里用了个简单的手法 2.安装 下载地址:smxia…

用Python获取Windows本机安装的所有应用程序的实现与分析

一个项目中需要获取本机安装的所有应用程序列表,花了一点时间研究了一下,分享出来。 主要通过访问注册表和桌面快捷方式来完成这一任务,因为注册表中获取到的应用程序列表不完全,因此通过桌面快捷方式进行补充。 导入所需模块 im…

上网是不是必须路由器和光猫之一负责拨号?

链接:https://www.zhihu.com/question/624856022/answer/3245182557 上网并非一定要“拨号”,使用固定IP地址可以直接上网,不需要拨号。你们公司的宽带属于商用宽带,运营商(电信)给配置了固定的IP&#…

Python面试宝典:Python中与单元测试相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第二十章:测试和调试:第一节:单元测试】 第二十章:测试和调试第一节:单元测试单元测试的关键概念:Python中的单元测试工具:使用unittest模块编写单元测试的基本步骤:示例代码面试…