架构学习--推拉消息学习

具体案例学习:

1.系统对单个用户通知

比如微博实现好友计数:

实现不刷新网页,计数实时变化的需求。

如果使用推送:

1.登录微博的时候,先从服务端获取最初的好友数量,getCountByType()

2.一旦有人加了你好友,服务端将好友数量加1,并对网页端进行实时推送


使用拉取:

1.每次用户刷新网页的时候,拉取最新的好友数量

使用cache进行计数存储很大程度提升系统性能


2.系统对多的通知

案例:

1.qq弹窗新闻,需要确保每个登录的用户都能收到信息

假设有一个表存放弹窗新闻,一个表存放用户信息

1.不可以使用推送,如果使用推送的方法,需要记录用户是否收到消息的状态,产生大量的冗余信息

2.在用户登录时,进行弹窗新闻拉取,并记录用户拉取时间,如果拉取时间在新闻发布时间之后,说明已经成功推送了这条新闻,不会进行拉取


2.qq右下角弹窗广告

需要对一批在线用户推送相同的弹窗广告

推送方式:用for循环对消息进行推送,需要注意机器的资源限制使用,进行推送限速控制

拉取方式:利用qq原有的keepalive在请求返回时,告诉它有消息需要拉取,然后拉取广告信息,由于keepalive请求是均匀的,于是广告拉取更加均匀,避免了系统冲击。


3.状态同步推拉方式

好友状态同步,采用推送方式

群友状态同步,由于消息风暴扩散系数过大,一半采用拉取方式

群友状态同步,还能采用按需拉取,一个用户真正进入了群聊才进行状态拉取方式,减轻服务器负担

消息风暴扩散系数一定程度上决定了技术采用推送还是拉取

 from 微信公众号:架构师之路

你可能感兴趣的:(架构学习--推拉消息学习)