为什么PUSH推送要经常背锅?
前言
只有光头才能变强。
文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y
自从做了推送以后,每隔一段时间就发现有各大的公司推送事故出现。



你问我做开发的慌不慌,我当然慌得一批了。
为什么经常会有推送事故
为什么会经常出现类似的事故呢?我认为最主要的原因是:预发和线上的环境是同一套。
众所周知,我们的系统都有几套的环境(比如说本地/线下/预发/线上 环境),其中大多数公司的预发和线上环境数据库是同一套的,只是预发环境调用的是预发环境的接口,线上环境调用的是线上环境的接口而已。
推送这种系统的线上和预发环境其实没多大的区别,因为在底层是调用外部的接口来实现发送的,所以预发和线上环境其实调的都是同一个接口。

科普一下推送是怎么做的
之前写过一篇关于推送的文章,也算是科普了一把什么是推送消息,有兴趣的同学可以去看看: 三歪带你了解什么是Push消息推送。这次在上面的文章基础上补全一下。
Push推送消息能够在你手机闭屏时(即便你没有打开APP),通过通知来给你推送信息,是一种能够直接触达用户的消息推送
要给用户下发消息,我们得维护APP 客户端和服务端的「长连接心跳」。这个长连接心跳如果由我们自行来维护,难度会很大,绝大部分的公司不会自建推送服务。
目前我们手机类型分为两种:安卓和iOS。
- iOS我们默认走的是官方推送的渠道APNS。iOS 在系统层面与苹果 APNs(Apple Push Notification service)服务器建立连接,系统收到 APNs 服务器消息后会帮我们转发到相应的APP上
- 安卓由于Google在国内访问不稳定,在国内暂未统一掉推送服务。目前更多的是众多的手机厂商在其定制的系统中也内置了推送功能,如小米、华为等。由于接入成本的问题,也出现了大量的第三方推送服务提供商,比如个推、极光、友盟。
- 工信部牵头成立的“安卓统一推送联盟”还在期待中
总结:
- iOS端我们更多用的是APNs服务器下发推送消息
- 安卓端由于接入成本的问题,更多的是接入各个第三方推送服务提供商,第三方推送服务提供商也会接入对应的手机厂商来实现对消息的下发
我们做了什么预防推送事故?
在大多数情况下,推送事故往往是「运营」的推送导致的。运营要推送消息给用户,首先需要圈选一个人群去推送。
人群量需要管控:我们在圈选的时候,如果运营圈定的人数大于一个阈值,我们会走邮箱让主管确认是否需要圈选这么一个大的人群去推送。
这块有两个目的:
- 首先我们是认为推送的人群应该是精细化的,什么标签的人群应该收到什么的推送。不应该圈定一个庞大的人群去推送同一条文案的消息(新闻APP除外)。
- 即便出了事故,也只是一部分用户能收到,而不是全体用户。
在我们的系统是没有全体用户推送的。

在运营圈定人群后,我们会有单独的测试功能去「测试单个用户」是否能正常下发消息,文案链接是否存在问题。
这一个步骤是必须要做的,给用户发出的消息,首先要经过自己的校验。如果确认链接和文案都无问题后,则提交任务,走工单审批后才能发送。

如果在启动之后发现文案/链接存在问题,还可以拦截剩余未发的消息。

针对于通知类的消息(技术方推送),我们在预发环境下配置了「白名单」才能收到消息。
线上消息有「去重」的逻辑:
- 在某段时间内,过滤掉重复消息
- 运营类消息推送(圈定人群的方式去下发消息)同一个用户需要相隔一段时间才能下发一次。

虽然说,我们制定了很多的规则去尽量避免事故的发生,但不得不说推送还是一个容易出现事故的功能。
我的牛逼已经吹完了,如果某天发现我的推送出了事故,不要@我,当没见过这篇文章就好。
各类知识点总结
下面的文章都有对应的原创精美PDF,在持续更新中,可以来找我催更~
- 92页的Mybatis
- 129页的多线程
- 141页的Servlet
- 158页的JSP
- 76页的集合
- 64页的JDBC
- 105页的数据结构和算法
- Spring家族
- Hibernate
- AJAX
- 监听器和过滤器
- ......
涵盖Java后端所有知识点的开源项目(已有7 K star):https://github.com/ZhongFuCheng3y/3y
如果大家想要实时关注我更新的文章以及分享的干货的话,微信搜索Java3y。
为什么PUSH推送要经常背锅?的更多相关文章
- iPhone的Push(推送通知)功能原理浅析
第一部分:Push原理(以下绝大多数内容参考自.图片来自iPhone OS Reference Library)机制简介Push 的工作机制可以简单的概括为下图图中,Provider是指某个iPhon ...
- 58同城高性能移动Push推送平台架构演进之路
本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需要,原理和方案对比:移动Push推送第一阶段(单平台)架构如何设计:移动Push推送典型性能问 ...
- 转: 58同城高性能移动Push推送平台架构演进之路
转: http://geek.csdn.net/news/detail/58738 文/孙玄 本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段,并介绍了什么是移动Push推送,为什么需 ...
- 移动端Push推送
移动端Push推送 移动端开发逃不掉要做推送,这里给出服务端一种省时省力的解决方案. iOS:PushSharp.Apple.苹果有自己的推送服务,我们按照规则推送数据就好.这里我选取PushShar ...
- 浅谈push推送的一点感受
在手机已成为生活必不可分的一部分,push服务伴随而来.ios的apns,android随着谷歌退出中国市场,各家在android的推送不断展开.有厂商的推送,如小米.华为.魅族.oppo等,还有中间 ...
- push推送服务设计
PUSH系统架构设计简述 一.网络传输协议的选择 PUSH系统协议选取: UDP协议实时性更好,但是如何处理安全可靠的传输并且处理不同客户端之间的消息交互是个难题,实现起来过于复杂,那就非TCP协议莫 ...
- Android push推送消息到达成功率优化
Android push推送消息到达成功率优化 问题:server向client发送消息.未考虑client是否在线,这种消息到达率是非常低的. 第一次优化:使用server离线缓存数据,推断假设cl ...
- Push推送原理
Push 的工作机制 APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. 推送可以分为三个阶段. 第一阶段:.net应用程 ...
- Android应用实现Push推送消息原理
本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我 们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅 ...
随机推荐
- RabbitMQ 消息队列入门
文档 入门 主要的内容:one two three four five six seven 前言 中间件 消息队列 异步处理,注册完发短信 应用解耦,订单接口调用扣库存接口,失败了怎么办? 流量削峰, ...
- Java前台传值至后台中文乱码
记一次常见问题 今天导入了一个网上下载的项目,运行后发现,前台传值 到Servlet,Servlet保存至数据库,数据库保存的中文数据出现乱码,检查了一下表中的编码是utf8没错. 输出测试了一下 原 ...
- DeepinV20系统文件管理器右键发送至为知笔记
1. 创作背景 昨天在深度系统上做了一个打开文件管理器选择文件右键发送文本至博客园的插件. 这个插件对于我自己来说是及其方便的东西,平时的学习积累,工作经验或者生活感悟,随手记下之后,就能够轻松发送出 ...
- 数值计算方法实验之Hermite 多项式插值 (Python 代码)
一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...
- 认证与授权】Spring Security系列之认证流程解析
上面我们一起开始了Spring Security的初体验,并通过简单的配置甚至零配置就可以完成一个简单的认证流程.可能我们都有很大的疑惑,这中间到底发生了什么,为什么简单的配置就可以完成一个认证流程啊 ...
- WANNACRY病毒中的加密技术分析
WANNACRY病毒中的加密技术分析 2019/11/6 16:56:46 分析WANNACRY病毒中的加解密技术的应用.分析内容包括但不限于:对称密码技术和公钥密码技术的作用:受害者支付赎金后就会恢 ...
- Linux 软链接和硬链接
系统链接文件 文件有文件名和数据,在Linux上被分成两个部分:用户数据(user data)与元数据(metadata) 用户数据:文件数据块(data block),数据块是记录文件真实内容的地方 ...
- Intellij IDEA 使用Spring-boot-devTools
转载地址:https://blog.csdn.net/u013938484/article/details/77541050 转载于:https://blog.51cto.com/881206524/ ...
- JavaSE——装饰设计模式+简单加密解密工程
2019独角兽企业重金招聘Python工程师标准>>> 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础 ...
- Ngxin 开启CDN 日志获取不了真实IP的解决办法。
nginx配置里面在http{ 后加入如下两行代码即可: set_real_ip_from 0.0.0.0/0;real_ip_header X-Forwarded-For; 重启nginx生效. 注 ...