为什么钱扣了,扣款短信没收到!

96
泡面办公室
2017.07.28 18:11* 字数 1132


问题背景

我们公司的通知系统是一个承载着总公司及其各个子公司所有交易信息、会员通知、市场营销、监控报警等业务的短信、邮件发送系统。背后对接了数十家短信服务商,每月发送短信量在千万数量级。

但随着公司业务的不断发展,业务部门提出了新的要求:提升系统稳定性、8s 送达率达到 97% 。另外我们还发现,批量发送大量的营销类短信(时效性不强但笔数巨大)经常影响验证码类短信(时效性强)的送达率。

解决方法

面对这几个极具挑战的问题,我们打算从改进统计方法、优化现有系统两个角度入手。

1、改进统计方法提高送达率

一般情况下,运营商会将字符数超过 67 的短信称为长短信。在实际下发过程中,运营商考虑到报文大小和手机内存等众多因素,通常会将长短信拆分后发送,手机端在收到所有短信片段后重新组装成为一条完整的短信。运营商返回的短信送达时间是以拆分后的最后一条短信片段接收时间为准。

不难看出,长短信对送达率统计结果影响较大,但这并不能很好的描述一个通道的质量。因此,需要用短短信来表征一个通道的质量,且明确了推动短短信改造工作是提升系统整体送达率的前提条件。

时空是不可分割的,一切离开时间谈空间都是耍流氓。经过分析我们不难发现,有些短信对时效性要求很高,如交易验证码、扣款通知等;而有些短信对时效性要求相对较低,如营销类的短信。根据经验,明确了以 8s、12s、18s、30s 内短信送达率作为衡量系统短信送达率的内部标准。

因此如何区别对待每一笔短信下发请求就成为了我们面临的第一个挑战。以时效作为横坐标,以短信长度作为纵坐标建立坐标系,思考落在每个区域中短信的内容特征。最后,我们将短信分为验证码类、交易通知类、监控报警、营销类等短信类型,并计划将通知规则和通道分别对应到不同的短信类型上,来实现资源的合理配置。

2、优化现有系统提高稳定性

我们重新梳理了短信下发的处理流程,包括参数校验、应用鉴权、规则加载、短信渲染、持久化订单、通道选择、通道渲染等过程。

针对不同类型的短信制定不同的评价标准,采取不同的处理逻辑。比如针对营销类短信量大但时效性要求不高的特点,采取异步削峰处理来减少对现有系统和通道的冲击,同时可以有效降低对时效性较高的短信的影响。

结果和感悟

改造完成后,系统稳定性至今维持在 100%。8s 送达率由于受短信长度、短信内容、通道稳定性等众多因素的影响,目前只能做到 94% 左右。

虽然当时想到了多层次异步处理,但是由于时间紧缺,没有时间完全实现。目前来看还是很有必要的,具有很高的前瞻性。

作者:纪柏涛


广而告之

易宝 CTO 陈斌翻译的新书《架构真经》正在京东和亚马逊热卖!

《架构真经》:《架构即未来》姊妹篇,硅谷大咖的干货呈现,互联网架构的50条军规。唐彬、向江旭、叶亚明、段念、吴华鹏、张瑞海、韩军、程炳皓、张云泉、余晨、李大学、霍泰稳联袂力荐。


技术
Web note ad 1