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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
10
分享
相关文章
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
151 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
160 11
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
72 1
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 "busybox-container" 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
219 93
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
32 23

相关产品

  • 容器服务Kubernetes版