如何实现聊天软件在使用过程中达到高并发性能要求?
一、解决数据库高并发查询慢的瓶颈
1.弃用查询速度一般的MYSQL,选用查询速度超快的NOSQL数据库MongoDB。
2.读写分离,写时写到主数据库,实时同步至多台从数据库,查询时选择最闲的从数据库,从而使查询压力分散到多台。
3.分库分表,比如每一个群组是一个表,避免产生超大数据量的表,使单次查询速度保持在可控范围。
4.冷热分离,比如单聊的数据表,可以设置热表保存数据的日期范围,半年内的数据保存到热表,半年以前的数据保存到冷表,避免数据量过于巨大。
5.最热缓存,对于最常用的热点数据复制到Redis内存中进行查询,速度极快,避免数据库高频次的重复查询。
二、解决聊天通讯的高并发瓶颈
1.采用基于Protobuf的二进制字节格式,包极小,还支持压缩,使单次通讯的流量压缩至最低。
2.采用为高并发而生的AIO框架JAVA,使单台的并发能力大幅提高,单台并发最高可达到50W左右。
3.采用自研的聊天集群软件使聊天的压力由单台分散到多台,比如A登陆在服务器A,B登陆在服务器B,A给B发消息,服务器A收到,查询内存,得知B登录在服务器B上,于是转发给B服务器,服务器B就会通过与B的长连接把消息发给B;群聊也类似,A和B在同一群组,A在群里发了一条消息,查询内存,得知在线的群成员列表,然后给所有在线成员一一发送这条消息,注意以单聊的形式发,这样其他成员便不会重复转发这条消息。