IM特点
实时性
即时消息被广泛应用于各种社交、互动领域的基本前置条件:
- 如果通过微信聊天,对方半天才收到消息,基本上就是备胎不想再聊了
- 直播时,如果主播的互动消息房间里的粉丝要等很长时间才能收到,也很难让粉丝们有积极参与的欲望
可靠性
- 不丢消息
“丢消息”是互动中让人难以接受的Bug,某些场景下可能导致业务可用性差,甚至不可用的情况。比如直播间“全员禁言”的信令消息丢失,就可能导致直播室不可控的一些情况。 - 消息不重复
消息重复不仅会对用户造成不必要的骚扰和困惑,可能还会导致比较严重的业务异常,比如直播间“送礼物”的消息由于某种原因被重复发出,处理不妥的话可能会导致用户损失。
一致性
同一条消息,在多人、多终端需要保证展现顺序的一致性。
- 单聊场景
一致性是指希望发送方的消息发送顺序和接收方的接收顺序保持一致 - 一个群的某一条消息
希望群里其他人接收到的消息顺序一致 - 同一用户的多台终端
希望发送给这个用户的消息在多台设备上也能保持一致性。
多端同步的。 收到消息一般先落db,然后写离线buffer。db全量,buffer定长或者按时间过期。redis和pika一般比较适合做离线buffer,mysql和hbase一般用于消息的db存储。
安全性
- 数据传输安全
- 数据存储安全
- 消息内容安全