只有光头才能变强。git
文本已收录至个人GitHub精选文章,欢迎Star:github.com/ZhongFuChen…github
自从作了推送之后,每隔一段时间就发现有各大的公司推送事故出现。web
你问我作开发的慌不慌,我固然慌得一批了。算法
为何会常常出现相似的事故呢?我认为最主要的缘由是:预发和线上的环境是同一套。数据库
众所周知,咱们的系统都有几套的环境(好比说本地/线下/预发/线上 环境),其中大多数公司的预发和线上环境数据库是同一套的,只是预发环境调用的是预发环境的接口,线上环境调用的是线上环境的接口而已。后端
推送这种系统的线上和预发环境其实没多大的区别,由于在底层是调用外部的接口来实现发送的,因此预发和线上环境其实调的都是同一个接口。服务器
以前写过一篇关于推送的文章,也算是科普了一把什么是推送消息,有兴趣的同窗能够去看看: 三歪带你了解什么是Push消息推送。此次在上面的文章基础上补全一下。微信
Push推送消息可以在你手机闭屏时(即使你没有打开APP),经过通知来给你推送信息,是一种可以直接触达用户的消息推送数据结构
要给用户下发消息,咱们得维护APP 客户端和服务端的「长链接心跳」。这个长链接心跳若是由咱们自行来维护,难度会很大,绝大部分的公司不会自建推送服务。多线程
目前咱们手机类型分为两种:安卓和iOS。
总结:
在大多数状况下,推送事故每每是「运营」的推送致使的。运营要推送消息给用户,首先须要圈选一我的群去推送。
人群量须要管控:咱们在圈选的时候,若是运营圈定的人数大于一个阈值,咱们会走邮箱让主管确认是否须要圈选这么一个大的人群去推送。
这块有两个目的:
在咱们的系统是没有全体用户推送的。
在运营圈定人群后,咱们会有单独的测试功能去「测试单个用户」是否能正常下发消息,文案连接是否存在问题。
这一个步骤是必需要作的,给用户发出的消息,首先要通过本身的校验。若是确认连接和文案都无问题后,则提交任务,走工单审批后才能发送。
若是在启动以后发现文案/连接存在问题,还能够拦截剩余未发的消息。
针对于通知类的消息(技术方推送),咱们在预发环境下配置了「白名单」才能收到消息。
线上消息有「去重」的逻辑:
虽说,咱们制定了不少的规则去尽可能避免事故的发生,但不得不说推送仍是一个容易出现事故的功能。
个人牛逼已经吹完了,若是某天发现个人推送出了事故,不要@我,当没见过这篇文章就好。
下面的文章都有对应的原创精美PDF,在持续更新中,能够来找我催更~
若是你们想要实时关注我更新的文章以及分享的干货的话,微信搜索Java3y。
PDF文档的内容均为手打,有任何的不懂均可以直接来问我(公众号有个人联系方式)。