前言
场景说明
- 短信网关(接收客户提交短信,接收通道短信回执,转发回执给客户...)
- 计费服务(短信计费,购买套餐...)
- 短信通道(短信提交到通道...)
痛点
- 批量提交营销类短信,如客户一次提交10w-20w条短信
- 短信实时计费,延迟问题
- 通道限流控制
- 通知回执延时问题
组件
流程如下
痛点解决方案
- 批量提交短信
这里仅针对情况3来说明,首先将用户信息存入redis(先读缓存,再读库),减少在验证与鉴权时对数据库的查询压力,校验通过的消息开始写入收单队列,并记录日志(注意日志一定要异步写入),队列使用的redis队列,以目前的业务承载能力,是完全没有问题的,收单接口的qps可以通过分布式来提升,这个得益于k8s容器伸缩,平时我们一般是5个pod在运行(相当于负载5个应用),在节假日高峰期可以起10个pod,这里性能的瓶颈主要集中在redis队列,如果有更高要求可以尝试换成rabbitmq,kafka等
- mysql批量持久化
- 短信实时计费,延迟问题
- 通道限流控制
- 通知回执延时问题
List<Task> tasks = new List<Task>();
for (int i = 0; i < 10; i++)
{
tasks.Add(Task.Run(async () =>{...}));
}
await Task.WhenAll(tasks);
- 注意事项
- 推荐我自己写的一个Redis消息队列中间件InitQ,操作简单可以下载的玩玩
https://github.com/wmowm/initq