MyException - 我的异常网
当前位置:我的异常网» VC/MFC » 实时处理几万个用户的事物处理,怎么设计?具体请进

实时处理几万个用户的事物处理,怎么设计?具体请进

www.MyException.Cn  网友分享于:2015-08-26  浏览:9次
实时处理几万个用户的事物处理,如何设计?具体请进
需要设计设计一个方案处理在线几万、甚至几十万用户的log,每个用户的log需要在线保存。

1、我设想内存处理每个用户的log,访问结束后写入一个log文件,可是如果并发用户时间久了,内存就爆了!每个用户的log时间太长,数据量也很大的。
2、第二种方案,我设想用每个用户一个文件的方式,这样就有几万甚至几十万个file被打开,等每个用户访问结束再统一把每个用户的log写入一个统一的log里面,删除临时的file。
3、。。。。。期待各位dx支招。。。。

各位大侠帮忙看看有否好的实现方案?请指点。谢谢了!

------解决方案--------------------
mark。这个很有挑战性
------解决方案--------------------
首先每个用户写不同的文件,每次来了数据就打开文件,写入,再关闭,这样数据可以比较实时保存,而不是最后才写入,.

------解决方案--------------------
这种可以用数据库来操作....
------解决方案--------------------
可以参考log4cpp
------解决方案--------------------
如果你的处理量相当高,并且非常要求处理速度,那么首先你需要一个服务器或者小型机。
如果你想要在内存中高速处理这些数据,那就用链表吧,刚开始的时候自建堆申请足够多大小相同的小内存区块,每次建立用户就建立一个链表头节点,不断的链接增加小内存区块,完成一个事物后把这些内存回收(不是释放!),然后写入数据库。
如果内存空间不足,那么你可以使用类似于操作系统的页交换文件系统做虚拟内存,这个说起来比较复杂,你可以找本操作系统的书。
如果你对实时处理速度没有也别要求,数据库建立个临时表就行了,每次操作对这些临时表做插入删除和查询操作,不就ok了么。。
------解决方案--------------------
探讨
感谢楼上dx指点!

我对实时性要求还是满高的,就是实时处理的。现在由于并发用户太多,如果单纯依靠内存,多半是要耗尽内存的,就爆了。所以搞得我很紧张,以前听说采用内存处理,别人都爆了,我想好好的重新设计一个方案,能够满足实时以及性能效率的要求。

请各位大侠继续指点。

谢谢!

------解决方案--------------------
我不知道用户连接的时候具体在做些什么,还是先拿出我的方案吧.

设计一套用户需要记录点的触发事件,每个用户触发记录事件后,将事件放入一个队列中,
在队列的出口处设计一个分发机制,可以分给不同的程序处理,也可以分给不同的机子.
------解决方案--------------------
人力有时而尽,计算机也一样,在只有普通网络连接的普通PC平台上有些高并发、高通量的要求基本不可能实现,说句难听话,否则那些昂贵的服务器和服务器软件卖给谁去?
------解决方案--------------------
这样的要求太高了,楼主应该做到把任务分解。首先这样的要求对计算机就有很高的要求,如果使用普通pc做的话,最好是要多台设备组成,否则很难搞定
------解决方案--------------------
应用服务器只管记录流水,然后再进行二次整理。我们现在的日志都是这种方式进行处理的。只有这样子处理才能够保证用户体验质量的前提下完成所有日志的记录,并且达到最后的处理。

这两天正好帮着改善一段日志入库的代码,测试的时候大概是分析完1.1GB数据耗时13~14秒。如果是入库或者重新写文件,保守估计应该在2~3分钟左右。
------解决方案--------------------
上面的数据的测试环境是我开发用的本本(T7250+2GB,单线程,文件读取使用了Overlapped模式,每次10MB)。
------解决方案--------------------
1. 可以借鉴log4j和log4cpp。兄弟曾在笔记本(T42)上,在1秒中之内记录了30几万条日志(每条日志为8bytes左右),也就是说1秒钟记录了300k * 8 = 2.4M的数据(当时还跑了其他应用)。
2. 采用高性能小型机和高性能磁盘阵列组成SAN(Storage Area Network),小型机和磁盘阵列通过光纤链接,磁盘阵列如果按照最高性能的方式设置RAID,那么基本上可以认为整个阵列的吞吐量为单硬盘的吞吐量 * 阵列中硬盘的数量。
3. 日志本身需要编码。如“ID为13801082386登录到自助查账模块2009-05-04 12:11”,在一般的应用系统中,log4j或log4cpp采用日期作为日志文件名,即每一天产生一个日志文件,当然在你这个系统中,可以设置成一个小时产生一个日志文件,那么上面举例的那条日志可变成“ID为13801082386登录到自助查账模块11”,它包含在名为2009050412这个日志文件中,这样每条日志可以节省14bytes。同样道理,“登录到”这个动作,也可以编码为2bytes(0~9,A~Z,a~z,2位的取值空间为62^2 = 3844,应该足够应付了),假定为A0,那么此处又可以省下4bytes;同样道理“自助查账模块”也可以编码成两位,假定也是A0,那么可以节省10bytes;原日志中“ID为”字样纯粹多余,可以不在日志中记录。经过上述编码后,原日志变成“13801082386A0A011”,这样以来每条日志就便小了,这样可以大幅度提高记录日志的性能。
4. 得到日志后,怎么处理汇总是一个很大的挑战,一般情况是采用IMDB,即In Memory DataBase,如extremeDB,TimesTen等。extremeDB在性能稍好的小型机上,1秒中插入40万条记录是没有问题的,而且运算速度非常快,你可能在此对日志做相关运算或者汇总等处理,得到结果后在倒入普通的RDBMS中。这种数据库的要求就是内存要比较大,如果采用32bit的操作系统,理论上最多可以使用4GB,但实际上估计也就2G多,楼主的问题应该可以采用32bit的操作系统的,如果不放心可以采用64bit的操作系统,这样以来内存就应该不是问题了。在电信级的系统中,IMDB常被使用,它比较简单,不象普通的RDBMS有很多约束,数据库服务器软件和数据本身全部处在内存中,因此它的速度非常快,它有一个弱点就是不能断电。
5. 楼主所提的日志也可以直接存入IMDB中。
6. 采用分布存储的办法,将日志写入到不同的日志文件(在不同的设备上)或不同的IMDB中(在不同的设备上),性能会因此有很多的提升。
------解决方案--------------------
随便问问,楼主要做的系统是不是
1. 通信运营商的系统,or
2. 网站行为分析系统,or
3. 游戏或即时聊天用户行为分析系统?
除此3者,兄弟实在想不出来什么地方的并发量有如此之大,银行系统也没有这么大(银行系统一般是彼此分割开的,比如某个城市里的银行,绝大部分业务是本地的,由本地服务器就可以搞掂了,并发两远没有楼主所说的那么大,跨地域的交易毕竟不多,处理起来相对而言都很easy了。银行用的服务器一般都是大型机,性能和稳定性是普通机器没有办法比较的,价格自然也非常昂贵,据兄弟所知,某银行北京计算中心的服务器一套就是RMB5亿,上海和广州的分别是RMB4亿和3.5亿,由于银行对安全性要求非常高,其强大的计算能力,相当大一部分被安全方面的计算消耗掉了,中国移动大部分关键计算用的是IBM RISC 6000的最高型号,属于小型机范畴,性能当然也很客观,多年以前一台S85,即pSeries680或685的价格在RMB1000万左右)

文章评论

一个程序员的时间管理
一个程序员的时间管理
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
中美印日四国程序员比较
中美印日四国程序员比较
代码女神横空出世
代码女神横空出世
10个调试和排错的小建议
10个调试和排错的小建议
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
每天工作4小时的程序员
每天工作4小时的程序员
我是如何打败拖延症的
我是如何打败拖延症的
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
那些争议最大的编程观点
那些争议最大的编程观点
我的丈夫是个程序员
我的丈夫是个程序员
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员和编码员之间的区别
程序员和编码员之间的区别
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
总结2014中国互联网十大段子
总结2014中国互联网十大段子
为什么程序员都是夜猫子
为什么程序员都是夜猫子
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
Java程序员必看电影
Java程序员必看电影
程序员的鄙视链
程序员的鄙视链
程序员应该关注的一些事儿
程序员应该关注的一些事儿
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员必看的十大电影
程序员必看的十大电影
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员都该阅读的书
程序员都该阅读的书
如何成为一名黑客
如何成为一名黑客
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
编程语言是女人
编程语言是女人
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
旅行,写作,编程
旅行,写作,编程
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有