项目概述
在互联网公司真实业务开发场景下,往往会有很多的业务工程系统进行落地,如;电商、交易、信贷、营销、分润、清分/结算等等,这些业务场景会落地非常多的业务系统。而这些业务系统中,会有很多的相同的非业务逻辑的共性技术诉求的处理。
如;动态属性配置、熔断、限流、异常、数据采集监控、增强的mock服务、流量录制回放、切面拦截日志、模型设计框架等等。这些共性的组件东西,不可能让每个系统全部自己实现一遍,既耗费人力,最后又实现的五花八门非常难维护。
所以,在互联网公司中,会单独把这类通用的逻辑凝练成共用的技术组件,让所需的业务场景进行引入使用。
核心技术栈
架构设计
设计通用的统一规范的扳手工程,以模块化方式实现各种通用组件:
- 搭建标准的扳手框架 Spring Starter 工程
- 以模块化方式陆续实现动态配置、限流服务、通用设计模块框架
- 以 Redis 作为简单注册中心使用,管理动态配置、限流服务等
- 通过 admin 管理端,下达配置命令,来动态操作工程配置
工程模型
- 定义 xfg-wrench 扳手工程,以 xfg-wrench-starter 为前缀,命名各项服务组件
- xfg-wrench-test 为测试工程,用于验证各个模块的功能实现
- xfg-wrench-admin 为管理后台,后续陆续创建完成
- 其他模块组件陆续迭代开发
核心功能模块
基于Redis实现的分布式动态配置中心,支持配置的实时推送和动态刷新,无需重启应用即可更新配置。
基于Guava RateLimiter实现的令牌桶算法限流保护机制,支持接口级别的流量控制和保护。
提供责任链模式、策略模式等设计模式的通用实现框架,支持业务逻辑的灵活扩展和组装。
DCC动态配置流程设计
核心流程说明
- 以 SPI 机制,实现组件入口类的注册,驱动注册中心和 Spring 容器工作
- 注册配置链接 Redis 当做注册中心使用,初始化动态配置中心服务
- 拦截 Spring 容器实例化的 Bean 对象,找到使用了自定义注解 @DCCValue 的属性
- 对属性进行反射调用,动态读取 Redis 中配置属性值并设置
- 通过 Redis 发布订阅消息,实现配置的实时推送和更新
学习收获
通过本项目的学习,你将深入掌握以下核心技术和设计思想:
- Spring框架深度应用:深入学习 Spring、SpringBoot、MyBatis 框架源码,掌握 SPI 机制实例化组件入口
- Bean生命周期管理:理解 Spring Bean 生命周期与 BeanPostProcessor 的实际应用
- 分布式配置管理:学习分布式系统中配置中心的设计与实现,提升组件化开发能力
- AOP切面编程:深入学习 Spring AOP 切面编程,掌握注解驱动的方法拦截与增强技术
- 限流算法实现:熟练运用 Guava RateLimiter 实现令牌桶算法的接口限流保护机制
- 设计模式应用:熟练应用代理模式、策略模式、责任链模式,提升代码的可扩展性与可维护性
- 反射机制应用:掌握 Java 反射机制在属性获取与方法调用中的高级应用
- 组件化架构设计:掌握面向接口编程思想,设计支持分布式场景扩展的组件架构