基于 Spring Boot 2.5.1 的微服务架构发布(Eurynome Cloud )

499 阅读12分钟

Eurynome Cloud是一款企业级技术中台微服务架构与服务能力开发平台。基于Spring Boot 2.5.1、Spring Cloud 2020.0.3、Spring Cloud Alibaba 2021.1、Nacos 2.0.1等最新版本开发,遵循SpringBoot编程思想,高度模块化和可配置化。具备服务发现、配置、熔断、限流、降级、监控、多级缓存、分布式事务、工作流等功能,代码简洁,架构清晰,非常适合学习和企业作为基础框架使用。

1、功能介绍

eurynome.png

特点:

  • 更优的代码分包和包依赖,代码包职责明确,规避无意义的依赖以及重复依赖,对基础依赖组件进行高度封装,降低IDE索引时间,提升开发效率
  • 遵循微服开发模式,强化整体的可配置性,依赖功能均可以通过@EnableXXX开启,支持策略化的注入改变部分核心代码的实现逻辑。提供的starter,开箱即用,可零配置创建服务,快速进行开发
  • 同时支持分布式和单体式两种架构,基于单体式架构无须搭建复杂的基础设施即可快速搭建应用,并且可无缝迁移至分布式架构
  • 集成微信小程序、内容审核、证照识别、消息推送、社交登录、多通道SMS等丰富的第三方技术能力输出,可快速构建面向互联网的小程序、APP等应用。

详细功能说明

(1) 统一安全认证中心

功能说明
OAuth2.0 安全认证支持OAuth2.0授权码模式、隐式授权码模式(简单模式)、密码模式和客户端模式四种登录模式
JWT Token令牌采用JWT对OAuth2 Token进行加密
自定义OAuth2页面自定义OAuth2 login、confirm、error页面,提升系统使用用户体验。可结合自身需求进行修改。
OAuth2 登录验证码OAuth2登录增加验证码保护,支持gif、中文、算数等类型,可通过配置进行修改以及是否显示验证码控制
OAuth2登录数据加密传输基于AES对OAuth2登录数据进行动态加密传输,可通过配置对表单参数名进行动态配置,提升系统安全性
RBAC权限管理采用自研的RBAC权限体系,支持OAuth2 Scope权限管理
User、Client数据策略访问支持OAuth2 UserDetails、ClientDetails数据直连数据库和Feign两种数据获取策略模式,OAuth2直连数据库性能更优,Feign访问数据服务独立可动态扩展。可通过配置动态修改具体采用哪种策略
手机短信验证码注册和登录支持通过手机验证码登录认证,与平台为统一体系,统一返回OAuth2 Token,支持服务接口鉴权。
第三方系统社交注册和登录基于JustAuth实现第三方系统社交登录认证,,与平台为统一体系,统一返回OAuth2 Token,支持服务接口鉴权,。所有JustAuth支持的第三方系统均支持。
微信小程序注册和登录支持微信小程序登录认证,与平台为统一体系,统一返回OAuth2 Token,支持服务接口鉴权。
其它注册和登录采用策略模式对外部登录和注册进行支持,目前未支持的登录,可参考标准,动态扩展,即可支持。
权限鉴权基于RBAC模型,以角色为核心,无须配置Security权限注解,支持URL粒度的鉴权和用户权限的动态配置,

(2) 统一服务访问网关

功能说明
网关动态路由基于Gateway和Nacos实现服务网关动态路由,无须增加任何配置,即可支持服务的发现与路由
网关服务鉴权服务网关集成部分权限认证功能,提升系统安全性,降低平台压力
网关服务限流基于Sentinel实现服务的限流,支持基于Gateway Filter的自定义限流
动态文档聚合网关动态Swagger文档聚合,使用Swagger 3.0,支持Knife4j增强。不同环境访问控制
统一跨域处理基于Gateway实现统一跨域处理
统一错误处理平台统一错误处理,支持自定义错误码体系
自定义动态路由支持基于DB的动态路由管理与路由规则配置

(3) 微服务架构支撑

功能说明
服务注册发现基于Nacos实现服务的注册与发现。
服务负载均衡Spring Cloud Netflix停止维护,使用Spring Cloud Loadbalancer全面替换Ribbon,
服务熔断降级整合OpenFeign和Sentinel,从熔断降级、系统负载保护、热点防护等多个维度来保障微服务的稳定性
统一配置中心基于Nacos搭建的统一配置中心,使用MySQL8,支持配置文件自动导入和关键信息加密,可根据文件夹名称自动分组配置。
统一日志中心采用TCP直连的方式采集和发送日志,集成Skywalking TraceID实现日志聚合及ELK日志分析。通过@EnableXXX注解开启或关闭日志采集功能。
分布任务调度极简集成xxl-job,支持分布式任务调度功能
分布事务处理集成Seata,支持分布式事务,无代码侵入,灵活便捷
分布对象存储支持Minio分布式对象存储。同时,集成阿里云OSS,可通过@EnableXXX注解开启或关闭功能。

(4) 微服务运行监控

功能说明
服务调用链监控集成Skywalking进行服务调用链的监控,调用链监控深度可延伸至Undertow、数据库、Redis
应用吞吐量监控集成Skywalking进行应用吞吐量监控
熔断、降级监控集成Sentinel进行服务的熔断、降级监控
微服务状态监控集成Spring Boot Admin进行服务运行状态的监控

(5) 数据自动化处理

功能说明
数据模型初始化RBAC、OAuth2部分核心表、Camunda数据表,在初始部署过程中为自动化创建
核心应用数据初始化RBAC、OAuth2等核心数据,在初始部署过程中为自动化导入
URL权限数据动态汇总自动扫描URL接口作为权限汇总存入系统,根据URL相关信息生成唯一ID,多次导入数据不会重复。可通过配置动态开启或修改扫描内容
Yml配置自动导入服务所需使用的配置文件,可自动根据文件夹进行分组并导入到Nacos中。

(6) 服务开发支撑

功能说明
通用CRUD封装各种类型的代码生成器较多,结合实际应用使用效果来看,代码生成器在实际开发中使用频率低于理想预期。因此,没有考虑提供代码生成器,而是对常规的CRUD进行了多层次的封装,使定制化服务的开发更加便捷。
自研两级缓存封装使用JetCache实现本地、Redis两级缓存。结合CRUD操作,自研数据缓存的封装,支持分页及简单条件查询缓存数据的动态更新,规避Spring Cache等缓存创建Key繁琐和分页数据无法更新的问题
多类型数据库支持默认采用postgresql数据库,支持MySQL、Oracle、H2等多种关系型数据库,无须修改代码可动态切换。数据层同时支持Spring Data Jpa和Mybatis
多消息队列支持适配RabbitMQ和Kafka,默认使用Kafka,支持消息总线(Spring Cloud Bus)
多种服务调用方式默认采用OpenFeign进行服务间调用,支持RestTemplate和OkHttps
共享式多环境切换共享式、统一化多环境配置模式,Yml、Docker均采用此方式配置,避免类似的服务配置、Dockerfile配置导出复制和修改的问题
多团队开发管理支持多团队开发,可针对各个团队开发服务,进行单独的授权配置。
注解模型模块模式除必要依赖逻辑以及强注入顺序要求的模块采用Spring SPI(spring.factories)机制外,其它功能模块均采用@EnableXXX注解编程模型,可选择性进行控制是否开启对应模块,减少不必要的依赖注入和启动。
代码打包记录查询对代码编译信息进行记录,可查询代码版本以及编译时间等相关信息,方便运维人员更好的掌握代码信息。

(7) 信息发送集成

功能说明
微信小程序订阅消息支持微信小程序订阅消息发送。提供订阅消息模版工厂,可根据自身业务需求,编写少量代码既可以拓展支持新订阅消息模版。
极光消息推送集成集成极光消息推送,对极光后台API进行封装,封装度高、调用方便,可快速与自定义业务需求整合,通过@EnableXXX注解开启或关闭。
环信消息集成集成环信IM和消息推送,使用更加便捷,可在应用中根据自定义需求快速整合和拓展IM,发送手机推送消息。通过@EnableXXX注解开启或关闭。
多通道SMS集成集成阿里、百度、中国移动、华为、京东、极光、网易、七牛、腾讯、又拍、云片等平台短信发送通道。可通过配置动态选择具体使用通道。支持多模版定义以及模版参数顺序控制

(8) 内容审核集成

功能说明
阿里云内容审核集成阿里云内容审核,支持文本、图片、音频、视频、网页内容审核,支持同步审核、异步审核、异步Callback方式审核通过@EnableXXX注解开启或关闭。
微信小程序内容审核集成微信小程序内容审核,支持文本、图片、音频内容审核,支持同步、异步审核。通过@EnableXXX注解开启或关闭。
百度证照识别集成百度证照审核,支持营业执照、身份证OCR识别。通过@EnableXXX注解开启或关闭。
天眼查企业信息查询集成天眼查企业信息查询。通过@EnableXXX注解开启或关闭。

2、技术栈和版本说明

(1)Spring全家桶及核心技术版本

组件版本
Spring Boot2.5.1
Spring Cloud2020.0.3
Spring Cloud Alibaba2021.1
Spring Boot Admin2.4.1
Nacos2.0.1
Sentinel1.8.0
Seata1.3.0

Spring 全家桶版本对应关系,详见:版本说明

(2)所涉及的相关的技术:

  • JSON序列化:Jackson & FastJson
  • 消息队列:Kafka 适配RabbitMQ,支持消息总线(Spring Cloud Bus)
  • 数据缓存:JetCache + Redis (两级缓存)
  • 数据库: Postgresql,MySQL,Oracle ...
  • 前端实现:Vue + Vuetify(单体版Vue + Vuetify + Typescript + 模块化)
  • 持久层框架: Spring Data Jpa & Mybatis
  • API网关:Gateway
  • 服务注册&发现和配置中心: Nacos
  • 服务消费:OpenFeign & RestTemplate & OkHttp3
  • 负载均衡:Ribbon
  • 服务熔断&降级&限流:Sentinel
  • 项目构建:Maven
  • 分布式事务:Seata
  • 服务监控:Spring Boot Admin
  • 链路跟踪:Skywalking
  • 文件服务:阿里云OSS/Minio
  • 数据调试:p6spy
  • 日志中心:ELK
  • 日志收集:Logstash Logback Encoder

3、 版本号说明

本系统版本号,分为四段。

  • 第一段和第二段,与Spring Boot 版本对应,根据采用的Spring Boot版本变更。例如,当前采用Spring Boot 2.4.5版本,那么就以2.4.X.X开头
  • 第三段,表示系统功能的变化
  • 第四段,表示系统功能维护及优化情况

4、工程结构

eurynome-cloud
├── configurations -- 配置文件脚本和统一Docker build上下文目录
├── dependencies -- 工程Maven顶级依赖,统一控制版本和依赖
├── documents -- 工程相关文档
├── packages -- 基础通用依赖包
├    ├── eurynome-cloud-common -- 公共工具类
├    ├── eurynome-cloud-data -- 数据持久化、数据缓存以及Redis等数据处理相关代码组件
├    ├── eurynome-cloud-rest -- Rest相关代码组件
├    ├── eurynome-cloud-crud -- CRUD相关代码组件
├    ├── eurynome-cloud-sercurity -- Security通用代码
├    ├── eurynome-cloud-oauth -- OAuth2通用代码
├    ├── eurynome-cloud-message -- 消息队列、BUG相关代码组件
├    ├── eurynome-cloud-kernel -- 微服务接入平台必备组件
├    ├── eurynome-cloud-oauth-starter -- 自定义OAuth2 Starter
├    └── eurynome-cloud-starter -- 微服务核心Starter
├── platform -- 平台核心服务
├    ├── eurynome-cloud-gateway -- 服务网关
├    ├── eurynome-cloud-management -- Spring Boot Admin 监控服务
├    └── eurynome-cloud-uaa -- 统一认证模块
├── services -- 平台业务服务
├    ├── eurynome-cloud-upms-api -- 通用用户权限api 
├    ├── eurynome-cloud-upms-logic -- 通用用户权限service
├    ├── eurynome-cloud-upms-rest -- 通用用户权限rest 接口
├    ├── eurynome-cloud-upms-ability -- 通用用户权限服务
└──  └── eurynome-cloud-bpmn-ability -- 工作流服务 

5、项目地址

6、开源协议

Apache Licence 2.0 (英文原文) Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。 需要满足的条件如下:

  • 需要给代码的用户一份Apache Licence
  • 如果你修改了代码,需要在被修改的文件中说明。
  • 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
  • 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。 Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

7、用户权益

  • 允许免费用于学习、毕设、公司项目、私活等。
  • 遵循 Apache 2.0 协议

8、交流反馈

9、界面预览

ui1.png

ui2.png

ui3.png

camunda.png

oauth2-login1.png

oauth2-login2.png

nacos.png

sentinel.png

elk.png

spring-boot-admin-1.png

spring-boot-admin-2.png

skywalking.png