一、几种典型应用对系统资源使用的特点
1.1 以静态内容为主的Web应用
这类应用的一个主要特点是小文件居多,并且读操作频
繁,Web服务器一般为Apache或Nginx,因为这两个HTTP服务器对静态资源的处理非常迅速和高效。在Web访问量不大时,可以直接对外提供服
务,但是在有很大并发请求时,单一的Web服务无法支撑大量的客户端访问,此时就需要由多台Web服务器组成的负载集群系统。为了实现更高效的访问,在最
前端还可以搭建Cache服务器,也就是将静态资源文件缓存到操作系统内存中直接进行读操作,因为直接从内存读取数据要比从硬盘读数据效率高很多,所以在
Web前端搭建Cache服务器可以大大提高并发访问性能。常用的Cache软件有Squid、Varinsh等。
Cache服务器虽然可以提高访问性能,但要求服务器有很大的内存,当系统内存充足时,可以缓解磁盘随机读的压力;当内存过小或者内存不足时,系统就会使用虚拟内存,而虚拟内存的使用会引起磁盘I/O的增大,当磁盘I/O增大时,CPU的开销也随之增加。
在高并发访问时,还存在另外一个问题,就是网络带宽瓶颈,如果客户端访问量很大且带宽不够,就会阻塞网络,影响访问,因此,在构建基于Web的网络应用时,网络带宽也是必须考虑的一个因素。
1.2 以动态内容为主的Web应用
这
类应用的一个特点是频繁地执行写操作,例如Java、PHP、Perl、CGI等,会导致CPU资源消耗严重。因为动态程序的执行要进行编译、读取数据库
等操作,而这些操作都会消耗CPU资源,因此,一个基于动态程序的Web应用,应该选择多个性能较高的CPU,这将对系统整体性能的提高有很大帮助。
基
于动态内容的Web应用在高并发访问时,系统执行的进程数会很多,因此要注意负载的分配。由于过多的进程会消耗大量系统内存,如果内存不足,就会使用虚拟
内存,而虚拟内存的增加会导致磁盘写操作频繁,进而消耗CPU资源,因此要寻求一个硬件资源和软件资源的平衡点,例如配置较大的内存和高性能的CPU,而
在软件方面可通过如Memcached加快程序与数据库之间的访问效率。
1.3 数据库应用
数据库应用的一个主要特点是
消耗内存和磁盘I/O,而对CPU的消耗并不是很大,因此最基本的做法就是为数据库服务器配置较大的内存和读写较快的磁盘阵列,例如,可以为数据库服务器
的磁盘选择RAID5、RAID01等RAID级别。将Web Server与DB
Server分离也是优化数据库应用的一个常用做法。如果客户端用户对数据库的请求过大,还可以考虑采取数据库的负载均衡方案,通过软件负载均衡或硬件负
载均衡的方式提高数据库访问性能。
对于数据库中过大的表,可以考虑进行拆分,也就是将一个大表拆分成多个小表,再通过索引进行关联处理,这样可以
避免查询大表造成的性能问题,因为表太大时,查询遍历全表会造成磁盘读操作激增,进而出现读操作等待的情况。同时,数据库中查询语句复杂,大量的
where子句,order by、group
by排序语句等,容易使CPU出现瓶颈。最后,当数据更新时,数据更新量大或更新频繁,也会造成磁盘写操作激增,出现写操作的瓶颈。这些也应该在程序代码
中避免。
在日常应用中,还有一种方法可以显著提高数据库服务器的性能,那就是读写分离。
同时对数据库进行读和写的操作,是效率极低的一种访问方式,较好的做法是根据读、写的压力和需求,分别建立两台结构完全相同的数据库服务器,将负责写的台
服务器上的数据,定时复制给负责读的服务器,通过读写的协作提高系统整体性能。
通过缓存方式也可以提高数据库的性能,
缓存是数据库或对象在内存中的临时容器,使用缓存可大幅减少数据库的读取操作,改由内存来提供数据。比如可以在 Web Server和DB
Server之间增加一层数据缓存层,在系统内存中建立被频繁请求对象的副本,这样一来,不访问数据库也可为程序提供数据,现在应用很广泛的
Memcached就是基于这个原理。
1.4 软件下载应用
静态资源下载服务器的主要特点是带宽消耗严重,同时对存储性能要求也
很高,在下载量极高时,可以采用多台、多点服务器分流形式分担下载负荷,在HTTP服务器方面,从高性能角度和减少服务器部署的角度考虑,推荐采用
Lighttpd
HTTP服务器,而不是采用传统的Apache服务器,原因是Apache使用阻塞模式的I/O操作,性能相对较差,并发能力有限,而Lighttpd使
用异步I/O方式,处理资源下载的并发能力远远超过Apache。
1.5 流媒体服务应用
流媒体主要应用在视频会议、视频点播、远程教育、在线直播等方面,这类应用主要的性能瓶颈是网络带宽和存储系统带宽(主要是读操作),面对海量用户,如何保障用户接收到高清晰的、流畅的画面,如何最大限度地节省网络带宽,这些都是流媒体应用要解决的首要问题。
对
于流媒体服务器的优化,可以从存储策略、传输策略、调度策略、代理服务器缓存策略及流媒体服务器的体系结构设计等几个方面进行考虑。在存储方面,需要对视
频的编码格式进行优化,进而节省空间,优化存储性能;在传输方面,可以采用智能流技术控制发送的速率,最大程度保障用户观看视频的流畅性;在调度方面,可
以采用静态调度和动态调度结合的方法;在代理服务器方面,可以采用分段缓存、动态缓存等管理策略;在流媒体体系结构方面,可以采用内存池和线程池技术改善
内存消耗和线程过多对性能造成的影响。
阅读(1633) | 评论(0) | 转发(0) |