单台服务器并发百万级配置


摘要:本文主要介绍利用单台PC服务器来实现可支持百万级用户并发访问的WEB服务器的实践工作。意在提出一些手段来发掘设备的潜力,充分利用设备资源,以求达到降低硬件投入成本和维护成本的目的。

随着硬件技术的飞速发展,当前单台PC 服务器的性能得到了显著提升,反之,硬件成本却在快速下降。另一方面,多数门户网站、大型社区在建设WEB服务、邮件服务等网络服务时,仍然倾向于通过简单地扩充并行服务器数量、存储子系统来支持用户请求,而没有考虑深入挖掘服务器本身的性能潜力!即使单台硬件成本足够的低廉,数量巨大的基础硬件及其维护费用对任何企业而言仍然是一项沉重的负担!

如果能够在满足大量用户请求的同时,通过尽量提升服务器的整体性能,从而减少服务器的保有量,也同时减少了设备维护费用,企业是不是可以得到更大的收益呢?答案是肯定的!

就笔者看来,对于需要支持百万级用户并发访问的WEB 服务而言,确实没有必要采用多台服务器,单单一台普通的PC服务器就可以胜任! 个人认为当前许多WEB业务应用都是对硬件投资的极大浪费!为什么这样说呢?第一,当前PC服务器多数带多个独立的CPU,而且每个CPU还带多个硬核,而许多WEB应用服务器、数据库服务器软件根本就没有对多核处理器进行支持和优化,基本上是一个CPU在工作,其它都在休息,没能充分发挥多CPU的能力;第二,虽然服务器安装有高性能网卡,但是所采用的操作系统没有对网络吞吐进行优化,无法支持巨大的网络IO请求,没能发挥出高性能网卡的优势;第三、服务器一般都支持4G或以上更大的内存,而且在x86平台下内存条的价格就像大白菜,非常低廉。即使如此廉价丰富的内存资源也没有得到好好利用,多数应用根本没有考虑基于内存的高速缓存方案,比如业务应用中最常见的数据库访问操作,通常都是直接连接到数据库进行SQL操作,其处理性能上不去是显而易见的了;第四,应用程序本身不够优化。不管存在何种原因,公认的一点是一个不优化的业务应用对系统整体性能表现有很大影响。高深的优化技术我们不谈,就举两个常见的优化处理来说明,例子一,对于系统中保证唯一而且又不经常变化的用户ID,是否可以考虑不采用链表而采用MAP表存储呢?后者比前者查询快多了!;例子二,对于判断一个表中是否存在某条记录,通常使用这样的SQL语句:“select * from xx_table where xx_id=xx”, 试问是否可以改成“select 1 from xx_table where xx_id=xx”?一字之差,在高频度数据查询过程中,后面的语句比前面的快很多呀。第五,一般服务器群前面都有一个或多个防火墙设备,用来进行包过滤和端口映射。如果服务器的自身安全性很强的话,这些防火墙设备也是可以被省略的。