业界动态
如何设计和实现微信公众号关注后48小时内定时给粉丝自动推送发送图文图片或文本消息?
2024-11-14 21:48

很多人可能会留意到, 关注了公众号之后,隔一段时间, 公众号会推送消息出来,打开消息后发现这些消息看起来不像人工发送的,应该是设计好的一套关注后的定时推送机制, 从而来达到获客转化的目的.

如何设计和实现微信公众号关注后48小时内定时给粉丝自动推送发送图文图片或文本消息?

我司微星极光的一个重磅产品, 公众号激活宝, 目前就以第三方平台的形式给各个服务号公众号提供了这样的赋能.

效果如下图

本文主要介绍如何实现这种推送机制的技术方案

定时调度数据库轮询

这种是很容易想到方案, 有点是简单粗暴, 缺点也同样明显, 效率低下, 适合在用户量很少的时候,顶一顶. 一般草根团队在PoC阶段凑和用的, 我们微信极光公众号激活宝这个产品, 开发这个功能的时候, 已经积累了非常多的用户量, 这里显然不合适, 所以pass掉了

使用golang defer timmer

他们第三方平台的后台语言使用Golang, 这个也是一开始尝试过的方案, 非常灵巧, 见效快.

但是这个方案有2个缺点

所以虽然实现起来超级简单, 但可用性没达标, 最后pass

使用Linux时间轮

golang defer timmer的底层是linux时间轮, 为了解决分布式的本质问题, 研究了时间轮的实现.

最简单的时间轮, 可以拿钟表比喻, 比如有的任务固定在15分钟的时候触发, 那么这些任务就排队盯着15分钟这个维度, 等着时间点到, 就触发链表挨个调用函数, 如下图

上面的简单模型有一个问题, 就是刻度是均匀的, 而且范围也有限, 而实际情况中呢, 我们会有不同的刻度(时间粒度)计时, 而且时间范围跨度也会很大.这种情况下像是个水表, 不同粒度有着不同的触发周期.时间以固定 tick 递增,而当前时间指针则也依次递增,如果发现当前指针的位置可以确定为一个注册的定时器,就触发其注册的回调函数.

linux的时间轮数据结构,如下, 内核的定时器本质上是 Single-Shot Timer,如果想成为 Repeating Timer,可以在注册的回调函数中再次的注册自己

结论, 时间轮是一切定时任务的核心底层逻辑, 但是对于应用层来说, 显然用起来还是不够方便, 应该有更易于使用的形式存在.

使用AWS的SQS消息队列服务

AWS的SQS提供delay的支持, 非常完美得解决了这个问题,

接口调用也很简单

有点是调用简单, 一个月有100万条消息的免费额度,

缺点是超过配额之后, 费用还是挺贵的.

使用redis的redis key notification功能

Redis在2.8版本以后, 支持了一个特性, 叫Keyspace Notifications.

通过Pub/Sub的机制, 设置TTL, 然后另外的进程来监控Expired事件, 从而达到delay message的目的.

值得注意的是, 官方文档有这样的描述.

Because Redis Pub/Sub is fire and forget currently there is no way to use this feature if your application demands reliable notification of events, that is, if your Pub/Sub client disconnects, and reconnects later, all the events delivered during the time the client was disconnected are lost.

Redis提供的这个事件回调,并不承诺可靠.

使用RabbitMq实现延时队列

AMQP协议和RabbitMQ队列本身没有直接支持延迟队列功能,但是可以通过以下特性模拟出延迟队列的功能.

简单而言就是对每条消息设置TTL, TTL就是延迟的秒数. 然后消息到期后, 进入死信队列,

死信队列里面再进行规则转发.

原理就是这么个原理, 这个需求挺通用的, RabbitMq官方也给出了一个插件.

使用起来在header里面加上延迟的秒数就行

在实际的过程中呢, 我们最先使用的是AWS的SQS, 后来业务起来了,发现免费的100万一个月不够用, bill的账单数字还挺吓人的, 于是改成自研的方案.

因为历史积累, 我们重度使用redis, 于是入坑了redis的keyspace notifications的方案, sofar so good, 直到有2个问题暴露出来,

一个就是官方文档提到的, reconnect的之后, 不保证可靠性, 这个监控显示有概率非常小发生, 不到十万分之一, 对比了机器的环境, 应该是和网络抖动有关, 这个小概率的修复, 目前我们吞下了.

第二个问题就是因为redis是内存型的, 如果有一些公众号粉突然爆粉的时候, 会导致redis的key暴增, 进而导致内存暴增. 而redis并不支持弹性伸缩, 导致一度非常蛋疼.经常收到告警, 半夜爬起来手工处理.

第二个问题后来通过keydb来解决了, keydb 里面有个flash功能, 非常切合我们的业务, 业务其实我们并不需要很高的内存, 把这些key扔到flash disk里面, 可以大大缓解内容压力, 从而只需要加大磁盘容量, 减少redis的实例数目, 节省了很大的成本. 而key的的通知回调, 时间其实并不敏感, 我们的推送迟个几秒钟, 就算迟发1分钟, 其实也好好. 只要不是不发就行, 于是这个方案目前在成本和可靠性方面, 提供一个最优解.

    以上就是本篇文章【如何设计和实现微信公众号关注后48小时内定时给粉丝自动推送发送图文图片或文本消息?】的全部内容了,欢迎阅览 ! 文章地址:http://houdi.cs-ej.cn/news/777.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 成事e家移动站 http://houdi.cs-ej.cn/mobile/ , 查看更多   
最新新闻
励志的短篇笑话故事
短篇的故事我们都不需要花费很多的时间去看,那么短篇的笑话故事有哪些呢?下面是小编给大家整理的励志的短篇笑话故事,供大家参
如何设计和实现微信公众号关注后48小时内定时给粉丝自动推送发送图文图片或文本消息?
很多人可能会留意到, 关注了公众号之后,隔一段时间, 公众号会推送消息出来,打开消息后发现这些消息看起来不像人工发送的,应该是
11位79年出生的女明星,你最喜欢哪一个(当然是高圆圆)
1.陈乔恩陈乔恩,1979年4月4日出生于台湾省新竹县竹北市,华语影视女演员、主持人、歌手,2001年9月23日,陈乔恩正式出道,并于
2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装
2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装2024美图秀秀下载安装
你想知道的热梗合集,它来啦!
嘻嘻,网络热梗小雷达——团团上线咯近期热梗热词特别篇新鲜出炉!宝子们快来和团团一起围观吧5G冲浪走起!一谐音梗#达咩网上冲
从四人作品管窥网络诗词不同向度的新变
互联网在中国兴起,应在2000年前后。而所谓网络诗词,即是指以互联网为发表载体的原创诗词,到今天有大约15年历史。与传统纸媒相
抖音粉丝等级价格对照表最新的是什么?粉丝等级怎么快速增长的?
在抖音平台上,粉丝数量和等级是衡量账号影响力的重要指标。许多抖音用户对粉丝等级的价格以及如何快速增长粉丝等级充满好奇。一
如何让百度只收录网站描述内容 如何让百度收录自己的网站
理论上是如果你没有在文件里设置禁止百度蜘蛛爬行的话,百度会自动收录的。但这个收录可能会等很久。所以一般情况下,我们都是采
2021年山东枣庄三支一扶考试笔试成绩查询入口 笔试成绩查询时间
点击进入2021年枣庄三支一扶笔试成绩查询入口【预计10月中旬发布】2021山东三支一扶面试形式什么样?山东三支一扶面试大部分采用
测试行业资讯测试行业资讯测试行业资讯
测试行业资讯测试行业资讯测试行业资讯测试行业资讯测试行业资讯测试行业资讯
本企业新闻