基于CDC做全链路数据审计系统-概览(一)

项目背景痛点:

1.老项目服务多,调用链路复杂,一张表被多个服务写入数据
2.一条数据的变更没办法确定是哪个用户操作的
3.老数据库不是所有的表都有操作人字段,且每个表的记录的操作人字段名不一样(比如createBy,create_by,create_user等等)
4.一条数据的变更不知道是哪个源头修改的,研发排查问题费时费力
5.一条数据的生命周期没办法溯源
6.一次操作引起了哪些表的数据变更没办法查询

研发人员每天就会在排查问题的时间浪费很多时间,经常老人离职新人完全不知道该怎么排查问题。为了解决上述问题,我在本部门设计了一套基于CDC(Change data capture 数据变更,比如监听mysql的binlog)的审计系统,系统上线后,给小伙伴解决问题带来了质的提升。

本文主要讲讲整个设计思路,整个系统一共分为5大篇,每篇尽量的简短,读起来不那么费劲。最后会把整个的串起来做成一个小的案例,麻雀虽小,但是五脏俱全。有些内容如果你们用不上,可以不使用,因为这一套是适用于我们自己的项目,有可能你的更简单只需要使用CDC就可以完成审计了。

整体设计图:

图片.png

备注:

(1) 通过aop拦截请求接口的参数,返回值,及trackeId,项目信息 并异步发送到Mq中去

(2) 通过Mybatis的拦截器修改sql,将操作人的userId和traceId通过hint的方式附加到sql中

(3) 入口信息存存储和mysql数据变更存储,他们通过traceId进行关联,这样我们能知道这条数据是从哪个源头发起的

a,b是两条线路,最后统一由数据解析存储服务统一处理。
traceId的生成,可以自己实现,如果用了pinpiont也可以用pinpiont里的traceId来使用。

你可能感兴趣的:(基于CDC做全链路数据审计系统-概览(一))