回答重点
根据官方回应出现 bug 的原因是运营人员配置错营销模板导致的,即优惠额度和优惠类型都写错了。
失误是怎么发生的?其实是我们在支付宝某个常规营销活动后台配错了营销模板,把优惠额度、优惠金类型都写错了,
实际上,类似的人为错误是难以完全避免的,作为开发人员,我们可以从产品和技术的角度出发,思考如何尽量降低人为失误的发生几率,并通过及时的预警、拦截等机制,在出错后减少资损
从产品侧思考
很多敏感场景我们需要防呆设计”,例如用户需要输入日期这个场景,程序通过日期格式验证(如:YYYY-MM-DD),并目如果用户输入不合规范(例如输入2025-31-12,超出合理范围),则程序给出错误提示并要求重新输入,这其实就是防呆设计。
回到面试场景,针对资金、资产相关配置,产品上的设计可以考虑以下几点:
- 多重审核:营销模板系统可以设计一个"草稿-审校-发布”的流程,确保在发布之前,经过多重人员审查,避免因配置指误导致资损。(不清楚为什么支付宝这次会出现这样的错误,因为这种配置按照正常流程肯定是多重审核的)
- 多个优惠类型的冲突检测:在配置多种优惠时,系统应该检查不同优惠类里的冲突,例如,如果一个活动允许使用“满减“优惠,同时又允许使用“折扣“优惠,系统需要确认两者是否允许叠加使用,或限制其只能生择一种优惠。产品侧需强提醒(例如弹框)运营当前优惠有叠加,是否确认配置
- 合理校验优惠额度上限:在设置优惠额度时,系统应该能够检查是否超过了预设的上限、例如,对于某些活动,优惠额度不能超过商品价格的 100%(避免用户获得免费商品)。如果优惠类型为折扣,系统应确保折加比例在合理范围内,如果优惠力度过大,则需要强提醒(例如弹框),比如优惠了70% 这种。
- 合理校验优惠范国:如果优惠品类过多,例如选择了几十种品类,或者直接选择了全品类这种范围的优惠也需要强提醒,进行二次确认,甚至三次确认(选择全品类时一次确认,最终提交时候再次确认)。
从技术侧思考
- 即时监控和告警:对于优惠活动的应用情况,设计实时监控机制,任何不符合预期的异常(如优惠幅度异常、超出预算等、要第一时间告警、比如:如果在短时间内大规模用户(像以前pdd的拉新活动,变成了所有用户可享,很明显粉丝量肯定是异常的)都获得了折扣,可以通过日志分析和支付流水对比,及时发现异常。
- 环境隔离:测试环境和正式环境一定需要有严格的隔离机制,例如网络隔离、数据源隔离等等,因为有太多太多问题是因为测试教据流入正式环境导致的(因为测试往往需要改价,配置大额优惠券等)
- 自动熔断:针对一些优惠可以预设一个资金池,即最大优惠总额,当超过预设的范围则自动熔断,后续所有优惠直接失效,,防止资损进一步扩大。(实际上大部分营的活动都有一个优惠预期,最大优惠总额可以比优惠预期多一些)
- 系统默认兜底检查:例如同一用户多次掘时间内享受了优惠、优惠领度不能过商品价格的10%等等,很多时候我们写代码都需要考虑完全,这样代码和产品才会健壮,即尽可能的避兔人为的错误产生影响(把系统的使用者当成呆子。他们就是会做一些神操作,而你就是系统的最终守护者!)