动态通知方案

概述

“动态通知” 是指在实时或运行时通知或提醒系统的方式。这种通知可以是基于事件、数据变化、用户行为或其他触发条件的。动态通知在计算机科学和信息技术领域中非常常见,用于各种应用,包括通信、监控、安全、用户界面等。

动态通知可以采用不同的方式和机制,主要包括:

  • Push通知:这是一种实时通知方式,其中数据或信息被主动推送到接收方。常见的例子包括移动应用中的推送通知、实时聊天消息等。
  • Pull通知:在这种方式下,接收方定期轮询或请求来获取更新或信息。这通常涉及定期检查服务器或资源的状态以获取新数据。

Push通知

Push方式通常是基于观察者模式(Observer Pattern)实现的。在这种方式下,有一个被观察者(通常称为主题)和多个观察者。当主题的状态发生变化时,它会主动通知所有观察者,将更新推送给它们。

例如:微博动态推送

image-20231012104629970
  • 优点:
    • 有很好的实时性
  • 缺点:
    • 需要在服务器存数据,无法保证无状态
    • 粉丝量太多会引发写扩散的问题(大量动态队列持久化造成磁盘高IO)

写扩散问题解决:

  • 设置上限,例如微信好友5000个
  • 限流策略,X分钟内完成消息发布
  • 优化存储策略,采用NoSQL或大数据方案

Pull通知

Pull方式通常是通过轮询或请求的方式实现的。在这种方式下,观察者定期轮询被观察者的状态或在需要时主动请求更新。

image-20231012104921357

  • 优点:
    • 能做到无状态服务器
  • 缺点:
    • 实时性较差
    • 大量请求会导致读扩散问题,搞垮服务器

读扩散问题解决:

  • MQ削峰填谷,超长队列直接拒绝
  • 增加轮询间隔,减少请求次数
  • 服务端增加缓存,优化查询效率
  • 增加验证码,分散时间,减少机器人刷票