背景是在延期项目复盘时,了解到当前业绩提成系统面临三个问题:产品迭代周期长,客户成功交付成本高,研发维护成本高。结合当年快速增长的目标预判,这里可能会成为卡点。发起了架构重构。
系统的四个难点
- 方案种类多:从类型、支付场景、适用岗位、统计方式多个维度,组成多种方案。
- 场景需穷举:以消耗业绩为例,可被消耗的商品类型有卡、余额、权益等。卡有有限次卡、无限次卡、通卡、定制卡;余额有本金赠金;权益又分为开单赠、随卡证、积分兑等。这些场景都要解决业绩怎么算、算多少、怎么分的问题。
- 业务链路复杂:一方面是数据关系,订单和业绩单、提成单的关系是 1 : M : N;另一方面是依赖关系,提成依赖业绩,综合依赖单项。
- 计算方式多样:还是拿业绩为例——怎么算?可以按照实时售价、快照售价、买卡均分价以及指定价;算多少?可以按比例固定扣减;怎么分?可以按比例均分或者自定义比例。
解决方案:三分法
我的解决方案是三分法。
- 分治:通过分治思维,隔离问题域,抽象出了一套模型。
- 分离策略:将动态的决策数据和静态的计算流程分开,定义了一套流程执行引擎。
- 分层设计:将计算规则抽象为初值规则、计算规则、分配规则。
最终交付了一套配置式、前后端一体化的架构解决方案:零故障迁移了 2000 家,研发上手快,问题少,交付周期短。后期拓展美发行业,一周即交付行业版本。
架构思考:定、解、变、衡四个阶段
- 定:定目标。架构解决什么现状问题,突破什么业界难点(创新点)。
- 解:建模型。分维、分域、分层解决问题,合并归类分析问题。
- 变:验业务。动静演变——宏观行业、微观具体业务流程,内部外部视角下业务会发生什么改变。用业务流程用例去验证架构。
- 衡:定结果。最终的方案取舍什么?为什么?期望达到什么样的可衡量的结果?是否与目标一致。
好的架构是,兼容过去,描述现在,能演变未来。