群发时如何保证不重发?

2017-11-20 17:21:50 +08:00
 sunnyfinger

最近项目有做群发的需求,要求根据标签筛选人群后发送,需要避免重复发送。每次发送量在 3000w 左右。

由于是根据筛选条件筛选后再做发送的,所以如果是实时分页查询然后进 MQ 的话可能会有重复,比如: 根据某个标签循环分页查询,同时有管理员对人群做打标操作,结果分页乱掉,有些已经被查询过的人可能会被“挤”到后续分页。

这种情况有什么比较好的规避方法? 这个量级是不是可以先把人 id+发送任务 id 做唯一索引做个单独存储 相当于做个快照,然后再对这份“死”数据分页查询?

看微信公众号后台也有根据标签做群发的功能,不知道是咋实现的?

4484 次点击
所在节点    DevOps
8 条回复
RainFinder
2017-11-20 17:38:02 +08:00
发完标记个状态不就好了
sunnyfinger
2017-11-20 17:43:11 +08:00
@RainFinder 嗯,是可以的。主要担心这些数据会比较多,不过好像也没什么太好的办法- -
daemonghost
2017-11-20 17:59:23 +08:00
@sunnyfinger 试试用 redis 的 set 来去重
owenliang
2017-11-20 18:04:28 +08:00
思路不对。

发送方要保障的是必达。
接收方要保障的是幂等。

发动方为了必达,一定会重试,at least once。

如果接收方直接是客户端,那么就客户端去重。
如果接收方是一个信箱,那么就数据库去重。
yougeren
2017-11-20 18:06:23 +08:00
bitmap,haperloglog
LNAmp
2017-11-20 19:24:51 +08:00
@owenliang 同意
owenliang
2017-11-20 20:03:15 +08:00
从选型角度来说,hbase 适合 scan 场景,可以按 timestamp 区间 scan,只推送某个时间点之前的用户,具体自己学习 hbase。
sunnyfinger
2017-11-21 17:29:28 +08:00
@owenliang 嗯,这样按职责划分就很清晰了。本来想发送端去取的时候就尽量规避可能重复查询的情况,这样看来意义可能也不是很大,还是需要有个唯一 messageId 去区分才是

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/407984

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX