Lion 項目簡介
項目已托管至Github,請前往https://github.com/micyo202/lion查看源碼
項目鏡像已經推送至Docker Hub太伊,請前往https://hub.docker.com/u/micyo202查看/拉取
感謝JetBrains提供的開源許可雇锡,推薦使用IntelliJ IDEA進行開發(fā)
lion是基于Spring Cloud體系實現(xiàn)的一套支持云原生的分布式微服務架構,為了讓中小型公司解決當下技術瓶頸僚焦,快速將現(xiàn)有應用服務架構拆分改造為分布式微服務架構锰提,進入 All-in-Cloud 時代,只需在本架構上進行相關業(yè)務開發(fā)即可芳悲,大大減少了分布式微服務架構的門檻立肘,僅在本框架上做"減法"的目的,使架構師及開發(fā)人員不必過多的關注架構本身名扛,只需專注于業(yè)務開發(fā)
項目采用 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 等核心技術體系實現(xiàn)的一套支持云原生的分布式微服務架構弄企,提供 OAuth2/JWT 權限認證超燃、分布式事務、灰度拘领、限流意乓、熔斷降級、分布式鎖约素、鏈路追蹤届良、MQ等功能,支持 Docker 容器化部署圣猎、鏡像交付士葫、K8S容器編排
使用Nacos作為服務注冊/發(fā)現(xiàn)、配置中心
使用Sentinel來查看近實時的接口運行狀態(tài)和調用頻率样漆,并用作服務限流为障、熔斷降級等處理晦闰,避免了分布式服務之間調用的“雪崩”效應
使用Seata作為分布式事務管理放祟,采用AT事務模式自動完成兩階段提交/回滾
使用Spring Boot Admin來監(jiān)控各個獨立Service的運行狀態(tài)
使用Spring Cloud Gateway作為路由網(wǎng)關服務
使用Zipkin / SkyWalking進行查看完整鏈路追蹤信息等
使用Feign, 做到HTTP請求遠程服務時能與調用本地方法一樣的編碼體驗鳍怨,開發(fā)者完全感知不到這是遠程方法,更感知不到這是個HTTP請求
項目后期會不斷更新與時俱進跪妥,敬請期待...
分支說明
- master分支鞋喇,支持Java 8/11/13重構升級優(yōu)化后的最新版(推薦)
- release1.x分支,基于Java 8眉撵、SpringBoot 2.1.2.RELEASE侦香、SpringCloud Greenwich.RELEASE、Spring Cloud Alibaba 2.1.0.RELEASE體系實現(xiàn)纽疟,支持Java罐韩、Scala混編,的最終版
- eureka分支污朽,使用 Eureka 作為服務注冊發(fā)現(xiàn)中心(Eureka官宣2.x版本不再開源散吵,項目使用Nacos)
- hystrix分支,使用 Hystrix 做為服務斷路器(Hystix官宣停止更新蟆肆,項目使用Sentinel)
- zuul分支矾睦,使用 Zuul 做為路由網(wǎng)關(由于Zuul 2.x的不斷跳票,SpringCloud后續(xù)沒有整合Zuul 2.x的計劃炎功,項目使用Spring Cloud Gateway)
項目架構圖
數(shù)據(jù)庫表關系圖
一枚冗、項目開發(fā)環(huán)境&工具
- 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)
三毁涉、組件說明
- 服務注冊/發(fā)現(xiàn)、配置中心:Nacos
- 服務監(jiān)控:Spring Boot Admin
- 消息隊列:AMQP -> RabbitMQ
- 負載均衡:Feign / Ribbon
- 限流锈死、熔斷降級:Sentinel
- 路由網(wǎng)關:Spring Cloud Gateway
- 鏈路追蹤:Spring Cloud Sletuh -> Zipkin / SkyWalking
- 權限認證:Spring Security -> OAuth2 / JWT
- ORM框架:MyBatis(MyBatis-Plus)
- 數(shù)據(jù)源監(jiān)控:Druid
- RESTful APIs文檔:Knife4j
- 分布式鎖:Redisson
- 分布式事物:Seata
四贫堰、項目結構
lion -- 根目錄
├── lion-admin -- 服務監(jiān)控
├── lion-gateway -- 網(wǎng)關服務
├── lion-common -- 通用工具類
├── lion-auth -- 安全認證服務
├── lion-demo -- 示例模塊
| ├── lion-demo-provider -- 服務提供者
| ├── lion-demo-consumer -- 服務消費者
五、項目部署
1待牵、下載項目git clone --depth 1 https://github.com/micyo202/lion.git
2其屏、進入項目根目錄執(zhí)行./gradlew -x test clean
命令,使用Gradle初始化項目
3缨该、初始化完畢后導入到IDE開發(fā)工具中(建議使用IntelliJ IDEA作為開發(fā)工具
4偎行、創(chuàng)建3個數(shù)據(jù)庫分別為lion、seata、zipkin并分別執(zhí)行項目根目錄下database中的lion.sql蛤袒、seata.sql熄云、zipkin.sql腳本,該腳本會創(chuàng)建項目所需的表(lion庫中包含:用戶表妙真、角色表缴允、菜單資源表等,seata庫中包含:全局事務表珍德、分支事務表练般、全局鎖表,zipkin庫中包含:鏈路追蹤相關表)
5锈候、參考文檔中二薄料、相關軟件的內容,啟動6個必備服務泵琳,否則項目無法正常運行
6都办、根據(jù)自己的服務器情況,修改resources下bootstrap.yml配置中的nacos服務地址虑稼,及application.yml配置中mysql琳钉、redis、rabbitmq蛛倦、sentinel的服務地址跟用戶名/密碼(注:可將application.yml配置文件注釋打開放在項目中歌懒,或將application.yml配置文件放入nacos配置管理中)
7、完成以上步驟就可以正常啟動部署服務了
8溯壶、項目開發(fā)詳細示例代碼及皂,可參考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...)
七、效果預覽
Nacos服務列表
Nacos配置列表
Nacos服務詳情
Boot Admin應用監(jiān)控
Boot Admin應用列表
Boot Admin應用詳情
Sentinel服務限流慨蓝、熔斷降級
Zipkin鏈路信息
Zipkin鏈路追蹤
Zipkin拓撲圖
SkyWalking監(jiān)控面板
SkyWalking鏈路追蹤
SkyWalking拓撲圖
Druid SQL監(jiān)控
Druid URI監(jiān)控
Druid Spring監(jiān)控
RESTful APIs文檔
八感混、開源協(xié)議
Apache Licence 2.0(英文原文)Apache Licence 是著名的非盈利開源組織 Apache 采用的協(xié)議。該協(xié)議和 BSD 類似礼烈,同樣鼓勵代碼共享和尊重原作者的著作權弧满,同樣允許代碼修改,再發(fā)布(作為開源或商業(yè)軟件)此熬。需要滿足的條件也和 BSD 類似:
- 需要給代碼的用戶一份 Apache Licence
- 如果你修改了代碼庭呜,需要在被修改的文件中說明
- 在延伸的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協(xié)議滑进,商標,專利聲明和其他原來作者規(guī)定需要包含的說明
- 如果再發(fā)布的產品中包含一個 Notice 文件募谎,則在 Notice 文件中需要帶有 Apache Licence扶关。你可以在 Notice 中增加自己的許可,但不可以表現(xiàn)為對 Apache Licence 構成更改
Apache Licence 也是對商業(yè)應用友好的許可近哟。使用者也可以在需要的時候修改代碼來滿足需要并作為開源或商業(yè)產品發(fā)布/銷售
注:對未經過授權和不遵循 Apache Licence 2.0 開源協(xié)議二次開源或者商業(yè)化的我們將追究到底