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...)
七、效果預覽
Nacos服務列表
Nacos配置列表
Nacos服務詳情
Boot Admin應用監控
Boot Admin應用列表
Boot Admin應用詳情
Sentinel服務限流、熔斷降級
Zipkin鏈路信息
Zipkin鏈路追蹤
Zipkin拓撲圖
SkyWalking監控面板
SkyWalking鏈路追蹤
SkyWalking拓撲圖
Druid SQL監控
Druid URI監控
Druid Spring監控
RESTful APIs文檔
八、開源協議
Apache Licence 2.0(英文原文)Apache Licence 是著名的非盈利開源組織 Apache 采用的協議。該協議和 BSD 類似,同樣鼓勵代碼共享和尊重原作者的著作權,同樣允許代碼修改,再發布(作為開源或商業軟件)。需要滿足的條件也和 BSD 類似:
- 需要給代碼的用戶一份 Apache Licence
- 如果你修改了代碼,需要在被修改的文件中說明
- 在延伸的代碼中(修改和有源代碼衍生的代碼中)需要帶有原來代碼中的協議,商標,專利聲明和其他原來作者規定需要包含的說明
- 如果再發布的產品中包含一個 Notice 文件,則在 Notice 文件中需要帶有 Apache Licence。你可以在 Notice 中增加自己的許可,但不可以表現為對 Apache Licence 構成更改
Apache Licence 也是對商業應用友好的許可。使用者也可以在需要的時候修改代碼來滿足需要并作為開源或商業產品發布/銷售
注:對未經過授權和不遵循 Apache Licence 2.0 開源協議二次開源或者商業化的我們將追究到底