基于SpringCloud体系实现的一套支持云原生的分布式微服务架构,提供OAuth2/JWT权限认证、分布式事务、灰度、限流、链路追踪等功能,支持Docker容器化部署、镜像交付、K8S容器编排

简介: lion是基于Spring Cloud体系实现的一套支持云原生的分布式微服务架构,为了让中小型公司解决当下技术瓶颈,快速将现有应用服务架构拆分改造为分布式微服务架构,进入 All-in-Cloud 时代,只需在本架构上进行相关业务开发即可,大大减少了分布式微服务架构的门槛,仅在本框架上做"减法"的目的,使架构师及开发人员不必过多的关注架构本身,只需专注于业务开发

Lion 项目简介
项目已托管至Github,请前往https://github.com/micyo202/lion查看源码
项目镜像已经推送至Docker Hub,请前往https://hub.docker.com/u/micyo202查看/拉取

感谢JetBrains提供的开源许可,推荐使用IntelliJ IDEA进行开发

lion是基于Spring Cloud体系实现的一套支持云原生的分布式微服务架构,为了让中小型公司解决当下技术瓶颈,快速将现有应用服务架构拆分改造为分布式微服务架构,进入 All-in-Cloud 时代,只需在本架构上进行相关业务开发即可,大大减少了分布式微服务架构的门槛,仅在本框架上做"减法"的目的,使架构师及开发人员不必过多的关注架构本身,只需专注于业务开发

项目采用 Gradle 构建,基于 Java 8/11/13、SpringBoot 2.2.6.RELEASE、SpringCloud Hoxton.SR2、Spring Cloud Alibaba 2.2.0.RELEASE、MyBatis Plus 3.3.1 等核心技术体系实现的一套支持云原生的分布式微服务架构,提供 OAuth2/JWT 权限认证、分布式事务、灰度、限流、熔断降级、分布式锁、链路追踪、MQ等功能,支持 Docker 容器化部署、镜像交付、K8S容器编排

使用Nacos作为服务注册/发现、配置中心

使用Sentinel来查看近实时的接口运行状态和调用频率,并用作服务限流、熔断降级等处理,避免了分布式服务之间调用的“雪崩”效应

使用Seata作为分布式事务管理,采用AT事务模式自动完成两阶段提交/回滚

使用Spring Boot Admin来监控各个独立Service的运行状态

使用Spring Cloud Gateway作为路由网关服务

使用Zipkin / SkyWalking进行查看完整链路追踪信息等

使用Feign, 做到HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求

项目后期会不断更新与时俱进,敬请期待...

分支说明
master分支,支持Java 8/11/13重构升级优化后的最新版(推荐)
release1.x分支,基于Java 8、SpringBoot 2.1.2.RELEASE、SpringCloud Greenwich.RELEASE、Spring Cloud Alibaba 2.1.0.RELEASE体系实现,支持Java、Scala混编,的最终版
eureka分支,使用 Eureka 作为服务注册发现中心(Eureka官宣2.x版本不再开源,项目使用Nacos)
hystrix分支,使用 Hystrix 做为服务断路器(Hystix官宣停止更新,项目使用Sentinel)
zuul分支,使用 Zuul 做为路由网关(由于Zuul 2.x的不断跳票,SpringCloud后续没有整合Zuul 2.x的计划,项目使用Spring Cloud Gateway)
项目架构图

数据库表关系图

一、项目开发环境&工具
MacOS / Windows
CentOS
Java 8/11/13
IntelliJ IDEA / Eclipse
二、相关软件
说明:“√”表示必要服务,“X”表示非必要服务

名称 链接 必须
MySql 8.0.19 https://www.mysql.com
Redis 5.0.7 https://redis.io
RabbitMQ 3.8.2 https://www.rabbitmq.com
Nacos 1.1.4 https://nacos.io
Sentinel 1.7.1 https://github.com/alibaba/Sentinel
Seata 1.0.0 https://seata.io
Zipkin 2.20 https://zipkin.io x
SkyWalking 6.6.0 http://skywalking.apache.org x
ElasticSearch 7.6.1 https://www.elastic.co/cn/ x
注:在启动项目前,请先确保启动:MySql 8.0.19、Redis 5.0.7、RabbitMQ 3.8.2、Nacos 1.1.4、Sentinel 1.7.1、Seata 1.0.0这6个必备服务(需把Sentinel默认端口8080改为8858)

三、组件说明
服务注册/发现、配置中心:Nacos
服务监控:Spring Boot Admin
消息队列:AMQP -> RabbitMQ
负载均衡:Feign / Ribbon
限流、熔断降级:Sentinel
路由网关:Spring Cloud Gateway
链路追踪:Spring Cloud Sletuh -> Zipkin / SkyWalking
权限认证:Spring Security -> OAuth2 / JWT
ORM框架:MyBatis(MyBatis-Plus)
数据源监控:Druid
RESTful APIs文档:Knife4j
分布式锁:Redisson
分布式事物:Seata
四、项目结构
lion -- 根目录
├── lion-admin -- 服务监控
├── lion-gateway -- 网关服务
├── lion-common -- 通用工具类
├── lion-auth -- 安全认证服务
├── lion-demo -- 示例模块
| ├── lion-demo-provider -- 服务提供者
| ├── lion-demo-consumer -- 服务消费者
五、项目部署
1、下载项目git clone --depth 1 https://github.com/micyo202/lion.git

2、进入项目根目录执行./gradlew -x test clean命令,使用Gradle初始化项目

3、初始化完毕后导入到IDE开发工具中(建议使用IntelliJ IDEA作为开发工具

4、创建3个数据库分别为lion、seata、zipkin并分别执行项目根目录下database中的lion.sql、seata.sql、zipkin.sql脚本,该脚本会创建项目所需的表(lion库中包含:用户表、角色表、菜单资源表等,seata库中包含:全局事务表、分支事务表、全局锁表,zipkin库中包含:链路追踪相关表)

5、参考文档中二、相关软件的内容,启动6个必备服务,否则项目无法正常运行

6、根据自己的服务器情况,修改resources下bootstrap.yml配置中的nacos服务地址,及application.yml配置中mysql、redis、rabbitmq、sentinel的服务地址跟用户名/密码(注:可将application.yml配置文件注释打开放在项目中,或将application.yml配置文件放入nacos配置管理中)
7、完成以上步骤就可以正常启动部署服务了

8、项目开发详细示例代码,可参考lion-demo示例模块

9、测试方法使用postman导入项目根目录下json中的postman.json脚本即可

六、端口使用
Nacos(端口:8848)

Sentinel(端口:8858)

Seata(端口:8091)

Zipkin(端口:9411)

SkyWalking(端口:8900)

lion-admin(端口:8200)

lion-gateway(端口:8400)

lion-auth(端口:8888)

lion-demo

lion-demo-provider(端口:8601、8602、8603...)
lion-demo-consumer(端口:8701、8702、8703...)

2023-02-10 14.54.55.jpg
IMAGE 2023-02-10 14:54:48.jpg
IMAGE 2023-02-10 14:54:12.jpg
截屏2023-02-10 14.45.45.png

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
12月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
11月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
11月前
|
存储 安全 JavaScript
秘密任务 3.0:如何通过 JWT 认证确保 WebSockets 安全
本文探讨了如何通过JWT认证保障WebSockets通信安全,防止敏感数据泄露和未授权访问。首先介绍了保护WebSockets的重要性,随后详细讲解了JWT与WebSockets的协同工作流程:特工通过API登录获取JWT,建立连接时提供令牌,服务器验证后决定是否授权。还提供了Node.js实现示例及客户端连接方法,并分享了最佳实践,如使用HTTP-only Cookie、短生命周期令牌和WSS加密。最后推荐了Apipost工具助力实时测试与调试,确保构建高效安全的实时网络。
|
XML JavaScript Java
SpringBoot集成Shiro权限+Jwt认证
本文主要描述如何快速基于SpringBoot 2.5.X版本集成Shiro+JWT框架,让大家快速实现无状态登陆和接口权限认证主体框架,具体业务细节未实现,大家按照实际项目补充。
939 11
|
JSON 安全 算法
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
1617 8
|
JSON 安全 数据安全/隐私保护
Python认证新风尚:OAuth遇上JWT,安全界的时尚Icon👗
在当今互联网世界中,数据安全和隐私保护至关重要。Python 作为 Web 开发的主流语言,其认证机制也在不断进步。OAuth 2.0 和 JSON Web Tokens (JWT) 是当前最热门的安全认证方案,不仅保障数据安全传输,还简化用户认证流程。本文介绍如何在 Python 中结合 OAuth 2.0 和 JWT,打造一套既安全又高效的认证体系。通过 Flask-HTTPAuth 和 PyJWT 等库,实现授权和验证功能,确保每次请求的安全性和便捷性。
256 3
|
Java Docker 微服务
SpringBoot微服务打包Docker镜像
SpringBoot微服务打包Docker镜像
992 11
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
579 2
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
4757 2

相关产品

  • 容器服务Kubernetes版