之前对着文档反复翻,一直在琢磨运行机制包括哪些内容,翻来翻去看了好多书面说明,越看越觉得文字太飘,抓不住实实在在的东西,索性跟着一套现成的流程蹲了两天,盯着每一步的动静,慢慢捋清楚自己眼里的这套东西。
最先看得见的是输入触发这块,不是随便丢进去信息就能动起来,得有明确的触发源,有可能是外部提交的指令,也有可能是内部定时到点自动唤醒,触发信号进来之后,先做一层过滤,把无效、格式乱掉的内容挡在外头,合格的信号才会往下送,没通过的就直接留在这个环节,不会继续流转。
紧接着就是核心调度,这一块是整个流程的枢纽,接收过滤好的信号,再去匹配对应的处理单元,判断这件事该交给哪一部分去处理,什么时候传过去、要等多久的反馈,多个任务撞在一起的时候,还要安排先后顺序,不会一堆任务挤在一起卡死,调度本身不负责具体计算,只管分配和传话。
然后是业务处理单元,也就是真正干活的部分,不同的单元各司其职,有的负责数据读取校验,有的负责运算转换,有的负责规则比对,拿到调度下发的任务之后,按照预设的逻辑走完处理步骤,产出对应的结果,处理的时候也会自带简单的状态标记,标记是处理中、完成还是异常中断。
数据流转和存储也属于里面的一环,处理过程里产生的临时数据、中间结果,还有最后生成的成品数据,都要按约定路径传递,临时数据用完就清理,需要留存的内容写入对应的存储位置,每一次传递都带上状态标识,方便后面追溯,数据断档的时候,整个流程就会卡停。
还有状态反馈与异常兜底,每一步处理完都要回传状态给调度模块,一切顺利就走向输出环节,一旦出错、超时或者校验不通过,就会进到兜底分支,有的会重试几次,有的直接记录异常日志,终止本次流程,不会任由错误继续往下扩散,日志会记下出错的节点和原始信号,方便回头排查。
最后是输出交付,把处理完成的结果整理成约定好的格式,向外推送或者等待调取,交付完成之后,本次完整的运行链路才算结束,整套流程不是单个模块独立工作,是一环扣一环的联动。
这只是我的个人感受,不是标准答案,我是跟着一套业务流程观察出来的,不同系统、不同场景下的运行机制拆分方式差别很大,有的会合并模块,有的会拆出更多细分环节,不能直接套到别的东西上面。
最开始我还以为运行机制就是里面的运算逻辑,后来才反应过来,逻辑只是其中一小块,触发、调度、流转、兜底这些看不见的环节,才是保证它能持续跑起来的关键,之前踩过的误区就是只盯着处理逻辑,忽略了调度和异常部分,结果模拟流程的时候总是跑不通。
那天傍晚停掉测试的时候,屏幕上还留着一长串异常记录,盯着那行日志看了很久,也没想着立刻整理成规整清单,只是记下来这套东西不是单靠某一段代码就能撑起来。