前言
zuihou-admin-cloud是一個基於SpringCloud(Greenwich.RELEASE) + SpringBoot(2.1.2.RELEASE) 的SaaS微服務腳手架,具備用戶管理、資源權限管理、網關API、分佈式事務、Xss防跨站攻擊、自動代碼生成、大文件斷點分片續傳等多個模塊,支持多業務系統並行開發,可以作為後端服務的開發腳手架。代碼簡潔,架構清晰,適合學習和直接項目中使用。核心技術採用Eureka、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Redis、等主要框架和中間件。
架構圖
功能亮點
服務註冊與調用:
基於Eureka來實現的服務註冊與調用,在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠程服務時能與調用本地方法一樣的編碼體驗,開發者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。
服務鑑權:
通過JWT的方式來加強服務之間調度的權限驗證,保證內部服務的安全性。
負載均衡:
將服務保留的rest進行代理和網關控制,除了平常經常使用的node.js、nginx外,Spring Cloud系列的zuul和rebbion,可以幫我們進行正常的網關管控和負載均衡。其中擴展和借鑑國外項目的擴展基於JWT的Zuul限流插件,方面進行限流。
熔斷機制:
因為採取了服務的分佈,為了避免服務之間的調用“雪崩”,採用了Hystrix的作為熔斷器,避免了服務之間的“雪崩”。
監控:
利用Spring Boot Admin 來監控各個獨立Service的運行狀態;利用turbine來實時查看接口的運行狀態和調用頻率;通過Zipkin來查看各個服務之間的調用鏈等。
數據權限:
利用基於Mybatis的DataScopeInterceptor攔截器實現了簡單的數據權限
SaaS的無感解決方案:
使用Mybatis攔截器實現對所有SQL的攔截,修改默認的Schema,從而實現多租戶數據隔離的目的。
二級緩存:
採用J2Cache操作緩存,第一級緩存使用內存(Caffeine),第二級緩存使用 Redis。 由於大量的緩存讀取會導致 L2 的網絡成為整個系統的瓶頸,因此 L1 的目標是降低對 L2 的讀取次數。 該緩存框架主要用於集群環境中。單機也可使用,用於避免應用重啟導致的緩存冷啟動後對後端業務的衝擊。
優雅的Bean轉換:
採用Dozer組件來對 DTO、DO、PO等對象的優化轉換
前後端統一表單驗證:
嚴謹的表單驗證通常需要 前端+後端同時驗證, 但傳統的項目,均只能前後端各做一次檢驗, 後期規則變更,又得前後端同時修改。 故在hibernate-validator的基礎上封裝了zuihou-validator-starter起步依賴,提供一個通用接口,可以獲取需要校驗表單的規則,然後前端使用後端返回的規則, 以後若規則改變,只需要後端修改即可。
防跨站腳本攻擊(XSS):
當前用戶信息注入器:
在線API:
由於原生swagger-ui某些功能支持不夠友好,故採用了國內開源的 knife4j ,並製作了stater,方便springboot用戶使用。
代碼生成器:
基於Mybatis-plus-generator自定義了一套代碼生成器, 通過配置數據庫字段的註釋,自動生成枚舉類、數據字典註解、SaveDTO、UpdateDTO、表單驗證規則註解、Swagger註解等。
定時任務調度器:
基於xxl-jobs進行了功能增強。(如:指定時間發送任務、執行器和調度器合併項目、多數據源)
漢化 Eureka 註冊中心頁面:
請切換分支進行查看
大文件/斷點/分片續傳:
前端採用webupload.js、後端採用NIO實現了大文件斷點分片續傳,啟動Eureka、Zuul、File服務後,直接打開docs/chunkUploadDemo/demo.html即可進行測試。 經測試,本地限制堆棧最大內存128M啟動File服務,5分鐘內能成功上傳4.6G+的大文件,正式服耗時則會受到用戶帶寬和服務器帶寬的影響,時間比較長。
分佈式事務:
集成了阿里的分佈式事務中間件:seata,以 高效 並且對業務 0侵入 的方式,解決 微服務 場景下面臨的分佈式事務問題。
1.2 版本更新內容
1,完善系統API&應用模塊表結構、前後端對接等
2,操作日誌中模塊描述記錄得更加人性化
3,優化&修復 前後端項目bug、代碼功能不健全、命名不規範等若干
4,消息中心接口完善&前後端對接
5,刪除附件統計相關無用接口
6,seata-all 相關版本升級到 1.0.0,完善demo&test服務對seata-server的支持 (對本項目中採用的SaaS方案,還存在一些問題)
7,升級 SpringCloud 版本為 Hoxton.SR1
8,升級 SpringBoot 版本為 2.2.2.RELEASE
9,升級 mybatis-plus 版本為 3.3.0 (升級後發現官方分頁查詢的bug,又回滾到3.2.0)
10,升級 Alibaba Cloud 版本為 2.1.1.RELEASE
11,升級Alibaba Cloud 版本為 2.1.1.RELEASE後, zuihou-j2cache-starter 存在無法讀取nacos中配置的bug,已修復
12,升級 knife4j 版本為 2.0.1
13, 升級 hutool 版本為 5.1.0
14, 升級大部分依賴jar的版本為最新穩定版
更多預覽
項目代碼地址
微服務後端 代碼:
[gitee] https://gitee.com/zuihou111/zuihou-admin-cloud /[github] https://github.com/zuihou/zuihou-admin-cloud
租戶系統 代碼:
[gitee] https://gitee.com/zuihou111/zuihou-ui / [github] https://github.com/zuihou/zuihou-ui
開發&運營管理系統 代碼:
[gitee] https://gitee.com/zuihou111/zuihou-admin-ui / [github] https://github.com/zuihou/zuihou-admin-ui
[代碼生成器] https://github.com/zuihou/zuihou-generator
演示地址 (演示賬號沒有寫權限,只能查詢)
[租戶系統演示環境] http://tangyh.top:10000/zuihou-ui/
平臺管理員賬號/密碼: zuihou/zuihou
普通用戶賬號/密碼: test/zuiou
[開發&運營平臺演示環境] http://tangyh.top:180/zuihou-admin-ui/
賬號/密碼: demoAdmin/zuihou
點評
小編非常認真的看了一下,也總結了粉絲的留言,zuihou-admin-cloud多租戶微服務腳手架 功能非常的豐富。可能很多同學感覺一大堆配置比較麻煩,學習門檻比較高,因為許多開發者從事的工作可能侷限於某一模塊,只需要其中的某一個/一些功能即可滿足工作需求。但是該項目非常有學習價值,能瞭解到比較全面的技術整合和架構設計能力。
最後非常感謝作者的開源!
閱讀更多 IT實戰聯盟 的文章