« 上一篇下一篇 »

在应用程序上的执行效果

客户端Comet的性能优化目的是:减少数据传输的延迟、HTTP连接保存管理、远程消息和处理跨域问题。服务器端的性能优化目的是:保存和共享HTTP的连接数、并尽量较少每个连接所消耗的内存、CPU、I/O和宽带。

       连接管理

    即便是很少的数据,服务器也会永久地为每一个用户打开一个HTTP连接,这导致打开很多连接。连接有两个限制:内存和CPU。但无论如何,每个连接都会因操作系统或开发语言而产生内存占用。如果每个连接使用一个线程就会导致一个完整执行堆栈的内存占用,即使它能被降到几乎合理的程度,通常大小也为2MB。另外,如果线程数的增加超过进程数,那么我们将会以超负荷而告终,因为操作系统在线程与进程之间切换的开销比我们实际执行代码的开销还要多。正是这个原因,我们需要选择一个异步网路架构。

选择或轮询会导致如下问题:这些方法会是操作系统检查每个打开的套接字,最终来确定哪一个已经准备好了。这意味着调用选择时,即使显示没有套接字准备读出,那么在套接字数量很少时开销也小,但是对这套接字数量的增加,CPU的占用时间也会随之增加。我们可以通过使用替代技术来避免套接字检查,如FreeBSD/OS X的kqueue、Linux的epoll和Windows的completion ports。在大多数主流语言中有一些网络库把这些细节封装成了一致且跨平台的API,例如有C的libevent、java.nio和Twisted Python。

性能优化技术在不同情况下也大相径庭。例如聊天程序,通常有很多用户连接,但是在任何一个特定时间内只有一小部分用户在接收信息。在这种情况下,通过服务器端的连接共享管理大量闲置的连接是很有好处的。Orbited和Willow Chat这两个网站在这方面做了深入的优化。

测量性能

测量性能是通过测试可以找出建立一个能容纳100万用户的Comet服务器需要多少资源。要实现这种规模的简单原则是:让每一个连接使用尽可能少的系统资源,并编写完善的测试去测量性能。

服务器必须尽量消减对资源的占用,同时基于发送给每个客户端的数据的频率和负载量来优化长期保存的连接数。

因为Comet实际上只是HTTP的性能优化和连接管理,性能测量技术实际上与测量任意一个大规模的Web应用程序很类似。

« 上一篇下一篇 »