专栏首页物流IT圈SAAS微服务脚手架推荐

SAAS微服务脚手架推荐

基于SpringCloud(Hoxton.SR3) + SpringBoot(2.2.6.RELEASE) 的SaaS 微服务脚手架,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API、分布式事务、大文件断点分片续传等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用Nacos、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Redis、RibbitMQ等主要框架和中间件。

模式介绍

本项目可以通过配置,轻松切换项目的 租户模式。

部署方面, 可以采用以下几种方式:

  • IDEA 启动
  • jar部署
  • docker部署
  • k8s部署
  • jenkins自动化部署

功能点介绍:

  1. 服务注册&发现与调用: 基于Nacos来实现的服务注册与发现,使用使用Feign来实现服务互调, 可以做到使用HTTP请求远程调用时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。
  2. 服务鉴权: 通过JWT的方式来加强服务之间调度的权限验证,保证内部服务的安全性。
  3. 负载均衡: 将服务保留的rest进行代理和网关控制,除了平常经常使用的node.js、nginx外,Spring Cloud系列的zuul和ribbon,可以帮我们进行正常的网关管控和负载均衡。其中扩展和借鉴国外项目的扩展基于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. 灰度发布 为了解决频繁的服务更新上线,版本回退,快速迭代,公司内部协同开发,本项目采用修改ribbon的负载均衡策略来实现来灰度发布。

项目截图:

功能地址:

https://github.com/zuihou/zuihou-admin-cloud

本文分享自微信公众号 - 物流IT圈(exiter18)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 架构师能力模型

    开发者应该根据自己的性格、爱好来选择自己的职业方向。对于性格外向、愿意多与人交流、沟通能力较好的同学,可以考虑向管理方向发展。对于热爱技术、喜欢钻研、性格偏内向...

    物流IT圈
  • 聊聊微服务的分布式通讯

    微服务目前比较热,但是微服务最难的还是可靠性问题,因为一个系统微服务可能几百个,网络调用频繁,网络的容错性就非常重要,因为对于分布式系统,需要默认网络环境是不可...

    物流IT圈
  • ChatOps如何变革企业业务

    【编者按】本文作者为日志分析软件公司 Logz.io 的联合创始人 Tomer Levy,主要介绍 ChatOps 的特点与发展历程,以及将来可能带来的业务变革...

    物流IT圈
  • 由Dapper QueryMultiple 返回数据的问题

    今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapper QueryMultiple 返回数据的问题 多个返回值用QueryMul...

    逸鹏
  • 基于深度学习的目标检测算法综述

    目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一。由于各类物体有不同的外观,形状,姿态,加上成像时光照,遮...

    SIGAI学习与实践平台
  • Java 学习笔记(1)——java基础语法

    最近抽时间在学习Java,目前有了一点心得,在此记录下来。 由于我自己之前学过C/C++,而Java的语法与C/C++基本类似,所以这一系列文章我并不想从基础...

    Masimaro
  • java agent 及字节码技术得到 DNS 时间流程尝试(如何对jdk 代码进行AOP操作)

    想说一下这个意义吧,单纯的只是为了得到dns 的时间 好像并没有很大的意义或者值得研究的只是一小部分,但不只是对InetAddress.getByName 方法...

    猎户星座1
  • 大牛推荐的6本机器学习经典必读书

    周老师这本书用来当教材确实不错,不过自学的话跟李航老师的《统计学习方法》来比,确实不够详细,但周老师的书广度上要更加广泛。

    一墨编程学习
  • Java工具集-文件工具类

    cwl_java
  • 基于pip的安装lxml库报错解决方案

    安装lxml库的时候容易出现没法从网上安装twisted库的错误,解决方案是从将twisted库下载到本地后,用命令进行安装。 twisted库下载链接: h...

    潇洒坤

扫码关注云+社区

领取腾讯云代金券