请给高性能下个定义。

11 views
Skip to first unread message

arcnode

unread,
Apr 4, 2006, 11:35:25 AM4/4/06
to 高性能网络编程邮件列表
看了这么多帖子也没有发现有谁给高性能下个定义,各位看看什么叫高性能,定性分析是很不严格的,我觉得还是要量化。就高性能服务我做过很多研究,从低效模型到高效模型都做过,现在的成就是让超过50万人同时在线,如果有人有这方面的经验欢迎交流。

大宝(sodme)

unread,
Apr 4, 2006, 1:34:20 PM4/4/06
to 高性能网络编程邮件列表
说实话, 在国内国外的论坛上,
我还没看到过有人就这个概念的定义提出过疑问的.
我不知道你想看到的是个什么样的定义.
但一个应用作出来后, 是不是高性能的,
总是有参考数据为证的, 这也是必然要有的.
我想没有人会无聊到: 非要把"i=i/2"定义为非高性能的,
而把 "i=i>>1"定义为高性能的吧?

通过分布式的系统架构,
支持50万人在线的系统并不是难事, QQ最高在线1900万呢.
但不知道你所作的系统,
是单个服务器进程支持50万人同时在线,
还是一个集群支持的呢? 如果是前者,
我还想继续问一下,
你的应用是具体完成什么功能的呢? IM? 网游? 或是其它?

谦_Evicn.Tam

unread,
Apr 4, 2006, 10:14:59 PM4/4/06
to dev4s...@googlegroups.com
如果是游戏,也集群支持吧.?

胡人

unread,
Apr 4, 2006, 10:35:31 PM4/4/06
to dev4s...@googlegroups.com
其实提出这个话题也是因为现实中看到过太多性能参差不齐的东西,有些明显性能很糟糕也号称高性能,所以希望看到更精确一点的定义,并没有质疑这个论坛的什么意思,坛主别见怪。虽然国内从事这方面研究的人比较少,但应该还是有人研究过的,希望能看到有人抛出数据定义下的高性能依据,即使是抛砖引玉也好。
 
国内做出的超过50万人在线的项目也不多,当然我相信有些在用系统理论上是可以支持到这个数量的,但也不要太不把它当回事,实践下的东西和理论下的空谈是有本质区别的。
 
我做的是网游项目,65台游戏服务器+若干其他服务器,最高支持了55万人同时在线,理论上当然可以支持更多。除数据库服务器外别的都是普通pc(3年前的配置,比今天大多数人用的机器还要差一个档次)
 
单个服务器进程能支持50万人的估计是测试中的反射服务器,不是实际工作的项目服务器,而且机器配置要非常好。实际工作的项目服务器都有很多计算任务,io消耗时间很少。
 
 

xMan

unread,
Apr 4, 2006, 11:56:37 PM4/4/06
to 高性能网络编程邮件列表

胡人说得有道理呀,我也觉得这是存在的问题,到底什么是"高性能"?自己也没有认真考虑过,楼主是做MMORPG的吗?感觉还是有规模的网络游戏。

大宝(sodme)

unread,
Apr 5, 2006, 1:27:25 AM4/5/06
to 高性能网络编程邮件列表
hi 胡人:
首先声明一点, 呵呵, 50万在线,
不管是采用的什么架构, 我都是表示赞赏的,
更没有丝毫贬低的意思, 呵呵. 相比于你而言,
尽管我作过的系统也支持扩展性架构,
理论上也可以扩展到50万以上,
但没有达到实际想要的规模时我的项目就撤了.

第二点, 我想表达的意思是: 在软件应用系统中,
没必要也很难去界定"高性能"这个概念. 而这一点,
如果放在硬件系统领域, 我认为就比较容易界定一些.
比如, 对于TOP100的巨型计算机而言, 能不能算高性能,
是通过一系列的标准测试程序测试出来的,
比如每秒完成多少次浮点运算这样的很具体的指标.
但相比于硬件系统而言, 软件系统的高性能, 这个,
我觉得就很难界定了. 要评测谁高谁低,
最起码的一个前提就是: 大家要有相同的比较基础.
比如你作了一个MMO, 我作了一个MMO,
你说的你的性能更高, 我说我的性能更高,
我觉得这样的争论是毫无意义的.
从游戏玩法决定的游戏形式, 玩家规模,
网络状况等各方面, 影响性能的东西实在太多,
而这些又不是我们可以一刀切加以量化的.
我们总不能为了比较谁的性能好,
就把一个游戏分别按你我的两种方法来作, 对吧?

当然, 从另一方面看, 在某些地方,
性能又是可以相互比较的. 比如IOCP和SELECT这两种模型,
你不能说哪个就绝对性能要高,
但加了一定的条件和前提的时候, 两者就可以比较,
比如我们加上这个前提: 当客户端规模达到1K以上时,
在处理高并发访问时, IOCP模型普遍要优于SELECT模型.

总之, 所谓的高与低, 是通过比较得出来的,
而比较的前提是大家有没有一个共同的比较基础.
而我的观点是: 在纷繁复杂的软件应用系统中,
要比较两个不同的软件系统的高性能指标,
由于它们不存在一个很客观的比较前提, 所以,
这里的"高性能"定义很难给出.

> =�:讔髯味譤8跱9過7�'甸鞳*^奠m�f暼Z� 纷`拽�跒寝琁堋丕伓瑊� �曕-掸!J,拮n5<div>其实提出这个话题也是因为现实中看到过太多性能参差不齐的东西,有些明显性能很糟糕也号称高性能,所以希望看到更精确一点的定义,并没有质疑这个论坛的什么意思,坛主别见怪。虽然国内从事这方面研究的人比较少,但应该还是有人研究过的,希望能看到有人抛出数据定义下的高性能依据,即使是抛砖引玉也好。</div>
> <div>&nbsp;</div>
> <div>国内做出的超过50万人在线的项目也不多,当然我相信有些在用系统理论上是可以支持到这个数量的,但也不要太不把它当回事,实践下的东西和理论下的空谈是有本质区别的。</div>
> <div>&nbsp;</div>
> <div>我做的是网游项目,65台游戏服务器+若干其他服务器,最高支持了55万人同时在线,理论上当然可以支持更多。除数据库服务器外别的都是普通pc(3年前的配置,比今天大多数人用的机器还要差一个档次)</div>
> <div>&nbsp;</div>
> <div>单个服务器进程能支持50万人的估计是测试中的反射服务器,不是实际工作的项目服务器,而且机器配置要非常好。实际工作的项目服务器都有很多计算任务,io消耗时间很少。</div>
> <div>&nbsp;</div>
> <div>&nbsp;</div>

胡人

unread,
Apr 5, 2006, 2:53:01 AM4/5/06
to dev4s...@googlegroups.com
正如你所说,项目服务器性能往往由于实际运行中配置不同、处理逻辑不同、服务目标不同等因素导致难于在同一个公共标准上进行直接比较。估计你也做过同一个项目不同版本之间的性能比较,在相近的环境中比较结果也容易对照。在性能计算上我做过一些尝试,不妨抛砖引玉。
我把游戏服务器性能指标分为几个主要参量:io总耗时,单位时间io均耗时,单位用户io均耗时,逻辑总耗时,单位时间逻辑均耗时,单位用户逻辑均耗时,总用户量,总发送字节数、总接收字节数,单位时间均发送字节数,单位用户均发送字节数,单位时间均接收字节数,单位用户均接收字节数等。即使有这些数字但要在不同服务器之间进行比较是很难的,仍然回到难题上,就是它们的比较基准不一样。不过有了这些数字作为依据我们实现了每一次升级项目服务器性能都有较大提高。
在数据服务器的实现上我们是将当前活跃用户的数据全部cache在内存中,需要数据的时候进行查询快速定位,用户下线一定时间后将数据refresh到数据库中并从cache中删除用户,在实践中我使用了一些方法进行对比,我以stl::map为基准,分别尝试了半hash(就是对用户第一个字母进行分组,之后用二分),stl::hash_map,自定义hash进行比较,结果发现在100万用户数据测试中性能依次提高,约为:
stl::map         4235(毫秒)
半hash           969
hash_map      672
自定义hash    437
 

xMan

unread,
Apr 5, 2006, 3:36:35 AM4/5/06
to 高性能网络编程邮件列表
单就逻辑总耗时来说就千差万别,不同类型的网络游戏如休闲的、MMORPG的就差距十分巨大,这个项不好做为标准吧。另外,采用不同的服务器组模型对IO时间、总发送字节数、总接收字节数影响也应该十分显著,还加上采用什么平台(Win32
or
linux)和什么网络I/O模型对数据的影响也不可谓不大吧。

如果要参考,是否应该先统一一个标准的环境才好有说服力啊,个人之见,望大家讨论。

els...@gmail.com

unread,
Apr 5, 2006, 4:39:09 AM4/5/06
to 高性能网络编程邮件列表

这些数据是什么意思,是查找一个用户的时间么?

xMan

unread,
Apr 6, 2006, 12:17:12 AM4/6/06
to 高性能网络编程邮件列表
> 在数据服务器的实现上我们是将当前活跃用户的数据全部cache在内存中,需要数据的时候进行查询快速定位,用户下线一定时间后将数据refresh到数据库中­并从cache中删除用户

这只限制与查询和下线操作。对于频繁要Update
data的角色写操作应该没有什么帮助,频繁操作数据库确实是个普遍的瓶颈。

Reply all
Reply to author
Forward
0 new messages