【xmpp】高并发下问题猜想及解决方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cdnight/article/details/86297924

前言

以tigase作为二次开发系统,以100w活跃用户作为基本用户,对高并发问题进行猜想。

1、聊天图片,聊天文件上传问题

社交聊天中聊天记录必定有文件–图片、音频、视频、或者工作文档。
将图片、音频、视频和工作文档都统称为文档。
问题1、假定100w活跃用户每人每天上传10个文件,文件大小统一为1mb,请问保存方案如何设计。
问题1解答:根据问题一可知,服务器每天将有1000w个聊天产生的文件,每个文件是1mb,,每天上传文件总大小为:1w GB。相当于每天要加10台硬盘为1tb的文件服务器。一个月将需要添加300台硬盘1tb的服务器。一年要加3650台1tb的文件服务器。考虑到成本高昂,故无限制添加文件服务器不可取。
参考其他社交聊天软件的做法,正确处理是,服务器只保存一定时间的聊天文件,譬如,一个星期,一个月等等,而聊天文件都直接添加到终端设备上,这样文件服务器压力将大减。
手机微信的缓存动不动就几个g就是这个理了。

2、服务器需要的带宽要多少。

问题2、说明一下你如何估算服务器需要的带宽。
解答:
就拿100w活跃用户来算,
a、在1vs1聊天中,平均对半分可组成50w个二人组,按照互动模式【即,你说一句,我说一句,而不是同时说】来计算,平均一条聊天记录15个字,按照手速计算,一个人每秒手机打字3个,平均一条聊天记录5秒。
即,此种情况下,聊天记录的发送的并发为 50w/(15/3) = 10w条记录/秒。
并发为10w。按照一个250b这样计算,每秒的上行速度应该为:25mb。
b、在群组聊天情况下,假设一个群为100人,即可组成没有重复参与人员的群组1000个,考虑到有重复加群的情况,将重复加群系数设置为5,即,有群组5000个,在交互式聊天【即你一句我一句,都是看了其他人的发言之后才说话的】情景下,平均一条记录15个字,一秒打字3个,所以5秒发出一条聊天记录,考虑到有同时回应上一个发言人,即抢答的情况存在,将抢答系数定义为5,即一个群组每5秒钟5条记录,所以,5000个群一秒钟的并发为5000.可见群聊天的并发要远远低于1对1聊天。

3、请说明如何应对高峰期聊天业务的记录保存?

解答:
该问题与聊天并发息息相关。
直接拿问题2答案中计算1vs1的并发来进行前提假设。假设每条聊天记录为15个字,每秒有10w条记录。于是。。。额,离线聊天记录必然要保存在数据库里面,然而没有哪一个数据库敢说自己单机并发过万的,更不要说10w并发了。
不过,我们有办法。即使单机数据库也能撑住这个并发,假设数据库并发可达到1000每秒,那么,
在系统中添加一个redis缓存层,做一个队列,每次聊天记录进来以后,不直接发送到数据库,而是进入redis队列中,只有 满足一下任意一个条件才能入数据库 1、聊天记录在3秒内 达到5000条–批量保存到数据库,清空队列;2、聊天记录不为零,且数量小于5000条,但时间超过了3秒–批量保存到数据库,请空队列。

这样看的话,10w记录只需要200次插入操作。

4、请说明如何设计整个聊天记录的保存?

猜你喜欢

转载自blog.csdn.net/cdnight/article/details/86297924