首先您的业务场景是:高并发、海量用户、海量数据,那么您需要考虑以下几个问题:
1、大量用户对系统请求后,可能会造成网络带宽和Web服务器的I/O瓶颈
2、接收大量用户请求进行计算,可能会造成业务服务器和业务支撑服务器的瓶颈
3、传输层和计算层将会产生大量的数据,数据量暴增,可能会导致数据库和储存上的瓶颈
关于您提到的海量数据存储/读取问题,可以考虑以下方案:
1、由于系统的读大于写的频率,数据库架构采用了1主/多从,双主多从的策略,将读和写进行分离,并且将大量的读请求分散给多台不同的(Slave)服务器。
2、将不同的时间段作为分区的主要策略,提高对数据的读写性能。
3、一台数据库将很快无法满足大量并发,考虑使用库表散列,将数据库中的数据进行分散存储。
4、使用在海量数据中的查询功能,采用列模式的存储方式将可以有效的提高系统查询效率。
笔者有IM项目三年经验。
推荐一种方案: 使用socket.io 实现消息实时推送客户端,同时推送kafka消息队列,服务端消费并离线存储。