复杂业务模型抽象架构
几乎所有复杂的业务逻辑,都可以被拆解或组合成三种核心模型的应用:
- “做什么决策?” —— 策略引擎负责回答这个问题。
- “呈现什么顺序?” —— 排序架构负责回答这个问题。
- “按什么步骤做?” —— 流程引擎/任务系统负责回答这个问题。
1. 策略引擎 (Policy/Strategy Engine)
这是"满足了哪些条件,就可以命中哪些结果"的模式。它的核心是将易变的业务规则(策略)与相对稳定的系统代码分离开来。
核心思想
定义一系列规则(条件),当输入的数据(事实)满足这些规则时,系统执行相应的动作或返回特定的结果。A/B测试、风控引擎的原理。
典型应用场景
- 风控系统:用户注册、登录、交易、发帖等行为,命中不同风险等级的规则,从而触发拦截、验证码、人工审核等不同操作。
- 营销活动:用户满足地域、会员等级、历史消费行为等条件,即可命中优惠券、折扣、弹窗提醒等营销策略。
- A/B测试与灰度发布:根据用户ID、设备信息、地理位置等,将用户分流到不同的实验组,下发不同的产品策略(UI、算法、业务逻辑等)。
- 访问控制(Authorization):用户拥有什么角色、属于哪个部门,决定了他能访问哪些资源、执行哪些操作。
- 内容分发:根据用户画像和内容标签,决定向用户推荐哪一类内容。
涉及的关键技术和知识点
- 规则引擎(Rule Engine):如 Drools、Easy Rules 等,提供规则的定义、存储、匹配和执行能力。
- DSL(Domain Specific Language):为业务人员提供易于理解和编写的规则描述语言。
- Rete算法:高效的模式匹配算法,是大多数规则引擎的核心。
- 事实库(Fact Base):存储当前状态和输入数据的地方。
- 推理引擎(Inference Engine):负责将事实与规则进行匹配,并执行相应的动作。
高度抽象的模型
+-------------------+
输入数据 -> | 特征/事实提取 | -> [事实集合]
+-------------------+
|
v
+----------------+ +-----------------------+ +-------------------+
| 规则/策略仓库 | -> | 规 则 引 擎 | -> | 决策结果/动作 |
| (DB, Config) | | (Rete算法, DSL解析) | | (通过, 拒绝, 发券) |
+----------------+ +-----------------------+ +-------------------+
^
|
+-------------------+
| A/B实验分流模块 |
+-------------------+
2. 排序架构 (Ranking Architecture)
理解得非常准确:“算法模型给出来的结果,它不一定精确,他需要的后端工程再去手动的(干预)"。这完美描述了"搜广推"中的重排(Re-ranking)阶段。
核心思想
将一个候选集合(商品、内容、广告等)按照某种评分标准进行排序,以优化用户体验或业务指标。现代排序架构通常是多层漏斗结构,从粗糙到精细,从算法到规则。
典型应用场景
- 搜索引擎:对搜索结果按相关性、权威性、时效性等进行排序。
- 推荐系统:对推荐内容按用户兴趣、内容质量、多样性等进行排序。
- 广告系统:对广告按eCPM(预期收益)、CTR(点击率)、用户体验等进行排序。
- 电商平台:对商品按销量、评分、价格、库存等进行排序。
- 内容平台:对文章、视频按热度、质量、个性化匹配度等进行排序。
涉及的关键技术和知识点
- 多层排序架构:召回 -> 粗排 -> 精排 -> 重排,每一层都有不同的优化目标和计算复杂度。
- 机器学习排序:Learning to Rank (LTR),如 RankNet、LambdaMART、XGBoost 等。
- 特征工程:用户特征、物品特征、上下文特征、交叉特征等。
- 在线学习:实时更新模型参数,适应用户行为变化。
- 多目标优化:平衡点击率、转化率、用户满意度、收益等多个指标。
- 重排策略:
- 打散(Diversification):避免同类内容过度聚集。
- 去重(Deduplication):移除重复或相似内容。
- 强插(Insertion):插入特定的运营内容或广告。
- 规则保护:确保结果符合法规和平台政策。
高度抽象的模型
+----------+ +----------+ +----------+
| 召回层 |-->| 粗排层 |-->| 精排层 |--> [算法排序列表]
| (多路召回) | | (轻量模型) | | (复杂模型) |
+----------+ +----------+ +----------+
|
v
+-----------------+
| 重排层 |
| (打散, 去重, 强插) | --> 最终呈现给用户的列表
+-----------------+
3. 流程引擎 / 任务系统 (Workflow Engine / Task System)
对这个模型的描述也非常到位:“执行完A,再执行B…延迟20分钟再执行C…各种任务的编排调度”。它解决了业务流程的自动化和可靠性问题。
核心思想
将一个复杂的端到端业务流程,拆解为一系列独立的、可编排的、可观测的任务节点(Node),并根据预设的逻辑(串行、并行、分支、延迟、事件触发)来调度和驱动整个流程的执行。
典型应用场景
- 电商订单系统:下单 -> 锁库存 -> 支付 -> 通知仓库 -> 发货 -> 确认收货,这是一个经典的线性流程,但其中支付、发货等环节可能包含复杂的子流程和异常处理。
- 商品发布流程:上传图片 -> 图片处理(加水印、压缩)-> 内容审核(机审+人审) -> 同步到搜索引擎 -> 上架。
- 数据处理 (ETL Pipeline):从不同数据源抽取数据 -> 清洗转换 -> 加载到数据仓库,这是一个典型的数据任务流。
- 用户增长任务:用户完成任务A(签到)-> 发放奖励 -> 触发任务B(去浏览商品)的引导。
- SRE/运维自动化:监控到告警 -> 自动执行诊断脚本 -> 尝试自动恢复 -> 失败则创建工单并通知负责人。
涉及的关键技术和知识点
- 工作流引擎:如 Activiti、Camunda、Temporal、Airflow 等。
- 状态机:有限状态机(FSM)用于建模任务的生命周期和状态转换。
- DAG(有向无环图):用于表示任务间的依赖关系和执行顺序。
- 事件驱动架构:通过事件来触发任务的执行和状态变更。
- 补偿机制(Saga Pattern):在分布式环境下,当某个步骤失败时,如何回滚之前的操作。
- 重试与容错:任务失败时的重试策略、熔断机制、降级处理等。
- 监控与可观测性:任务执行状态、耗时、成功率等指标的监控和告警。
高度抽象的模型
[事件/触发器] -> [流程引擎] -> [任务调度器]
| |
v v
[流程定义存储] [任务队列/消息队列]
| |
v v
[状态管理/持久化] [任务执行器集群]
| |
v v
[监控/告警系统] [结果回调/通知]
结论
这三大模型:
- 策略引擎 解决 “判断” 的问题。
- 排序架构 解决 “择优” 的问题。
- 流程引擎 解决 “执行” 的问题。
在真实的重型后端业务中,这三者往往是融合在一起的。比如:一个营销活动(策略引擎决策),可能会触发一个用户任务流(流程引擎执行),任务流的最终奖励可能是个性化的优惠券列表(排序架构生成)。
理解和掌握这三大抽象模型,能够帮助我们更好地设计和实现复杂的业务系统,提高系统的可维护性、可扩展性和业务敏捷性。