基于SpringCloud體系實現的一套支持云原生的分布式微服務架構,提供OAuth2/JWT權限認證、分布式事務、灰度、限流、鏈路追蹤等功能,支持Docker容器化部署、鏡像交付、K8S容器編排

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.19Redis 5.0.7RabbitMQ 3.8.2Nacos 1.1.4Sentinel 1.7.1Seata 1.0.06個必備服務(需把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.sqlseata.sqlzipkin.sql腳本,該腳本會創建項目所需的表(lion庫中包含:用戶表、角色表、菜單資源表等,seata庫中包含:全局事務表、分支事務表、全局鎖表,zipkin庫中包含:鏈路追蹤相關表)

5、參考文檔中二、相關軟件的內容,啟動6個必備服務,否則項目無法正常運行

6、根據自己的服務器情況,修改resourcesbootstrap.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 開源協議二次開源或者商業化的我們將追究到底

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375