"待办"通常指未来需要完成的任务事项。在货拉拉业务体系中,"待办"已不限于传统任务管理范畴,在业务中发挥重要的驱动作用。本文将阐述如何通过平台化的待办系统设计,满足多样化业务场景需求,同时实现亿级流量规模的稳定支撑。
一、待办在货拉拉中的业务意义
从司机入驻认证、做单履约到退出平台的全生命周期,平台会通过不同的待办事项引导司机完成特定操作,以此保障司机权益及平台合规运营。
待办事项按业务特性与要求划分为常规、限时、阻塞三级策略:
二、为什么我们要建待办中心
随着货拉拉业务规模持续扩张,待办场景复杂度显著提升。原有待办方案依赖实时调用多个服务接口,导致查询链路冗长且脆弱,初期架构难以支撑业务增长,主要面临两大核心挑战:
挑战一:接口稳定性与低延迟要求
-
核心要求: 待办会根据其待办等级集成至报价、抢单等核心链路,必须保障高可用性,P99延迟需严格控制在100ms内。
-
原有架构痛点:
-
响应延迟高: 单次请求需调用超12个依赖服务的多个接口,导致P99响应时间恶化至2秒以上,且随业务增长持续攀升。
-
依赖压力大 & 雪崩风险: 接口峰值QPS超5k,依赖服务压力过载,高峰期存在服务雪崩隐患。
-
监控与降级能力不足: 分散调用链路缺乏统一监控视图与有效的应急降级能力。
-
挑战二:业务灵活性与扩展性不足
-
核心要求: 待办系统对扩展性要求高,要能快速响应多样化待办业务诉求,降低产研接入成本。
-
原有架构痛点:
-
重复建设: 基于相同业务节点的延伸需求,无法复用,需重复开发建设。
-
扩展受限: 新待办场景接入受制于资源瓶颈(性能、依赖服务能力等),难以快速上线。
三、我们的设计思路
核心思路**:**待办中心设计的核心思路围绕"标准化、性能优化、解耦扩展"三大目标展开:
-
首先通过领域驱动设计方法,提炼待办业务的共性,抽象出标准待办模型及完整的生命周期。提供注册、更新、核销、关闭等能力管理待办的生命周期
-
其次采用本地数据库结合缓存的查询机制,消除跨服务调用延迟,**实现毫秒级响应,**针对存量业务实施标准化改造,将依赖服务压力降低90%以上
-
最后设计领域事件,如注册成功、核销成功等事件,通过异步事件通知机制实现业务逻辑解耦,使各业务方能快速响应多样化****需求而无需重复建设
从而系统性地解决了接口稳定性、低延迟要求和业务扩展性等核心挑战,既保证了现有业务的高效运行,又为未来业务扩展提供了灵活支撑。
待办管理
-
**定义待办模型:**根据待办业务提炼待办的共性属性,如业务类型、待办等级、待办状态、有效时间等。
-
定义待办生命周期:分析待办从展示到消失的各个状态,如未完成、已过期、已关闭、已完成,构建完整的生命周期。
-
提供核心能力:提供查询、注册、核销、关闭等待办管理能力,将原本分散在多个服务接口的待办处理逻辑进行整合,减少不必要的实时调用,从而降低下游依赖服务的压力和资源浪费。
-
查询优化:采用本地数据库查询接口与缓存机制,优化待办信息获取流程,实现待办信息毫秒级响应,彻底规避跨服务调用延迟。
领域事件
-
事件设计:通过设计注册成功、核销成功等核心领域事件,实现待办状态变更自动通知。支持服务订阅,灵活支持基于待办流转的多样化需求。
-
待办过期策略:基于待办过期事件监听,执行预设流转策略,灵活满足各类过期处理场景需求。
四、关键设计
4.1、待办生命周期管理
在实现待办数据全场景的统一管理的过程中,我们重点解决了两大难题:首先,针对多系统源数据依赖场景中的无法标准化接入和同步性能瓶颈,采用异步化处理机制实现待办数据的维护;其次,为解决存量业务迁移存在历史数据缺失的问题,结合标准化与异步化处理方案实现了存量待办业务平滑接入。最终形成标准化管理、异步化管理、协同管理三种待办生命周期管理模式,全面覆盖从待办展示到消失的全生命周期管理需求。下面将介绍这三种模式。
4.1.1、标准化管理
标准化管理即由业务服务方通过调用待办中心提供的标准接口,实现对待办事项的全生命周期管理,包括注册、更新、核销、关闭等核心操作。
4.1.2、异步化管理
针对依赖多系统源数据的待办场景,异步化管理通过将同步调用改造为异步处理实现,关键步骤如下:
-
获取业务依赖数据: 调用相关服务,获取所需业务数据。
-
构建目标待办数据集: 基于获取的业务数据,生成目标待办事项集合。
-
数据比对与待办操作:
-
注册:若数据库无记录且存在目标待办数据,则构建模型并注册新待办。
-
核销:若数据库有记录且不存在目标待办数据,则执行待办核销。
-
更新:若数据库与目标待办均存在数据但不一致,则更新现有待办。
4.1.3、协同管理
协同管理即通过标准化与异步能力的动态组合,如:异步注册待办 + 标准化核销/关闭待办,**典型场景:**存量待办业务接入,异步化管理待办的注册解决存量数据缺失的问题,同时业务服务方也通过标准化管理待办的生命周期,增量、存量双通道完全隔离,迁移过程不影响用户操作,完成后可关闭异步管理通道。
4.1.4、数据一致性保障
针对待办存储数据与实际业务数据状态不一致的风险,我们基于系统资源与业务敏感度的平衡考量,设计了强一致性保障、最终一致性保障两种一致性保障机制。具体方案选择将综合评估司机敏感度、待办场景的特性、系统资源等因素。
4.2、三层流量控制策略
为应对接口QPS超阈值引发的系统稳定性风险,在待办异步化管理实施中通过 场景控流→节点过滤→静默期控制 三层流量削减,降低峰值压力,实现资源消耗与实时性的最优平衡。
4.3、场景弹性扩展设计
通过工厂模式 + 模版模式,将不同待办业务逻辑的实现类动态绑定到对应场景,实现“按场景分发”,接入的业务场景只需实现抽象类,即可快速且灵活的支持多样化的需求
4.3.1、动态注册机制
场景实现策略类实现InitializingBean接口,在Bean初始化时自动注册到待办策略工厂Map中:
// 伪代码逻辑
场景类初始化 → 实现afterPropertiesSet() → 将当前实例注入策略工厂Map<场景类型, 处理器>
4.3.2、模板方法扩展点设计
- **主干流程固化:**基于模板方法模式实现核心业务流程固化,确保主干逻辑不可变更。以管理注册为例,流程为:
1. 流程启动 → 2. 获取本地待办数据 → 3. 判断是否需要尝试注册 → 构建待办数据模型(必选扩展点) → 4. 存储初始化待办数据 → 5. 注册成功后处理(可选扩展点) → 6. 发布 **“**待办注册成功” Kafka事件 → 7. 流程结束
-
**扩展点开放:**标准流程中预置业务扩展点,支持不同场景的个性化实现
// 伪代码 protected abstract void validate(); // 必选扩展点(如校验) protected void todoExpireHandle() {{ /* 可选钩子方法(默认空实现)*/ }}
4.4、稳定性设计
4.4.1、实时监控与告警体系建设
通过业务指标埋点(如接口成功率、响应时间)和全链路节点追踪(包括异步任务、事件处理等关键路径),构建实时可视化监控大盘。基于多维监控数据动态配置多级告警(P0-P3),实现:
-
故障分钟级发现:异常指标自动触发对应级别告警
-
根因快速定位:通过链路追踪快速定位故障节点
-
容错自愈:自动触发预设容错策略
-
故障应急:基于实时系统状态评估,决策执行服务降级或分级应急预案,确保核心业务持续可用
4.4.2、容错机制
设计容错机制的核心是通过熔断保护(实时监控+自动切断故障)、服务降级(全局/场景化兜底策略)和应急预案构建系统韧性,需配合监控告警与自动化工具落地实施,实现故障快速隔离与核心业务保障。
五、落地实践
该方案已全面落地集成报价、抢单等核心链路,目前已接入50+待办场景,稳定支撑日均200万以上待办生成及2亿以上查询请求。新待办业务场景可通过标准化、异步化两种方式快速接入待办中心,支持业务节点灵活扩展,具备敏捷响应业务变化能力
六、总结
司机待办经过不断地迭代升级,逐步从“能力单一的功能模块”升级为“能力全面的待办中心”,能很好的支撑日千万级流量及复杂多变的业务场景,同时也完成了从“被动响应需求”到“主动赋能业务”的转变,帮助更多业务方用更高效的方式引导司机完成各类线上线下操作,提高业务指标的转化。