文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

转转一体化推送平台的实践

2024-11-30 11:35

关注

图片

随着各业务的不断成熟,“消息推送”类型的需求逐渐累积,我们从中总结出了如下特点:

痛点在于,每次面对新的推送,我们都需要针对上述特点,编码一个新的推送任务,而每个任务的实现过程,都伴随着重复搬砖:

上述的重复能力的实现会造成冗余代码和人力成本。此外,每个推送配置分散在各个角落,也不方便代码维护。因此,需要一个较为通用的推送平台,将这一类需求进行统一管理。

2 设计思路

整体设计思路为:将“可变的”配置化,将“不变的”系统化。

2.1 将"可变"的配置化

维护一张推送配置表,为每一个推送需求创建一条配置记录。上述背景中提到的“特点”即为“可变的”,将其抽象为配置表中的一个字段。例如:

2.2 将"不变"的系统化

将上述“重复编程”的工作内容,抽取成一套代码,沉淀为通用的系统能力。例如:

整体设计

按照上述思路,将开发后的推送工具可视化之后,当新增一个推送需求时,产品同学只需在后台添加一个配置,将推送需求填充至各配置项即可。若用户来源为HiveSQL生成,研发同学只需编写SQL语句圈定用户群,添加至用户表。接下来的工作全部交给系统,即可满足新的推送需求。一方面,将研发同学从重复搬砖中解放出来,省时省力;另一方面,所有推送配置集中交给后台管理,方便维护。

3 实现细节

3.1 速度控制

异步推送过程

分片调度


3.2 资源分配策略

无论线程池、机器数还是配置的QPS限速为多少,单时段的推送资源都有上限。因此,在面对同一时段多个配置执行推送时,必然要解决资源分配问题。主要考虑如下几种策略:

按优先级顺序

这样分配的好处在于,策略比较简单,只需配置优先级即可解决资源分配问题。但同时会引入新的问题,例如:设置优先级时应该考虑哪些因素?当优先级相同时该如何处理等。此外,优先级低的配置可能始终没机会被执行。

每个时段执行推送前,先计算当前时段各命中配置的数据量大小,按比例分配可执行的推送量。

例如:共有3个配置,总数据量分别为:40、20、20,每个时段最大推送量为:30。

时段1:命中配置为前2个,则按比例划分的数据量分别为:20、10。推送结束后,3个配置的余量分别为:20、10、20。

时段2:待推配置为3个,将余量按比例划分后的数据量为:12、6、12。推送结束后剩余:8,4,8。

时段3:将剩余数据推送完毕。

按数据量大小

按数据量分配的好处在于,可以根据推送进度,实时动态分配占比,保证每个配置都有机会推送数据,更加公平。但是策略相对复杂,每次推送前需要重新扫表计算数据量,一定程度上影响推送性能。

每个时段推送前,根据当前命中的配置数,均匀分配推送量。例如:共有3个配置,总数据量分别为:40、20、20,每个时段最大推送量为:30。

时段1:待推配置为前2个,则均匀分配的数据量分别为:15、15。推送结束后,3个配置的余量分别为:25、5、20。

时段2:待推配置为3个,将余量均分30后的推送量为:10、5、10。推送结束后,第2个配置的5条数据全部推送完毕,其他配置的余量分别为:20、10。

时段3:剩余配置均分30后的推送量:15,10。剩余配置1的5条数据。

时段4:将配置1的数据全部推送。

均匀分配

综上,对比优先级策略,均匀分配可以保证公平性,每个配置都有机会执行一定数据量的推送,此外,均匀分配有一个默认优先级:数据量越小越先推送完成,符合业务场景要求;相比按数据量策略推送,均匀分配不需要二次读表计算数据量,效率更高。因此,我们最终选择均匀分配策略。

3.3 问题解决

系统上线后,面对千万级的推送量,持续Full GC。

异常监控

主线程不断读取库表,获取用户信息,分批提交至线程池执行推送。由于执行推送的耗时大于数据读取,导致线程池任务队列累积,进而造成内存积压。

改用生产者-消费者模式

图片

维护一个固定长度的阻塞队列,队列不空时,由消费者从队列中取数并执行推送;队列不满时,由生产者扫表取数并放入队列。当生产者速度过快,即队满时,生产者线程阻塞,等待消费者推送数据完成后,队列不满时,再次唤醒。

  1. Full GC问题不复存在。
  2. 老年代使用明显下降。

4 上线效果

目前,已将上述功能可视化至业务后台,开放给多业务方。

图片

至此,每产生一个推送需求,产品同学只需在后台新建一条推送配置,并根据需要填写各配置项,即可完成推送。

图片

上线至今,已支持转转多业务方日常及活动推送,日均达百万级推送量,最高可达两千万推送量。

5 总结

本文介绍了转转一体化推送平台的实现,现已成为多业务日常推送的通用工具。未来会在诸如推送目标转化率、推送结果定向通知等方面继续完善和丰富系统能力。

关于作者

陈曦,转转订单业务研发工程师。

来源:转转技术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯