Giter Site home page Giter Site logo

micyo202 / lion Goto Github PK

View Code? Open in Web Editor NEW
464.0 37.0 212.0 49.03 MB

使用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容器编排

Home Page: https://www.micyo202.cn

License: Apache License 2.0

Java 97.05% PLpgSQL 2.95%
gradle springboot springcloud nacos sentinel seata feign oauth2 zipkin skywalking

lion's Introduction

Lion

8015461 16e4831f4de664c7

Build Status Gitter Codacy Badge Codecov Version Java Gradle Spring Boot Spring Cloud Apache License 2.0 GitHub Stars GitHub Fork


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请求

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

项目镜像已经推送至 Docker Hub,请前往 https://hub.docker.com/u/micyo202 查看/拉取

项目架构图

1200

数据库表关系图

1108

分支说明

  • 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://sentinelguard.io

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.19Redis 5.0.7RabbitMQ 3.8.2Nacos 1.1.4Sentinel 1.7.1Seata 1.0.06 个必备服务(需把 Sentinel 默认端口 8080 改为 8858),启动方式可参考 docs文档

三、组件说明

  • 服务注册/发现、配置中心:Nacos

  • 服务监控:Spring Boot Admin

  • 消息队列:AMQP → RabbitMQ

  • 负载均衡服务调用:Feign / Ribbon

  • 限流、熔断降级:Sentinel

  • 分布式事务:Seata

  • 路由网关:Spring Cloud Gateway

  • 链路追踪:Spring Cloud Sletuh → Zipkin / SkyWalking

  • 权限认证:Spring Security → OAuth2 / JWT

  • 分布式锁:Redisson

  • ORM框架:MyBatis(MyBatis-Plus)

  • 数据源监控:Druid

  • RESTful APIs文档:Knife4j

四、项目结构

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. 按照文档中 二、相关软件 的内容,启动 6 个必备服务,否则项目无法正常运行

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

  6. 根据自己的服务器情况,修改 resourcesbootstrap.yml 配置中的 nacos 服务地址,及 application.yml 配置中 mysql、redis、rabbitmq、sentinel 的服务地址跟用户名/密码

  7. 将修改后的 application.yml 配置文件按应用名并分环境放入 nacos 配置管理中(dev / test / prod

  8. 完成以上步骤就可以正常启动部署服务了

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

  10. 测试方法使用 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…​)

七、效果预览

Nacos服务列表

1200

Nacos配置列表

1200

Nacos服务详情

1200

Boot Admin应用监控

1200

Boot Admin应用列表

1200

Boot Admin应用详情

1200

Sentinel服务限流、熔断降级

1200

Zipkin链路信息

1200

Zipkin链路追踪

1200

Zipkin拓扑图

1200

SkyWalking监控面板

1200

SkyWalking链路追踪

1200

SkyWalking拓扑图

1200
1200

Druid SQL监控

1200

Druid URI监控

1200

Druid Spring监控

1200

RESTful APIs文档

1200
1200

八、开源协议

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

  • 需要给代码的用户一份 Apache Licence

  • 如果你修改了代码,需要在被修改的文件中说明

  • 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明

  • 如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache Licence。你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache Licence 构成更改

Apache Licence 也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售

Tip

注:对未经过授权和不遵循 Apache Licence 2.0 开源协议二次开源或者商业化的我们将追究到底

lion's People

Contributors

micyo202 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lion's Issues

微服务内部大规模调用 ,会出现报错

Ⅰ. 问题

微服务内部多线程大并发调用 ,会出现报错

Ⅱ. 详细描述

如果有异常,请追加堆栈信息:

![image](https://user-images.githubusercontent.com/6133248/90471788-a67c8380-e151-11ea-8370-a3885c0388ce.png)

仅需将堆栈信息粘贴到这里!

Ⅲ. 是否对工程有做改动

openfeign

Ⅳ. 补充

image

Ⅴ. 环境信息

  • lion版本:
  • jdk版本:
  • 操作系统:
  • 其他:

springboot admin和gateway通信端口超时,有交流群吗

2019-12-24 16:33:41,677 -ERROR 46641 [ctor-http-nio-3] r.u.Loggers$Slf4JLogger Loggers.java: 300 -> [id: 0x6b4ea98f, L:/192.168.43.157:51574 - R:/192.168.43.157:8882] The connection observed an error
io.netty.handler.timeout.ReadTimeoutException: null

jwt token 生成方式

Ⅰ. 问题

如果使用jwt方式来代替oauth2本身的acctoken,在调用revoke的时候,jwt这个token是持续有效的,只能等自己过期吗?

Ⅱ. 详细描述

如果有异常,请追加堆栈信息:

仅需将堆栈信息粘贴到这里!

Ⅲ. 是否对工程有做改动

Ⅳ. 补充

Ⅴ. 环境信息

  • lion版本:
  • jdk版本:
  • 操作系统:
  • 其他:

分布锁

分布锁建议 使用 Klock 这个开源项目

登录响应

Ⅰ. 问题

登录时,如果密码输入错误,返回的错误提示是英文的,能否切换成中文的,比如用户名密码错误

Ⅱ. 详细描述

如果有异常,请追加堆栈信息:

仅需将堆栈信息粘贴到这里!

Ⅲ. 是否对工程有做改动

Ⅳ. 补充

Ⅴ. 环境信息

  • lion版本:
  • jdk版本:
  • 操作系统:
  • 其他:

English translations for the repository documentation and README

I believe it would be really helpful if english translations were to be added, it will allow a lot more to adapt the project, can this be done? thank you

Ⅰ. 问题

Ⅱ. 详细描述

如果有异常,请追加堆栈信息:

仅需将堆栈信息粘贴到这里!

Ⅲ. 是否对工程有做改动

Ⅳ. 补充

Ⅴ. 环境信息

  • lion版本:
  • jdk版本:
  • 操作系统:
  • 其他:

关于鉴权问题

大佬,登录鉴权问题我有个疑问,我看了 你upms服务不需要登录就可以访问。正常来说在网关统一鉴权统一控制没什么问题, 但是单个服务不需要做限制么,如果单个服务接口被暴露出去岂不是都可以随便访问了,大佬能否提供个整体思路。

使用方式请教

Ⅰ. 问题

Gateway是直接到 provider 还是consumer 。

大神如果有时间,可否移步看一下这边文章:https://blog.csdn.net/cxz7456/article/details/105495578

Ⅱ. 详细描述

    问题是:
               应该怎么理解,是gateway直接访问到demo-provider  ?  还是gateway访问demo-consumer,然后demo-consumer再访问demo-provider ?

Ⅲ. 是否对工程有做改动

Ⅳ. 补充

Ⅴ. 环境信息

  • lion版本:
  • jdk版本:
  • 操作系统:
  • 其他:

问题请教:为什么auth模块不同样开发为privider、consumer模式?

Ⅰ. 问题

    您好!
            您的demo中的服务是设置为consumer、provider,那为什么auth模块不设置为consumer和privder模式呢?  微服务新上手,请教大佬,还请大佬赐教、解惑。

Ⅱ. 详细描述

如果有异常,请追加堆栈信息:

仅需将堆栈信息粘贴到这里!

Ⅲ. 是否对工程有做改动

Ⅳ. 补充

Ⅴ. 环境信息

  • lion版本:
  • jdk版本:
  • 操作系统:
  • 其他:

微服务模块发布的RESTful接口,应该从哪里开始访问?

Ⅰ. 问题

后台微服务模块发布了一个RESTful接口,一般都是直接接收数据请求的。应该从Web请求过来,还是直接将数据发送给Gateway?

Ⅱ. 详细描述

如果有异常,请追加堆栈信息:

仅需将堆栈信息粘贴到这里!

Ⅲ. 是否对工程有做改动

Ⅳ. 补充

Ⅴ. 环境信息

  • lion版本:
  • jdk版本:
  • 操作系统:
  • 其他:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.