文章目录
- 1 项目背景
- 2 前言
- 3 采取的措施
- 4 排查的思路
- 5 原因
- 6 技术实现方案
1 项目背景
运维人员进行日常巡检发现Mailgun邮件代发渠道的退信率不寻常,在某个时间段会飙高。这会有2个影响:
(1)针对运维的角度,Mailgun官方会将公司注册的mailgun账号封了。
(2)针对业务方的角度,电商系统无法在买家支付后发出订单邮件,从而导致买家取消订单、拒付的概率升高,最终导致支付成功率下降。
2 前言
- 本文阐述的是笔者遇到的真实案例,非八股文或者自己玩玩的小demo。本文适合对电商业务感兴趣的小伙伴
- 本文将着重以整体解决方案叙述作为一名Java开发者应该如何去处理生产级别的故障,不会手把手教你写代码,更多的是偏向于方法论、思考、技术设计落地
3 采取的措施
- 配合运维人员排查退信率升高的原因(互相成就对方,相辅相成)
- 从业务角度(咨询业务方)、技术角度(代码)排查什么场景会发送邮件
- 向领导、运维人员、业务方反馈结果并沟通确定解决方案
4 排查的思路
退信率升高,肯定是因为发送邮件失败了。跟业务方确认,都有哪些场景会发送邮件,有(1)支付成功;(2)发货;(3)弃单通知;三个场景。查询在退信率飙高的时间段内创建的订单,并查询每个订单对应的邮箱。找业务方确认是否存在某些卖家进行刷单(由于是刷单,所以邮箱基本都是乱填的,会导致发邮件失败)。统计三个场景的发件数量。
5 原因
由于涉及到公司的业务,此小节简略一笔带过
- 查到有某个卖家在刷单(支付成功触发的发送邮件)
- 弃单通知发送邮件的数量过多,且大部分邮箱都是无效的
6 技术实现方案
- 与运维调研新的邮件代发渠道,使用策略+模板模式整合多种邮件代发渠道,以此来达到支持快速切换渠道,降低账号被封的风险。上线后的效果:退信率有降低,但降低效果不理想。
- 考虑到弃单通知挽回客户的价值不大,停止发送弃单通知邮件。上线后的效果:退信率大幅度降低,低于5%。但这只是临时性解决问题,无法从根本上解决。在接下来的几天里,自研邮件风控方案并落地。
- 自研邮件风控方案。
(1)做一个收件人邮箱黑名单,存储发送失败的收件人邮箱,或收件人邮箱不存在、不可达。发信前先查收件人邮箱黑名单(由于C端页面并发量大,要做缓存,double check查询机制)。
(2)统计每个站点的发信情况(已发送,发送失败,退信率,退信率阈值等,表设计留一个is_deleted
字段标记是否删除,可以用来作为该站点的历史情况统计)。统计每条发信的情况(收件人,是否发送失败,失败原因等)。站点的退信率超过阈值则风控该站点,不允许发送该站点的邮件。
(3)利用MX记录,校验收件人邮箱的域名,无法通过校验的邮箱,则不进行发送邮件并写入收件人邮箱黑名单(使用Double check写入库)。
(4)引入第三方收费的邮箱校验服务。使用该服务前先校验MX记录来降低收费服务的成本。使用策略+模板模式整合多种第三方校验服务,以此来达到快速切换