写扩散
用户发消息,气球池,泡泡池等消息池同步写入消息
气球查询走气球池,泡泡查询走泡泡池
相当于数据写入时维护更多的数据池更新多数据源
优点:
- 数据查询简单,主要是写入维护控制逻辑
- 不同的数据池独立可支持定制化查询,推送功能
- 原消息池数据丢失不影响子池数据,气球和泡泡可正常匹配
缺点:
- 空间换时间,浪费存储空间
- 数据实时性差
- 写扩散需要mq等中间件,或者双写引入分布式事务等提高架构复杂度
写扩散适用于写少读多的场景
微信的群聊是写扩散;
读扩散
用户发消息,所有消息存放在同一个池子
查询需要的数据根据条件筛选获取
相当于写入时简单,查询时需要关联表,或者内存排序过滤
优点:
- 数据实时性高
- 读少写多节省存储成本
- 不需要引入其他中间件
缺点:
- 读数据存在热点问题
- 数据读取量大存在慢查询
读扩散适用于写多读少的场景
系统消息通知是读扩散,广播消息,所有人读取符合条件的消息,如注册之后的消息;