作者介绍
- 名称:最后
- dromara 开源组织成员,dromara/lamp-cloud 作者
- 高级java工程师,热衷开源,兼职开源,认真研究过无数开源项目的源码,参与过多个开源项目,拥有丰富实战经验
- 个人空间:最后 https://github.com/zuihou
关于lamp
灯灯
(简称灯, 英文名:lamp),她是一个项目集,为满足高内聚低耦合设计原则,将一个大项目拆解为以下几个子项目:
-
lamp-util:后端工具集
-
lamp-cloud:基于Spring Cloud实现的后台
-
lamp-boot:基于Spring Boot实现的后台
-
lamp-job:基于xxl-job集成本项目的分布式定时任务
-
lamp-generator:代码生成器
-
lamp-web:前端
lamp-cloud 简介
lamp-cloud
是基于jdk11/jdk8
+ SpringCloudAlibaba
+ SpringCloud
+ SpringBoot
开发的微服务中后台快速开发平台,专注于多租户(SaaS架构)解决方案,亦可作为普通项目(非SaaS架构)的基础开发框架使用,目前已实现插拔式 数据库隔离、SCHEMA隔离、字段隔离 等租户隔离方案。
她拥有自研RBAC(基于租户应用的角色权限控制体系)、网关统一鉴权、数据权限、优雅缓存解决方案、防缓存击穿、前后端统一表单校验、字典数据自动回显、可视化前后端代码生成器、支持多种文件存储、支持多种短信邮件发送接口、灰度发布、防XSS攻击、防SQL注入、分布式事务、分布式定时任务等功能; 支持多业务系统并行开发, 支持多服务并行开发,是中后台系统开发脚手架的最佳选择。
lamp-cloud 代码简洁,注释齐全,架构清晰,非常适合个人学习以及中小企业作为基础框架使用。采用Spring Cloud Alibaba、SpringBoot、Mybatis、Seata、Sentinel、RabbitMQ、FastDFS/MinIO、SkyWalking等主要框架和中间件。 本项目旨在实现基础框架能力,不涉及具体业务。
亮点功能介绍:
-
服务注册&发现与调用:
基于Nacos来实现的服务注册与发现,使用使用Feign来实现服务互调, 可以做到使用HTTP请求远程调用时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。
-
负载均衡:
将服务保留的rest进行代理和网关控制,除了平常经常使用的node.js、nginx外,Spring Cloud系列的gateway 和 loadbalancer 可以帮我们进行正常的网关管控和负载均衡。
-
熔断机制:
因为采取了服务的分布,为了避免服务之间的调用“雪崩”,采用了Sentinel的作为熔断器,避免了服务之间的“雪崩”。
-
监控:
利用Spring Boot Admin 来监控各个独立服务的运行状态、健康情况。
-
链路调用监控:
同时实现了SkyWalking作为本项目的全链路性能监控, 从整体维度到局部维度展示各项指标,将跨应用的所有调用链性能信息集中展现,可方便度量整体和局部性能,并且方便找到故障产生的源头,生产上可极大缩短故障排除时间。
-
自研RBAC:
自研基于租户、应用、角色的权限配置、授权、认证、鉴权、控制方案。
-
数据权限
利用基于Mybatis的DataScopeInnerInterceptor拦截器实现了动态数据权限功能。
-
SaaS(多租户)架构的无感解决方案
本项目支持3种常见的租户解决方案和无租户方案,同一套业务代码,通过配置和全局拦截,可支持多种租户隔离方式
-
优雅缓存
采用CacheOps操作缓存,内置2种实现:Caffeine、 Redis,可以让项目应急时在无Redis环境正常运行;并通过CacheKey统一封装缓存的key。
-
优雅的Bean转换
采用Dozer、BeanUtil等组件来对 DTO、DO、PO等对象的优化转换
-
前后端统一表单校验
严谨的表单验证都需要前端和后端双重验证, 但传统的项目,均只能前后端各做一次检验, 后期规则变更,又得前后端同时修改。 故在
hibernate-validator
的基础上封装了lamp-validator-starter
,提供一个通用接口,用于获取需要校验的表单规则,前端使用后端返回的规则,以后若规则改变,只需要后端修改即可。 -
防跨站脚本攻击(XSS)
- 通过过滤器对所有请求中的 表单参数 进行过滤
- 通过Json反序列化器实现对所有 application/json 类型的参数 进行过滤
-
当前登录用户信息注入器
- 通过注解实现用户基本信息、部门、岗位、资源、角色等信息注入
-
在线接口文档
由于原生swagger-ui某些功能支持不够友好,故采用了国内开源的
knife4j
,并封装了stater,方便springboot用户使用。 -
可视化在线代码生成器
通过简单的配置,即可实现由表到代码的生成;通过配置数据库字段的注释,自动生成枚举类、数据字典注解、后端代码、前端代码、表单验证规则注解、Swagger注解等。
-
定时任务调度器:
基于xxl-jobs进行了功能增强。(如:指定时间发送任务、执行器和调度器合并项目、多数据源)
-
分布式事务
集成了阿里的分布式事务中间件:seata,以 高效 并且对业务 0侵入 的方式,解决 微服务 场景下面临的分布式事务问题。
-
跨表、跨库、跨服务的关联数据自动回显
用于解决跨表、跨库、跨服务分页数据的属性或单个对象的属性 回显关联数据之痛, 支持对静态数据属性(数据字典)、动态主键数据进行自动回显。
-
灰度发布
为了解决频繁的服务更新上线,版本回退,快速迭代,公司内部协同开发,本项目采用修改 loadbalancer 的负载均衡策略来实现来灰度发布。
技术栈
- 开发方面:
- 数据库: MySQL、Oracle、SQL Server
- 缓存:Redis
- 消息队列:RabbitMQ
- 强悍工具类:Jackson、hutool、guava、jjwt、ip2region
- 在线文档:knife4j
- 分布式定时任务:基于xxl-job
- 前端1(后台管理):vue2 + element-ui
- 前端2(后台管理):vue3 + ant-design-vue + vite + TypeScript
- 数据源:druid
- 持久层框架: Mybatis-plus
- 代码生成器(老版本):基于Mybatis-plus-generator自定义
- 代码生成器(新版本):在线可视化代码生成器
- 文件服务器:本地存储、MinIO、FastDFS、阿里云OSS、华为云OBS、七牛云OSS
- 消息中心:阿里云SMS、腾讯云SMS、百度云SMS、创蓝短信、邮件、站内信
- API网关:Gateway
- 服务注册&发现和配置中心: Nacos
- 服务消费:OpenFeign
- 负载均衡:spring-cloud-loadbalancer
- 服务熔断:Sentinel
- 项目构建:Maven
- 分布式事务: seata
- 监控方面:
- 监控: spring-boot-admin
- 链路调用跟踪: SkyWalking
- 分布式系统的流量防卫兵: Sentinel
- 部署方面:
- 服务器:CentOS
- 负载均衡:Nginx
- CI/CD:Jenkins
- 容器:Docker/Kubernetes