【极客日常】后端任务动态注入执行策略的一种技术实现
近期做项目时遇到一个场景,是需要在后端任务执行时动态注入策略。具体而言,笔者负责的后端服务,可以理解是会在线上服务发布时,对服务风险做实时扫描,那么这个扫描就需要根据当前线上服务发布上下文,匹配对应的策略。但这里扫出来的策略都是静态持久化的,前端也有产品化的配置,而有些业务则希望能够在任务执行时,动态注入一些业务自己理解需要的扫描策略,不在前端做静态配置。
对于这类定制化需求,笔者想到的一种比较低成本实现的方式是这样的:
首先这类动态生成的策略还是需要持久化的,但不需要在前端做产品化,只不过后端查配置的时候,能够根据一定的逻辑识别出来哪些策略是静态配置,哪些策略是动态生成。具体的识别逻辑怎么做,一个解法就回溯到刚进大学学计算机网络那个年代,IP是怎么划分的,那么动态策略的ID就可以怎样划分。
然后是选数值段,这里需要确保db里面id范围和内存里面数据类型是一致的,比如mysql的bigint可以对应上Golang里面int64,那么就确保不会出现数值的隐式转换。然后我们就可以像IP划分一样,给一个非常大的prefix(比如0x1234567800000000)以及一个mask(对应的是0x7FFFFFFF00000000),那么只要有一个ID,就可以根据prefix和mask判断这个ID是动态策略的还是静态策略的,并且有了prefix,动态策略ID和落库主键ID也可以相互转化。
最后对于整个系统,根据ID去CRUD执行策略的逻辑都需要做变换,需要先校验是动态策略还是静态策略,然后再走对应的分支逻辑。否则会出现问题。