lamp-cloud是基于jdk11 + SpringCloud(Hoxton.SR10) + SpringBoot(2.3.10.RELEASE) 的微服務(wù)快速開發(fā)平臺,其中的可配置的SaaS功能尤其閃耀, 具備RBAC功能、網(wǎng)關(guān)統(tǒng)一鑒權(quán)、Xss防跨站攻擊、自動代碼生成、多種存儲系統(tǒng)、分布式事務(wù)、分布式定時任務(wù)等多個模塊,支持多業(yè)務(wù)系統(tǒng)并行開發(fā), 支持多服務(wù)并行開發(fā),可以作為后端服務(wù)的開發(fā)腳手架。代碼簡潔,注釋齊全,架構(gòu)清晰,非常適合學(xué)習(xí)和企業(yè)作為基礎(chǔ)框架使用。
功能介紹
1、租戶管理:運營人員管理所有的租戶創(chuàng)建
2、工作臺:普通用戶常用功能
3、組織管理:組織、崗位、用戶數(shù)據(jù)維護、重置用戶密碼等
4、資源中心:消息、短信、附件管理
5、流程管理:流程部署、模型管理、流程示例
6、系統(tǒng)設(shè)置:菜單、資源配置、角色管理、給角色綁定用戶、給角色授權(quán)菜單和資源、字典、地區(qū)、系統(tǒng)參數(shù)、操作日志、登錄日志、應(yīng)用管理等
7、網(wǎng)關(guān)設(shè)置:限流和阻止訪問
8、開發(fā)者管理:定時任務(wù)、接口文檔、注冊&配置中心、服務(wù)監(jiān)控、數(shù)據(jù)庫監(jiān)控、zipkin監(jiān)控、SkyWalking監(jiān)控
軟件特色
服務(wù)注冊&發(fā)現(xiàn)與調(diào)用:
基于Nacos來實現(xiàn)的服務(wù)注冊與發(fā)現(xiàn),使用使用Feign來實現(xiàn)服務(wù)互調(diào), 可以做到使用HTTP請求遠程調(diào)用時能與調(diào)用本地方法一樣的編碼體驗,開發(fā)者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。
負載均衡:
將服務(wù)保留的rest進行代理和網(wǎng)關(guān)控制,除了平常經(jīng)常使用的node.js、nginx外,Spring Cloud系列的zuul和ribbon,可以幫我們進行正常的網(wǎng)關(guān)管控和負載均衡。其中擴展和借鑒國外項目的擴展基于JWT的Zuul限流插件,方面進行限流。
服務(wù)鑒權(quán):
通過JWT的方式來加強服務(wù)之間調(diào)度的權(quán)限驗證,保證內(nèi)部服務(wù)的安全性。
熔斷機制:
因為采取了服務(wù)的分布,為了避免服務(wù)之間的調(diào)用“雪崩”,采用了Hystrix的作為熔斷器,避免了服務(wù)之間的“雪崩”。
監(jiān)控:
利用Spring Boot Admin 來監(jiān)控各個獨立Service的運行狀態(tài);利用turbine來實時查看接口的運行狀態(tài)和調(diào)用頻率;通過Zipkin來查看各個服務(wù)之間的調(diào)用鏈等。
鏈路調(diào)用監(jiān)控:
同時實現(xiàn)了Zipkin和SkyWalking作為本項目的全鏈路性能監(jiān)控, 從整體維度到局部維度展示各項指標,將跨應(yīng)用的所有調(diào)用鏈性能信息集中展現(xiàn),可方便度量整體和局部性能,并且方便找到故障產(chǎn)生的源頭,生產(chǎn)上可極大縮短故障排除時間。
數(shù)據(jù)權(quán)限
利用基于Mybatis的DataScopeInnerInterceptor攔截器實現(xiàn)了數(shù)據(jù)權(quán)限功能
SaaS(多租戶)的無感解決方案
本項目支持3種常見的租戶解決方案和無租戶方案,同一套代碼,修改一個配置即可實現(xiàn)租戶模式只有切換。
緩存抽象
采用CacheOps操作緩存,內(nèi)置2種實現(xiàn):Caffeine、 Redis,可以讓項目應(yīng)急時在無Redis環(huán)境正常運行
優(yōu)雅的Bean轉(zhuǎn)換
采用Dozer、BeanUtil等組件來對 DTO、DO、PO等對象的優(yōu)化轉(zhuǎn)換
前后端統(tǒng)一表單驗證
嚴謹?shù)谋韱悟炞C通常需要 前端+后端同時驗證, 但傳統(tǒng)的項目,均只能前后端各做一次檢驗, 后期規(guī)則變更,又得前后端同時修改。 故在hibernate-validator的基礎(chǔ)上封裝了lamp-validator-starter起步依賴,提供一個通用接口,可以獲取需要校驗表單的規(guī)則,然后前端使用后端返回的規(guī)則, 以后若規(guī)則改變,只需要后端修改即可。
防跨站腳本攻擊(XSS)
通過過濾器對所有請求中的 表單參數(shù) 進行過濾
通過Json反序列化器實現(xiàn)對所有 application/json 類型的參數(shù) 進行過濾
當(dāng)前登錄用戶信息注入器
通過注解實現(xiàn)用戶身份注入
在線API
由于原生swagger-ui某些功能支持不夠友好,故采用了國內(nèi)開源的knife4j,并制作了stater,方便springboot用戶使用。
代碼生成器
基于Mybatis-plus-generator自定義了一套代碼生成器, 通過配置數(shù)據(jù)庫字段的注釋,自動生成枚舉類、數(shù)據(jù)字典注解、SaveDTO、UpdateDTO、表單驗證規(guī)則注解、Swagger注解等。
定時任務(wù)調(diào)度器:
基于xxl-job進行了功能增強。(如:指定時間發(fā)送任務(wù)、執(zhí)行器和調(diào)度器合并項目、多數(shù)據(jù)源)
大文件/斷點/分片續(xù)傳
前端采用webupload.js、后端采用NIO實現(xiàn)了大文件斷點分片續(xù)傳,啟動Eureka、Zuul、File服務(wù)后,直接打開docs/chunkUploadDemo/demo.html即可進行測試。 經(jīng)測試,本地限制堆棧最大內(nèi)存128M啟動File服務(wù),5分鐘內(nèi)能成功上傳4.6G+的大文件,正式服耗時則會受到用戶帶寬和服務(wù)器帶寬的影響,時間比較長。
分布式事務(wù)
集成了阿里的分布式事務(wù)中間件:seata,以 高效 并且對業(yè)務(wù) 0侵入 的方式,解決 微服務(wù) 場景下面臨的分布式事務(wù)問題。
跨表、跨庫、跨服務(wù)的關(guān)聯(lián)數(shù)據(jù)自動回顯
用于解決跨表、跨庫、跨服務(wù)分頁數(shù)據(jù)的屬性或單個對象的屬性 回顯關(guān)聯(lián)數(shù)據(jù)之痛, 支持對靜態(tài)數(shù)據(jù)屬性(數(shù)據(jù)字典)、動態(tài)主鍵數(shù)據(jù)進行自動注入。
灰度發(fā)布
為了解決頻繁的服務(wù)更新上線,版本回退,快速迭代,公司內(nèi)部協(xié)同開發(fā),本項目采用修改ribbon的負載均衡策略來實現(xiàn)來灰度發(fā)布。