5款Java微服務開源框架

晴天彩虹-GitHubCN發表於2019-01-18

1.pig
開源地址:https://gitee.com/log4j/pig
基於Spring Cloud、OAuth2.0、Vue的前後端分離的系統。 通用RBAC許可權設計及其資料許可權和分庫分表 支援服務限流、動態路由、灰度釋出、 支援常見登入方式, 多系統SSO登入, 提供配套視訊開發教程
在這裡插入圖片描述
功能列表:
完善登入:賬號密碼模式、簡訊驗證碼模式、社交賬號模式均整合Spring security oAuth
單點登入:基於Srping security oAuth 提供單點登入介面,方便其他系統對接
使用者管理:使用者是系統操作者,該功能主要完成系統使用者配置。
機構管理:配置系統組織機構,樹結構展現,可隨意調整上下級。
選單管理:配置系統選單,操作許可權,按鈕許可權標識等。
角色管理:角色選單許可權分配、設定角色按機構進行資料範圍許可權劃分。
動態路由:基於zuul實現動態路由,後端可配置化。
灰度釋出:自定義ribbon路由規則匹配多版本請求。
終端管理:動態配置oauth終端,後端可配置化。
字典管理:對系統中經常使用的一些較為固定的資料進行維護,如:是否等。
操作日誌:系統正常操作日誌記錄和查詢;系統異常資訊日誌記錄和查詢。
服務限流:多種維度的流量控制(服務、IP、使用者等)
訊息匯流排:配置動態實時重新整理
分庫分表:shardingdbc分庫分表策略
資料許可權: 使用mybatis對原查詢做增強,業務程式碼不用控制,即可實現。
檔案系統: 支援FastDFS、七牛雲,擴充套件API幾行程式碼實現上傳下載
訊息中心:簡訊、郵件模板傳送,幾行程式碼實現傳送
聚合文件:基於zuul實現 swagger各個模組的實現
程式碼生成:前後端程式碼的生成,支援Vue
快取管理:基於Cache Cloud 保證Redis 的高可用
服務監控: Spring Boot Admin
分散式任務排程: 基於elastic-job的分散式任務,zookeeper做排程中心
zipkin鏈路追蹤: 資料儲存ELK,圖形化展示
pinpoint鏈路追蹤: 資料儲存hbase,圖形化展示

2.zheng
開源地址:https://gitee.com/shuzheng/zheng
基於Spring+SpringMVC+Mybatis分散式敏捷開發系統架構,提供整套公共微服務服務模組:集中許可權管理(單點登入)、內容管理、支付中心、使用者管理(支援第三方登入)、微信平臺、儲存系統、配置中心、日誌分析、任務和通知等,支援服務治理、監控和追蹤,努力為中小型企業打造全方位J2EE企業級開發解決方案。
在這裡插入圖片描述
3.Cloud-Platform

開源地址:

https://gitee.com/minull/ace-security

Cloud-Platform是國內首個基於Spring Cloud微服務化開發平臺,核心技術採用Spring Boot2以及Spring Cloud Gateway相關核心元件,前端採用vue-element-admin元件。具有統一授權、認證後臺管理系統,其中包含具備使用者管理、資源許可權管理、閘道器API管理等多個模組,支援多業務系統並行開發,可以作為後端服務的開發腳手架。程式碼簡潔,架構清晰,適合學習和直接專案中使用。

架構摘要
服務鑑權
通過JWT的方式來加強服務之間排程的許可權驗證,保證內部服務的安全性。

監控
利用Spring Boot Admin 來監控各個獨立Service的執行狀態;利用Hystrix Dashboard來實時檢視介面的執行狀態和呼叫頻率等。

負載均衡
將服務保留的rest進行代理和閘道器控制,除了平常經常使用的node.js、nginx外,Spring Cloud系列的zuul和ribbon,可以幫我們進行正常的閘道器管控和負載均衡。其中擴充套件和借鑑國外專案的擴充套件基於JWT的Zuul限流外掛,方面進行限流。

服務註冊與呼叫
基於Consul來實現的服務註冊與呼叫,在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠端服務時能與呼叫本地方法一樣的編碼體驗,開發者完全感知不到這是遠端方法,更感知不到這是個HTTP請求。

熔斷機制
因為採取了服務的分佈,為了避免服務之間的呼叫“雪崩”,採用了Hystrix的作為熔斷器,避免了服務之間的“雪崩”。

4.SpringBlade

開源地址:https://gitee.com/smallc/SpringBlade

SpringBlade 2.0 是一個基於 Spring Boot 2 & Spring Cloud Finchley & Mybatis 等核心技術,用於快速構建中大型系統的基礎框架。
在這裡插入圖片描述
主要特性&&變化

採用前後端分離的模式,前端單獨開源出一個框架:Sword,主要選型技術為React、Ant Design、Umi、Dva

後端採用SpringCloud全家桶,並同時對其基礎元件做了高度的封裝,單獨開源出一個框架:Blade-Tool

Blade-Tool已推送至Maven中央庫,直接引入即可,減少了工程的臃腫,也可更注重於業務開發

註冊中心選型Consul

部署使用Docker或K8s + Jenkins

使用Traefik進行反向代理

踩了踩Kong的坑,有個基本的使用方案,但不深入,因為涉及到OpenResty。

封裝了簡單的Secure模組,採用JWT做Token認證,可擴充整合Redis等細顆粒度控制方案

在2.0誕生之前,已經穩定生產了近一年,經歷了從Camden -> Finchley的技術架構,也經歷了從fat jar -> docker -> k8s + jenkins的部署架構

專案分包明確,規範微服務的開發模式,使包與包之間的分工清晰。

5.Guns
開源地址:https://gitee.com/stylefeng/guns

Guns基於Spring Boot 2,致力於做更簡潔的後臺管理系統,完美整合springmvc + shiro + mybatis-plus + beetl,Guns專案程式碼簡潔,註釋豐富,上手容易,同時Guns包含許多基礎模組(使用者管理,角色管理,部門管理,字典管理等10個模組),可以直接作為一個後臺管理系統的腳手架!同時提供spring cloud版本!

Guns微服務版本
Guns的核心是roses-kernel專案https://gitee.com/stylefeng-Roses/roses-kernel,提供對spring cloud的支援。

Roses框架基於Spring Boot 2和Spring Cloud Finchley.RELEASE,整合Eureka + Hystrix + Ribbon + Feign + Zuul,更符合企業級的分散式和服務化解決方案,Roses擁有高效率的開發體驗,提供可靠訊息最終一致性分散式事務解決方案,提供基於呼叫鏈的服務治理,提供可靠的服務異常定位方案(Log + Trace)等等,一個分散式框架不僅需要構建高效穩定的底層開發框架,更需要解決分散式帶來的種種挑戰!

管理系統功能

1.使用者管理 2.角色管理 3.部門管理 4.選單管理 5.字典管理 6.業務日誌 7.登入日誌 8.監控管理 9.通知管理 10.程式碼生成(旗艦版目前還沒完成)

專案特點

基於SpringBoot,簡化了大量專案配置和maven依賴,讓您更專注於業務開發,獨特的分包方式,程式碼多而不亂。

完善的日誌記錄體系,可記錄登入日誌,業務操作日誌(可記錄操作前和操作後的資料),異常日誌到資料庫,通過@BussinessLog註解和LogObjectHolder.me().set()方法,業務操作日誌可具體記錄哪個使用者,執行了哪些業務,修改了哪些資料,並且日誌記錄為非同步執行,詳情請見@BussinessLog註解和LogObjectHolder,LogManager,LogAop類。

利用beetl模板引擎對前臺頁面進行封裝和拆分,使臃腫的html程式碼變得簡潔,更加易維護。

對常用js外掛進行二次封裝,使js程式碼變得簡潔,更加易維護,具體請見webapp/static/js/common資料夾內js程式碼。

利用ehcache框架對經常呼叫的查詢進行快取,提升執行速度,具體請見ConstantFactory類中@Cacheable標記的方法。

controller層採用map + warpper方式的返回結果,返回給前端更為靈活的資料,具體參見com.stylefeng.guns.modular.system.warpper包中具體類。

防止XSS攻擊,通過XssFilter類對所有的輸入的非法字串進行過濾以及替換。

簡單可用的程式碼生成體系,通過SimpleTemplateEngine可生成帶有主頁跳轉和增刪改查的通用控制器、html頁面以及相關的js,還可以生成Service和Dao,並且這些生成項都為可選的,通過ContextConfig下的一些列xxxSwitch開關,可靈活控制生成模板程式碼,讓您把時間放在真正的業務上。

控制器層統一的異常攔截機制,利用@ControllerAdvice統一對異常攔截,具體見com.stylefeng.guns.core.aop.GlobalExceptionHandler類。

頁面統一的js key-value單例模式寫法,每個頁面生成一個唯一的全域性變數,提高js的利用效率,並且有效防止多個人員開發引起的函式名/類名衝突,並且可以更好地去維護程式碼。

業務日誌記錄
日誌記錄採用aop(LogAop類)方式對所有包含@BussinessLog註解的方法進行aop切入,會記錄下當前使用者執行了哪些操作(即@BussinessLog value屬性的內容),如果涉及到資料修改,會取當前http請求的所有requestParameters與LogObjectHolder類中快取的Object物件的所有欄位作比較(所以在編輯之前的獲取詳情介面中需要快取被修改物件之前的欄位資訊),日誌內容會非同步存入資料庫中(通過ScheduledThreadPoolExecutor類)。
在這裡插入圖片描述

相關文章