
复杂作业系统设计中,控制逻辑的设计是核心环节。本文从海外物流管理系统切入,探讨了大型B端系统的复杂性根源,包括复杂的逻辑依赖结构、广泛存在的状态漂移问题以及北极星指标在管理与作业部门间的错配现象。这些问题导致系统设计困难重重,难以实现预期效果。文章进一步提出了系统工程需求分析法,通过识别边界、限制和目标,直接暴露出冲突点,并提出了解决思路。最后,文章展示了如何根据系统工程原则进行控制逻辑的设计,包括何时启动、如何运行、异常处理、资源分配和优雅退出等关键方面。
--91likeyou---
一、大型B端系统的复杂性
以海外物流管理系统为例,业务本身非常简单的可以说清楚:收-发-到-派-签,系统中的元素也是简单的:信息流-货物流-财务流,实现的路径也是清晰的:通过降低各节点的成本,提升各节点的效率,为客户提供好的服务,最终实现企业价值,企业架构也是清晰的:总部-区域-转运中心-收派网点,各层节点,按照WBS进行工作细分并形成SOP,形成金字塔式的管理结构。但是为什么做好这类系统这么难呢?
可能主要体现在以下方面:
1. 复杂的逻辑依赖结构
作业实例有等待、运行、成功、失败、重试中、跳过等大量刻画系统数据处理的状态以及揽收、发货、出仓等大量刻画实际作业的状态,状态之间非线性流转,普遍存在依赖关系的拓扑结构,其特殊性导致在产品设计过程中,往往一个节点的改造问题经过长链条的传动,造成长尾效应,扩大问题的影响范围。一个单据在流转过程中,面临着串行流程,如装车扫描-卸车扫描,面临着并行流程,如财务记账、轨迹推送、子单拆分挂起,面临着汇聚依赖,如破损包裹需要“理赔专员定损完成”和“仓管二次包装完成”都确认后才能重新汇入主流程。
2. 广泛存在的状态漂移问题
即由于以下原因造成的系统未正确反馈实际作业情况,叠加复杂的逻辑依赖结构,系统在记录实际作业情况时总是显示出延时特征和错位特征,造成系统可用性问题。
3. 北极星指标在【管理-作业】部门的错配
按照古德哈特定律【一项指标一旦成为政策目标,它就不再是好指标】,即由于以下原因,软件系统加剧了“指标的二阶效应”,系统让管理部门的考核变得极其方便(看报表即可),但也让一线极其容易“做数据”——追求系统里的数字好看,而非物理世界的作业质量。反应在产品设计层面,就是普遍面临着考核压力和一线实际体验的平衡压力,此时如果由于管理部门的强势,则更容易将管理方法滑坡成通过转嫁管理责任,从而增加一线的各种作业校验与提醒,而非基于精益管理的【计划-监控-评估-改进】逻辑。
比如:管理部门本应以“客户价值”或“整体效率”为北极星,但在实际运作中,北极星被悄悄替换为:
- 系统录入率:数据有没有进系统?
- 合规率:有没有按规章制度执行?
那一定会造成一线部门的失焦——把“交作业”当成了“干工作”
- 系统考核的是“扫码率”,那就把所有包裹都扫了,但扫错了没人管。
- 系统考核的是“SOP步骤完成率”,那就每个按钮都点一遍,至于实际效果,那是系统的事。
- 当SOP与现场冲突时(比如系统要求称重但便携电子秤故障),一线被迫在“违反SOP”和“完成作业”之间二选一。最终加重了系统内状态的偏移。
4. 系统本身实现逻辑复杂
- 规模复杂:日均百万级作业,需要分片、优先级、资源隔离。
- 环境复杂:跨系统、跨语言、跨云,需要和外部存储、API、消息队列等交互。
- 历史包袱沉重:长达数年的迭代,无数写死的逻辑,一线多个历史作业版本的现实情况。
对于系统来说,人毕竟不是抽象用例中的执行者,他们会犯错,也会不知所措,我们几乎所有的管理手段其实本质上都是为了对抗系统中【人-环境】的二元随机性,这是系统中复杂性的根本来源。从系统工程的角度来讲,复杂作业系统本质是一个大规模、有延迟的闭环控制过程,强调在整体性和生命周期中把握系统行为。我们容易忽略的是,系统外的SOP以及系统内的技术实现思路也是我们的管理对象,如果忽视这两方面,产品经理是做不好复杂作业系统的,这就需要我们有系统工程的需求分析办法。
二、系统工程的需求分析办法
接下来,我们看一个具体场景,无论对于终端网点还是转运中心,进行包裹的装车发件,流转给下一个节点都是一个核心的业务操作。
从系统工程角度出发,我们应该如何研究这个问题呢?我梳理了一个需求分析的架构,相较于传统的需求分析方法,我们不再是线性的需求分析,即【抽象-建模】,因为这通常会让我们默认业务本身是静态且不可改变的,且往往将业务诉求当作输入物进行抽象后便不再参与后续的研发生产过程,那么我们的方案总是会不自觉的只是将业务搬到线上,并往往发现最终的方案会由于信息损耗传递和实现逻辑不自觉的妥协造成价值偏差。所以我们期望通过识别边界、限制、目标,直接暴露出冲突来,以找到系统最优解。
按照这个框架,我们可以分析装车发件的研究要素
STEP1: 分层罗列:将所有的痛点、需求、功能点,投放到战略、操作、实现三行里。这是第一步。
STEP2: 识别层间冲突(最关键的一步):引导团队回答:
- 战略 vs 操作:“我们要求百分百校验(战略),但这会让操作员每单多花5秒(操作),在爆仓时这个要求是否必须坚持?”
- 战略 vs 实现:“我们希望错发率降到零(战略),但地址库的更新频率和准确率(实现)是否能支撑这个目标?”
- 操作 vs 实现:“操作员需要扫描后立刻得到反馈(操作),但网络延迟和数据库查询耗时(实现)经常导致等待,怎么设计降级方案?”
STEP3: 定义层间解决思路:冲突点找到了,就要定义处理方式。例如:
- 战略层 → 操作层:支持动态调整的配置,并且需要让操作层中的操作员及时可感知。
- 操作层 → 实现层:支持明确的质量要求。要求实现层的“校验策略”服务,在99.9%的情况下,延迟必须低于200ms。
- 实现层 → 操作层:支持清晰的状态报告。当实现层降级时,必须明确告知操作层:“当前处于‘离线模式’,‘部分校验已跳过”等。
- 实现层 → 战略层:支持监控数据收集-清洗-感知-调整配置的闭环。
通过这种方式,我们输出的就不再是一个零散的需求列表,而是一个清晰的、层级间关系明确的、冲突已显性化的系统需求模型。
三、根据系统工程的进行控制逻辑设计
在复杂作业系统中,最大的课题就是进行控制逻辑的设计,细分下来,其实我们需要在产品设计和研发过程中回答这些问题:
- 何时启动?(时间、事件、依赖满足)
- 如何运行?(串行/并行、分片策略、重试次数)
- 异常怎么办?(超时、失败、无网弱网、上游失败)
- 资源如何分配?(优先级队列、并发上限、限流)
- 如何优雅退出?(终止、暂停、恢复、补偿)
按照这个思路,我们可以发现当前的业务流程面临着以下问题,并进行控制逻辑的设计,
3.1 一般问题
3.2 复杂问题
问题1:当多个规则同时触发,生成了不同级别、不同目的的信号,系统如何整合这些信号,并对操作员输出一个清晰、有效、不冲突的指令?
这本质上是一个多目标、多约束下的实时决策与信息融合问题。
第一层:校验分类与“动作-消息”解耦
首先,要打破“一个校验=一个弹出框”的烟囱式设计。把每个校验规则产生的结果拆分为两个独立维度:
核心原则:任何时刻,动作指令只有一个;提示信息可以有多条。
一个校验可以产生“阻断动作+风险提示”,也可以只产生“风险提示”。这为后续的融合铺平了道路。
第二层:冲突消解与动作融合的决策矩阵
当一个包裹触发多个校验时,会得到一组动作指令:[放行, 阻断, 确认]。系统必须将它们融合成一个最终指令。这遵循最严苛原则,即风险最高的指令胜出。
动作严苛层级(从低到高):
静默放行(无任何指令) 弱提示放行(仅有提示信息,不中断扫描) 确认放行(弹出轻量级对话框,需操作员一键确认) 阻断(作业中断,必须完成指定动作才能继续) 融合决策表如下:
设计要点:
- 系统内部并行执行所有校验,收集所有触发的(动作指令, 提示信息)集合。
- 执行一个简单的MAX()操作,找到该集合中严苛层级最高的动作指令,作为最终指令。
- 如果一个校验逻辑是完全阻断性质的,也可以在识别到此逻辑后,直接跳出,不再进行后续校验动作。
这就是运筹学中字典序优化(Lexicographic Optimization)的简化应用:安全性是绝对第一优先级,效率在其后。
第三层:提示信息聚合
提示信息不能简单堆砌。一个包裹触发8条提示,如果全部展示,操作员会信息过载而直接忽略。需要进行基于风险的聚合。
1. 计算包裹的综合风险评分
为每一条提示信息预设一个风险分值(可由AHP层次分析法或专家打分确定),累加得到该包裹的综合风险分。
2. 基于分值的聚合策略
- 低风险(0分):不展示任何提示。
- 中风险(1-3分):执行“提示放行”。在PDA界面上,合并展示TOP3提示,并显示一个统一的“风险标签”(如“高风险客户”)。
- 高风险(4分以上):强制升为“确认放行”,要求操作员查看聚合提示后确认,确保信息已被感知。
第四层:交互设计的序贯决策
最终的呈现是一次人机交互的序贯决策过程。界面不应该是一堆信息的爆炸,而应引导操作员做最少的决策。
界面设计方案:
当操作员扫描一个包裹,系统后台在毫秒内完成上述融合,然后弹出一个整合页面:
顶部:统一的行动标题
- 阻断时:【拦截】此件有2项严重问题,无法发运
- 确认时:【请确认】此件有3项高风险提示
- 提示时:【请注意】此件为易碎品(一个toast即可,不阻塞)
中部:聚合的告警列表
- 将所有触发的提示信息,按风险等级排序,清晰列出。每条提示旁给出建议行动(如:“建议复核重量”)。
- 基于字典配置的统一文案管理:唯一报错码+准确的问题定位(单号+问题原因)+ 无歧义的处理策略。
底部:唯一、清晰的动作按钮
- 阻断时:[重打面单后继续操作][放入异常待定区]
- 确认时:[已知悉,继续装车][仍要拦截,放入待定区]
- 提示时:无按钮,或仅是屏幕顶部的弱提示,下一秒扫描即消失。
快速决策引导:拦截时,系统给出建议处理动作(“是否改发X?”),把“思考”变成“选择”。
这就是多属性效用理论(MAUT)的UI实现:将多维度校验融合为一个“效用值”(最终指令和风险等级),极大简化操作员的决策。
在系统中,这个功能模块可以称为“校验融合与决策引擎”,其核心架构如下:
规则适配器:将各种异构的校验规则,统一输出为(动作指令, 提示信息, 风险分)的标准元组。 冲突消解器:对所有动作指令执行MAX()最严苛决策,产生最终动作。 信息聚合器:聚合所有提示信息,计算总分,生成聚合告警列表。 界面渲染器:根据最终动作和信息,生成唯一、清晰的用户界面。 问题2:当校验逻辑众多且校验元数据分散时,系统如何进行逻辑设计,保障校验效率
异常包裹拦截内容较多,如终结件、拦截件、已签收、已取消、订单不存在等,但校验用到的数据分散在多个团队不同数据库中,有些可以从数据库中直接查询,有些由于查询效率问题,数据所有方只能提供接口供我们查询。从运筹学视角看,是在计算资源、存储资源与时间三者之间做全局优化,目标是以最小代价,在正确的时间将正确的数据送到计算点。
第一层:校验必要性检查
上游失败,下游操作是立即终止,还是允许下游运行到最后或者某个特定节点几种处理?如何防止一个节点拦截失败拖垮整个流程?
从战略层出发,最懒惰的方法就是说有节点都增加校验,但是并不是所有节点都具备异常处理条件的,如卸车到件节点,没有安排终结件拦截SOP的条件,所以这是战略层和执行层的冲突点,必须首先确定。
第二层:校验决策前置
最高效的查询是不查询。引入前置过滤层,把80%的常规包裹在查库前就放行。
1. 确定性规则优先
- 格式校验:单号包号规则等。可使用配置正则下载到本地的方式进行校验
- 逻辑硬约束:如在揽收环节,包裹重量不能过大,不符合普遍认知。可以直接前端写死这些规则应放在内存中的规则引擎执行,零I/O消耗。
2. 静态白名单
- 如果“某大客户发往某仓库的标准件”历史上100%通过,可配置为免检白名单。
- 接口是先查内存白名单,命中即放行,无需后续任何查询。
第三层:本地缓存校验
校验需要比对的数据(如禁运地区列表、黑名单地址)通常不大且变更频率低。
技术实现:在应用进程内构建缓存。全量加载关键数据至内存,校验时零网络开销、毫秒级响应。
适用数据:禁运品列表、高风险地址库、路由对照表等业务数据。这些数据量级通常在万到百万条,完全可以放入内存。
更新机制:
- 业务数据变更时,通过消息队列(MQ)广播缓存失效或更新事件。
- 或者采取定时全量刷新(如每小时从数据库拉取一次),适合完全允许短时间不一致的场景。
运筹学视角:这是典型的空间换时间策略,用廉价的内存空间换取宝贵的扫描停顿时间。
第四层:Redis校验处理
当数据量过大、更新频率更高或有集中管理需求时,在应用与数据库之间加入Redis分布式缓存。
技术实现本地缓存未命中时,查Redis。命中返回。
特殊场景——爆仓下的降级:这与之前的降级策略联动。当系统检测到负载过高,可做短路处理:
只查本地缓存,未命中也不查Redis和DB,直接放行或走最严苛的默认策略。
运筹学视角:这叫功能降级,在排队论中是主动丢弃非关键任务以保核心吞吐。
第五层:前置计算与批处理
换个思路:既然“查库”慢,能不能在扫描前,就把这个包裹的校验结果提前算好?系统可以直接根据提前算好的校验标识进行处理,而非临时再去算。
1. 波次预计算
- 在装车作业前,异步地把该批次所有包裹的规则跑一遍,生成一个包裹级校验结果缓存。
- 操作员扫描时,直接从该缓存读取结论,命中率100%。
- 场景适用:拦截件提醒等。
2. 事件驱动的缓存预热
- 一旦订单状态满足拦截件配置校验逻辑”,就触发异步任务,计算该订单的校验结论并写入Redis。
- 扫描时校验结果早已在缓存中驻留。
3. 流式批处理
在极限爆仓时,临时关闭PDA的实时校验,改为后台异步处理。扫描只做最基本的条码登记,异常后置通知处理。这是用最终一致性换取极端吞吐量。
最终架构全景
一次扫描校验请求所走的最优路径如下:
静态规则引擎(内存):格式、逻辑硬约束 → 80%的请求在此终结。 白名单/免检缓存(内存):已知的高频安全件 → 又一批放行。 波次预计算结论缓存(Redis):本批次包裹的预判结果 → 精准命中。 本地业务数据缓存(Caffeine):禁运品、黑名单等 → 毫秒级比对。 线上Redis缓存:上述未命中的可缓存数据 → 兜底。 线上数据库:仅作为最终的记录溯源和缓存回源,不再参与实时校验链路。 四、结语
前AI时代,我们使用系统工程的方法进行需求分析找到最优解,几乎是不可能的,基于多约束的设计决策成本很高,技术实现逻辑叠床架屋,跨团队的沟通组织困难重重。所以产品经理往往只是做需求翻译,并保证项目的上线,就已经耗尽了心力。
但是在AI时代,这一切都不再成为问题,此时从系统工程的角度去进行需求生产恰当其时。
题图来自Unsplash,基于 CC0 协议。
🔥 热词:#复杂控制系统有哪些