基于阿里云搭建全量push系统

简介: push又称消息推送、消息触达。叫法有很多但目的只有一个,就是通过各种渠道或方式将指定内容告知到指定用户。所以我们也可以称之为通知。

Push:有主动推的意思,实际上就是一个服务端主动推送消息到用户App的一个系统。“苹果之父”乔布斯曾说:“根据大众的需要去设计产品其实是非常难的。因为在很多情况下,人们并不知道自己想要什么,所以需要你去展示给他看。”我感觉这句话用在推送上也是可行的。

今天主要从新闻app产品类型来介绍push系统的搭建与实践。

1.png

2.png

  • 静态全量库,非实时更新,分布式提取
  • 优先级排序(用户活跃度),保证用户体验
  • 常备部分资源,保证及时响应
  • 动态扩容,减少闲置资源

系统整体架构

3.jpg

采用阿里云产品的存储方案

4.jpg

机器复用和阿里云ecs的动态扩容

5.jpg

6.jpg

多播或群发
由兴趣,关系,LBS等部门针对不同人群做的群发push

难点 计算慢:特征工程(小时),特征匹配(分钟),用户设备更新
大批量:任务多,互相挤压,高低优先
频繁:下发条数太多,影响用户体验(push太多)
厂商通道限额

应对
数据架构:上面已经提到过的,hbase+spark
动态扩容:关键指标监控,自动触发扩缩容
混排:特征匹配混排,CTR试投,控制单个用户下发条数
限流器:厂商通道限制
物理隔离:分为重要通道和普通通道

混排与试投

7.jpg

厂商通道限额问题
总配额限制:额度熔断
QPS限制:限流器
单设备配额限制
偶发rt抖动:自动扩容,熔断

三种分布式限流器

8.jpg

短对点/长链接
与APP端的TCP长连接
用于push,IM,配置下发等多类功能

难点 :
高并发连接数(千万级)
低延时需求(消息下发时间短)
大消息量(X十亿级消息数)
高到达率要求:连接稳定,分运营商机房,动态均衡算法
增加在线时长:心跳算法

长连接服务端基本逻辑

9.jpg

批量发送

10.jpg

连接和断开

11.jpg

目录
相关文章
SwiftUI—如何制作循环动画并指定动画的循环次数
SwiftUI—如何制作循环动画并指定动画的循环次数
794 0
SwiftUI—如何制作循环动画并指定动画的循环次数
|
算法
m基于OFDM系统的PAPR性能matlab仿真,对比LFDMA,IFDMA,DFDMA
在MATLAB 2022a中,进行了OFDM、LFDMA、IFDMA和DFDMA的PAPR仿真,显示了两种图像结果。PAPR是OFDM系统中的关键指标,影响功率放大器效率。LFDMA通过数据分配减少峰值,IFDMA利用交织子载波,DFDMA则通过时域分布降低峰值。MATLAB程序执行包括数据频域映射、子载波分配、时域转换、脉冲整形和PAPR计算,并根据不同模式和子载波策略保存结果。程序还绘制了PAPR的累积分布函数(CCDF)图,用于比较不同方法的效果。
242 5
|
9月前
|
搜索推荐 数据安全/隐私保护 UED
产品经理-B 端与C端
B端与C端是IT互联网产品经理的类型划分,分别面向企业和个人消费者。C端产品如微信、淘宝,注重用户体验和快速迭代;B端产品如CRM系统、ERP软件,强调功能复杂性和定制化服务。此外,还有G端产品,主要服务于政府机构,注重数据安全和合规性。产品经理起源于20世纪20年代末的美国宝洁公司,随着互联网的发展,该角色在IT领域变得愈加重要。
1190 12
|
10月前
|
Java 应用服务中间件
Process exited with an error: 1 (Exit value: 1) 问题处理
本文介绍了在本地启动项目时遇到“Process exited with an error: 1”错误的解决过程。作者首先排除了配置文件修改的影响,通过分析错误信息,推测为端口占用问题,并使用 `netstat -ano` 命令检查端口占用情况,最终通过终止占用端口的进程解决了问题。
|
缓存 Prometheus 监控
【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目业务指标监控
Prometheus+Grafana监控SpringBoot项目业务指标监控 1、SpringBoot项目配置 2、prometheus添加配置 3、Grafana配置
【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目业务指标监控
|
消息中间件 监控 网络协议
消息推送分类:推动(Push)模式和拉动(Pull)模式
消息推送分类:推动(Push)模式和拉动(Pull)模式
619 0
|
存储 安全 Linux
|
Java
Java Character 类详解
`Character` 类是 Java 中的一个封装类,位于 `java.lang` 包中,主要用于处理单个字符。它是一个最终类,提供了多种静态方法来检查和操作字符属性,如判断字符是否为字母、数字或空格,以及转换字符的大小写等。此外,`Character` 类还支持自动装箱和拆箱,简化了 `char` 和 `Character` 之间的转换。以下是一些示例代码,展示了如何使用 `Character` 类的方法来检查字符属性和执行字符转换。掌握 `Character` 类的用法有助于更高效地处理字符数据。
509 2
|
数据采集 关系型数据库 MySQL
dts同步问题之同步冲突
dts同步问题之同步冲突
333 5
|
数据安全/隐私保护 Windows
全网最新超详细的【Axure】Axure RP 10的下载、安装、中文字体、授权【2023年】
全网最新超详细的【Axure】Axure RP 10的下载、安装、中文字体、授权【2023年】
1728 0
全网最新超详细的【Axure】Axure RP 10的下载、安装、中文字体、授权【2023年】