引言
闲鱼消息1.0:业务初创期,最小化可用
消息存储:会话、摘要、消息
消息同步:推、拉
消息通道:长连接、厂商推送
数据模型与底层存储依赖淘系私信体系进行建设;
消息数据获取上,客户端全量从服务端拉取消息数据
通讯协议使用来往SDK及mtop
闲鱼消息2.0:用户量高增速,重建闲鱼消息系统
当用户需要查看消息数据时,数据拉取成功与否取决于网络、数据访问速度,偶发性的造成卡顿、白屏
中心化的数据存储,读远大于写,高并发下,服务端负载过大 比如1W个用户同时在线聊天,按照当前架构并发拉取全量消息,估算5Wqps. 不妨假设,同时在线聊天用户数10W时,对服务端压力可想而知
客户端建立数据库,存储消息数据 当消息数据存储在本地设备上,消息同步从全量拉取优化为全量+增量同步结合的模式。增量同步:客户端存储消息位点信息,通过与服务端最新位点比较,仅同步增量消息;全量同步:当用户卸载重装或位点gap过大时,客户端全量拉取历史消息数据,进行端上数据重建
服务端建设个人消息域环(收件箱模型),以和客户端进行增量数据同步。同时,消息1.0版本存在的读多写少的问题,通过个人域环的写扩散来平衡读写压力
当客户端online时,接收到推送的消息位点=当前端上域版本+1,本地消息数据库merge即可
当客户端offline时,仅进行离线推送通知,当用户重新上线时,进行数据同步,由服务端判断触发增量同步还是全量同步
如果域环版本差值小于阀值,增量同步后,进行本地消息数据库merge
当域环版本差值大于阀值,进行全量消息拉取,做端上数据重建
闲鱼消息3.0:业务快速发展下,系统稳定性保障
IM消息需要极高的稳定性保证,其消息及摘要继续使用mysql存储
营销消息存储周期短,稳定性要求低于IM,采用Lindorm存储。Lindorm是一种多模型的云原生数据库服务,具有成本低、自定义TTL、容量横向扩展等优势
域环做实例级别隔离,保证IM域环的容量不会被其他消息占用,从而影响到消息同步
我们设计了一套指令集,通过约定指令协议,服务端向指定用户下发指令,客户端执行对应指令进行异常数据上报,提高排查效率
扩展了强制全量同步、数据校正等指令,定向修复用户消息数据问题,相较以往出现严重bug只能让用户卸载重装解决,这种方式显然对用户是更友好的
庞大的用户体量下,追求极致的NPS
部分用户对产品功能有较强烈的诉求,诸如消息搜索、分组等
大部分用户对发送消息过程中的违规问题难以理解
仍有较多舆情反馈消息收不到或延迟
本文暂时没有评论,来添加一个吧(●'◡'●)