项目概述

在互联网公司真实业务开发场景下,往往会有很多的业务工程系统进行落地,如;电商、交易、信贷、营销、分润、清分/结算等等,这些业务场景会落地非常多的业务系统。而这些业务系统中,会有很多的相同的非业务逻辑的共性技术诉求的处理。

如;动态属性配置、熔断、限流、异常、数据采集监控、增强的mock服务、流量录制回放、切面拦截日志、模型设计框架等等。这些共性的组件东西,不可能让每个系统全部自己实现一遍,既耗费人力,最后又实现的五花八门非常难维护。

所以,在互联网公司中,会单独把这类通用的逻辑凝练成共用的技术组件,让所需的业务场景进行引入使用。

扳手工程架构图

核心技术栈

Spring Boot
基于Spring Boot Starter机制,实现组件的自动装配和配置
动态配置中心
基于Redis实现的分布式配置中心,支持配置的动态刷新
限流服务
基于Guava RateLimiter实现的令牌桶算法限流保护
Redis
作为注册中心使用,管理动态配置和发布订阅消息
设计模式
责任链模式、策略模式等设计模式的实际应用
SPI机制
基于SPI机制实现组件的插件化和扩展性

架构设计

设计通用的统一规范的扳手工程,以模块化方式实现各种通用组件:

扳手工程架构设计
  • 搭建标准的扳手框架 Spring Starter 工程
  • 以模块化方式陆续实现动态配置、限流服务、通用设计模块框架
  • 以 Redis 作为简单注册中心使用,管理动态配置、限流服务等
  • 通过 admin 管理端,下达配置命令,来动态操作工程配置

工程模型

扳手工程模型
  • 定义 xfg-wrench 扳手工程,以 xfg-wrench-starter 为前缀,命名各项服务组件
  • xfg-wrench-test 为测试工程,用于验证各个模块的功能实现
  • xfg-wrench-admin 为管理后台,后续陆续创建完成
  • 其他模块组件陆续迭代开发

核心功能模块

1
动态配置中心 (DCC)

基于Redis实现的分布式动态配置中心,支持配置的实时推送和动态刷新,无需重启应用即可更新配置。

配置动态刷新
发布订阅机制
自定义注解
属性自动注入
2
分布式限流服务

基于Guava RateLimiter实现的令牌桶算法限流保护机制,支持接口级别的流量控制和保护。

令牌桶算法
AOP切面拦截
本地缓存管理
接口保护机制
3
通用设计模式框架

提供责任链模式、策略模式等设计模式的通用实现框架,支持业务逻辑的灵活扩展和组装。

责任链模式
策略模式路由
链式调用装配
动态扩展能力

DCC动态配置流程设计

DCC动态配置流程

核心流程说明

  • 以 SPI 机制,实现组件入口类的注册,驱动注册中心和 Spring 容器工作
  • 注册配置链接 Redis 当做注册中心使用,初始化动态配置中心服务
  • 拦截 Spring 容器实例化的 Bean 对象,找到使用了自定义注解 @DCCValue 的属性
  • 对属性进行反射调用,动态读取 Redis 中配置属性值并设置
  • 通过 Redis 发布订阅消息,实现配置的实时推送和更新

学习收获

通过本项目的学习,你将深入掌握以下核心技术和设计思想:

  • Spring框架深度应用:深入学习 Spring、SpringBoot、MyBatis 框架源码,掌握 SPI 机制实例化组件入口
  • Bean生命周期管理:理解 Spring Bean 生命周期与 BeanPostProcessor 的实际应用
  • 分布式配置管理:学习分布式系统中配置中心的设计与实现,提升组件化开发能力
  • AOP切面编程:深入学习 Spring AOP 切面编程,掌握注解驱动的方法拦截与增强技术
  • 限流算法实现:熟练运用 Guava RateLimiter 实现令牌桶算法的接口限流保护机制
  • 设计模式应用:熟练应用代理模式、策略模式、责任链模式,提升代码的可扩展性与可维护性
  • 反射机制应用:掌握 Java 反射机制在属性获取与方法调用中的高级应用
  • 组件化架构设计:掌握面向接口编程思想,设计支持分布式场景扩展的组件架构