当前位置: 首页 > article >正文

某投行日志记录解决方案二之日志异步落盘: 自定义注解+反射+AOP+异步多线程,实现高并发场景下的统一日志治理方案

一句话总结

自定义注解+反射+AOP+异步多线程

背景

在已经实现风控平台日志追踪实战解决方案的情况下,我们发现在关键操作节点(如交易提交、风控拦截),存在以下问题:

  1. 性能瓶颈突出:同步日志写入使核心交易接口RT增加200-300ms,QPS从2000骤降至800
  2. 可维护性差:日志格式不统一,关键字段缺失率达30%,审计追溯困难
  3. 对账困难:当出现节点数据异常,难快速定位问题

为此,我们更细粒度的统一日志记录表,实现高性能、低侵入的日志异步落盘。

架构设计

1. 整体架构

在这里插入图片描述

核心实现难点与解决方案

1. 零侵入日志采集

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OperationLog {
    String bizType();  // 交易类型代码
    String operation();// 操作描述
    boolean saveParams() default true; // 是否记录入参
}

2. 高性能AOP切面

@Aspect
@Component
public class OperationLogAspect {
    
    @Around("@annotation(operationLog)")
    public Object around(ProceedingJoinPoint pjp, OperationLog operationLog) {
        // 反射获取方法元数据
        MethodSignature signature = (MethodSignature) pjp.getSignature();
        Object result = pjp.proceed();
        
        // 异步记录日志
        AsyncLogManager.submitLogTask(() -> {
            LogContext context = buildContext(pjp, operationLog);
            logService.save(context);
        });
        return result;
    }
}

3. 批量插入优化

INSERT INTO operation_log 
    (user_id,operation,params,result) 
VALUES 
    (?,?,?,?),
    (?,?,?,?),
    ... 
ON DUPLICATE KEY UPDATE retry_count=retry_count+1

实施效果(AB实验对比)

指标同步方案异步方案提升比例
平均RT235ms182ms↓22.5%
最大QPS1,2004,800↑300%
CPU使用率85%62%↓27%
日志丢失率-0.0023%<0.01%

http://www.kler.cn/a/613000.html

相关文章:

  • 94二叉树中序遍历解题记录
  • SpringCloud-环境和工程搭建
  • 基于SpringBoot + Vue 的考勤管理系统
  • 浅谈数据结构
  • CSS FLEX布局
  • 解决 “Cannot read SQL script from class path resource [sql/XX.sql]“ 错误
  • 【科研绘图系列】R语言绘制重点物种进化树图(taxa phylogenetic tree)
  • 微服务面试题:配置中心
  • 基于大模型的自发性气胸全方位预测与诊疗方案研究
  • 合合信息TextIn大模型加速器 2.0来了:智能文档解析和图表解析能力全面升级
  • Spring Boot 3虚拟线程的使用
  • 【计算机操作系统】线程的概念和特点
  • 以太坊主网 PoS 节点搭建指南
  • NC,GFS、ICON 数据气象信息可视化--降雨量的实现
  • .NET 9 中的 WebAPI 文档 重新添加Swagger或改用Scalar
  • 如何用AI技术轻松生成高质量PPT,节省时间提高效率
  • 【Linux】深度解析Linux进程间通信:匿名管道原理、实战进程池与高频问题排查。
  • vue3为什么不需要时间切片
  • 将任何网站变成独立的桌面应用 开源免费 Tuboshu
  • IvorySQL 初始化(initdb)过程深度解析