lamp-cloud微服務鷹架的前身是zuihou-admin-cloud,從3.0.0開始,改名為lamp-cloud,它是lamp計畫的其中一員。
lamp-cloud微服務鷹架是基於SpringCloud(Hoxton.SR10) + SpringBoot(2.3.10.RELEASE)的SaaS微服務鷹架,具有統一授權、認證後台管理系統,其中包含具備使用者管理、資源權限管理、網關API、分散式事務、大檔案斷點分片續傳等多個模組,支援多業務系統並行開發,可作為後端服務的開發鷹架。程式碼簡潔,架構清晰,適合學習和直接專案中使用。核心技術採用Nacos、Fegin、Riadfdson、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Redis、RiadfdsitMQ等主要框架和中介軟體。
lamp-cloud微服務鷹架功能
1、服務註冊&發現與調用
基於Nacos來實現的服務註冊與發現,使用使用Feign來實現服務互調, 可以做到使用HTTP請求遠程調用時能與調用本地方法一樣的編碼體驗,開發者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。
2、服務鑑權:
透過JWT的方式來加強服務之間調度的權限驗證,並確保內部服務的安全性。
3.負載平衡
將服務保留的rest進行代理和網關控制,除了平常經常使用的node.js、nginx外,Spring Cloud系列的zuul和riadfdson,可以幫我們進行正常的網關管控和負載平衡。其中擴展和借鑒國外計畫的擴展基於JWT的Zuul限流插件,方面進行限流。
4.熔斷機制
因為採取了服務的分佈,為了避免服務之間的呼叫“雪崩”,採用了Hystrix的作為熔斷器,避免了服務之間的“雪崩”。
5.監控
利用Spring Boot Admin 來監控各個獨立Service的運作狀態;利用turbine來即時查看介面的運作狀態和呼叫頻率;透過Zipkin來查看各個服務之間的呼叫鍊等。
6.鏈路呼叫監控
利用Zipkin實現微服務的全鏈路效能監控, 從整體維度到局部維度展示各項指標,將跨應用的所有呼叫鏈性能資訊集中展現,可方便度量整體和局部性能,並且方便找到故障產生的源頭,生產上可大幅縮短故障排除時間。有了它,我們能做到
請求鏈路追踪,故障快速定位:可以透過呼叫鏈結合業務日誌快速定位錯誤訊息。 視覺化:各階段耗時,進行效能分析。 依賴優化:各個呼叫環節的可用性、梳理服務相依性以及最佳化。 資料分析,最佳化連結:可以得到使用者的行為路徑,總結分析應用在許多業務場景。
7.數據權限
利用基於Mybatis的DataScopeInterceptor攔截器實作了簡單的資料權限
8、SaaS(多租戶)的無感解決方案
使用Mybatis攔截器實現所有SQL的攔截,修改預設的Schema,從而實現多租戶資料隔離的目的。 並且支援可插拔。
9、二級緩存
採用J2Cache操作緩存,第一級快取使用記憶體(Caffeine),第二級快取使用Redis。 由於大量的快取讀取會導致L2 的網路成為整個系統的瓶頸,因此L1 的目標是降低L2 的讀取次數。 此快取框架主要用於叢集環境中。單機也可使用,用於避免應用重新啟動導致的快取冷啟動後對後端業務的衝擊。
10.優雅的Bean轉換
採用Dozer元件來對DTO、DO、PO等物件的最佳化轉換
11.前後端統一表單驗證
嚴謹的表單驗證通常需要前端+後端同時驗證, 但傳統的項目,均只能前後端各做一次檢驗, 後期規則變更,又得前後端同時修改。 故在hibernate-validator的基礎上封裝了zuihou-validator-starter起步依賴,提供一個通用接口,可以獲取需要校驗表單的規則,然後前端使用後端返回的規則, 以後若規則改變,只需要後端修改即可。
12.防跨站腳本攻擊(XSS)
透過篩選器對所有請求中的表單參數進行篩選
透過Json反序列化器實現對所有application/json 類型的參數進行過濾
13.目前登入使用者資訊注入器
透過註解實現用戶身分注入
14、線上API
由於原生swagger-ui某些功能支援不夠友好,故採用了國內開源的swagger-bootstrap-ui,並製作了stater,方便springboot用戶使用。
15.代碼產生器
基於Mybatis-plus-generator自訂了一套程式碼產生器, 透過設定資料庫欄位的註釋,自動產生枚舉類別、資料字典註解、SaveDTO、UpdateDTO、表單驗證規則註解、Swagger註解等。
16.定時任務調度器
基於xxl-jobs進行了功能增強。 (如:指定時間傳送任務、執行器和調度器合併項目、多重資料來源)
17、大文件/斷點/分片續傳
前端採用webupload.js、後端採用NIO實作了大檔案斷點分片續傳,啟動Eureka、Zuul、File服務後,直接開啟docs/chunkUploadDemo/demo.html即可進行測試。 經測試,本地限制堆疊最大記憶體128M啟動File服務,5分鐘內能成功上傳4.6G+的大文件,正式服耗時則會受到用戶頻寬和伺服器頻寬的影響,時間比較長。
18、分散式事務
整合了阿里的分散式事務中間件:seata,以高效並且對業務0侵入的方式,解決微服務場景下面臨的分散式事務問題。
19.跨表、跨庫、跨服務的關聯資料自動注入器
用於解決跨表、跨庫、跨服務分頁資料的屬性或單一物件的屬性回顯關聯資料之痛, 支援對靜態資料屬性(資料字典)、動態主鍵資料進行自動注入。
20、灰階發布
為了解決頻繁的服務更新上線,回退,快速迭代,公司內部協同開發,本專案採用修改riadfdson的負載平衡策略來實現來灰度發布。
lamp-cloud 更新日誌
v3.5.5
refactor
lamp-cloud: 調整TraceFilter執行順序,方便網關其他過濾器記錄日誌訊息
lamp-cloud: 最佳化RouterMeta,支援前端自訂key
lamp-cloud: 最佳化地區爬取介面爬取資料亂碼問題
lamp-cloud: 最佳化地區爬取介面無法爬取市下方無縣的數據
lamp-cloud: 樹結構基礎實體新增addChildren 方法
lamp-cloud: 最佳化swagger 聚合結構,使得忽略web socket服務
fix
lamp-util: 有請求頭參數含有中文時,非同步feign呼叫報錯
lamp-cloud: 修復樹型結構無法取得正確拼接層級結構的bug
lamp-web-plus: 修復樹形頁面高度固定所導致的bug
lamp-web-plus: 解決TableAction元件Dropdown因為權限導致分割線顯示錯誤的問題
lamp-web-plus: 修正清單頁資料傳遞到編輯頁,資料被誤修改的問題