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

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

目的:让服务器支持大量并发访问。

注:以下内容 ASP/ASP.NET IIS 用不成。另外要精通Linux,TCP/IP。

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

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

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

就笔者看来,对于需要支持百万级用户并发访问的WEB 服务而言,确实没有必要采用多台服务器,单单一台普通的PC服务器就可以胜任! 个人认为当前许多WEB业务应用都是对硬件投资的极大浪费!为什么这样说呢?

第一,当前PC服务器多数带多个独立的CPU,而且每个CPU还带多个硬核,而许多WEB应用服务器、数据库服务器软件根本就没有对多核处理器进行支持和优化,基本上是一个CPU在工作,其它都在休息,没能充分发挥多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”?一字之差,在高频度数据查询过程中,后面的语句比前面的快很多呀。

第五,一般服务器群前面都有一个或多个防火墙设备,用来进行包过滤和端口映射。如果服务器的自身安全性很强的话,这些防火墙设备也是可以被省略的。

基于上述理由,笔者及同事设计并实现了一款只需要单台PC 服务器就可以支持百万级用户并发访问的WEB服务器(硬件采用MS-9188主板,带两颗Intel(R) Xeon(R) E5410 CPU,每个CPU含4个核, 8G内存, 320G SATA 硬盘, 板载8个Intel 82571EB 千兆网卡,一款非常普遍的PC服务器)。

现就我们的工作做一简要介绍:

第一, 选用64位版本的Linux对称多处理操作系统,以便支持超过4G的内存和多核心CPU。(ASP/ASP.NET  , IIS 用不成)

第二,提高系统网络IO性能。虽然Linux操作系统本身的网络处理能力相对Windows系统表现更好,但要做到千兆级别的网络吞吐还是力不从心。这一点可以通过Smartbits工具得到验证。要支持百万级的用户请求,首先要考虑提高服务器的网络吞吐能力!我们做过实验,通过精简内核协议栈的方法是无法达到要求的,原因很简单,网络接收包和发送包的过程都必须经历多次内核与用户空间的拷贝,这严重占用CPU的处理时间。因此,我们设计采用“零拷贝”技术,利用DMA机制和内存映射技术,实现网络报文在内核空间与用户空间之间的快速传递,这个过程彻底解放了CPU,使得数据收发与业务处理可以并行进行。

第三,建立用户空间TCP/IP协议栈,建立具有多级快速搜索能力的连接追踪池,以满足百万级用户并发访问的要求。这是性能得以提升的关键所在。如果采用原始的 Linux操作系统,单单打开百万个文件描述符就是个耗时的操作!我们设计仅实现1~7层中必要的协议处理过程,去除原内核中冗余的协议处理过程,实行 “精兵简政”策略。整个协议处理过程采用CPU亲和等手段实现多CPU、多核并行处理,提高多CPU的利用率。

第四,修改WEB应用服务器软件。设计采用开源的Apache服务器,在其基础上增加了对“零拷贝”网络IO的支持、用户请求的多CPU并行处理支持、静态页面临时文件系统存储、内存数据库支持等技术,充分利用“时间局部性原理和空间局部性原理”,显著提升WEB服务器软件的性能。

第五,提升服务器自身安全性。采用用户态协议栈后,我们实现了对网络报文的全面控制,自己解包自己打包,并加入对各种DDos攻击的防御,而且有针对性地对包进行了内容审查,其安全过滤标准远高于单纯的包过滤,完全做到了对业务内容的过滤。这样防火墙设备就显得多余了,毕竟基于应用软件漏洞的入侵才是当前黑客攻击的主要手段!而在这方面,包过滤防火墙基本上无所作为,反倒是一个网络瓶颈!当然,如果防火墙作为负载均衡设备来使用又另当别论。

第六,基于具体的业务应用进行优化。我们对应用系统的优化主要从磁盘IO、数据库访问、业务算法等方面进行。一个精心优化的业务系统,其性能也会得到显著提高。

由于我们采用了上述步骤,我们最终实现了利用一台PC 服务器支持百万WEB用户并行访问的要求。综合来看,我们设计的思路主要是尽量提升系统潜能,通过采取多核并发、网络吞吐优化、业务系统优化等手段,多管齐下来提升系统的整体性能,以求做到用好设备、用精设备的理念,最终达到在满足用户需求的前提下,减少设备投入,节约成本的目的。

from:http://server.51cto.com/sCollege-300274.htm#commment

时间: 2024-10-13 16:08:43

单台服务器并发百万级配置(转)的相关文章

高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少

阅读(81374) | 评论(9)收藏16 淘帖1 赞3 JackJiang Lv.9    1 年前 | 前言 曾几何时我们还在寻求网络编程中C10K问题(有关C10K问题请见文章<The C10K problem(英文在线阅读.英文PDF版下载.中文译文)>)的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了. 我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用来说已经远远足够了,但是对于一些拥有很大用户基数的互联网公司,往往面临的并发

网络编程释疑之:单台服务器上的并发TCP连接数可以有多少

曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了.我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用来说已经远远足够了,但是对于一些拥有很大用户基数的互联网公司,往往面临的并发连接数是百万,千万,甚至腾讯的上亿(注:QQ默认用的UDP协议).虽然现在的集群,分布式技术可以为我们将并发负载分担在多台服务器上,那我们只需要扩展出数十台电脑就可以解决问题,但是我们更希望能更大的挖掘单台服务器的资源,先努力

【 Linux 】单台服务器上并发TCP连接数

单台服务器上并发TCP连接数    问题:一台服务器到底能够支持多少TCP并发连接呢? 1. 文件描述符限制:    对于服务器来说,每一个TCP连接都要占用一个文件描述符,一旦文件描述符使用完,新的连接到来返回给我们的错误是"Socket/File:Can't open so many files" 这时,你需要明白操作系统可以打开最大文件数的限制. 进程限制(用户限制):            执行 ulimit -n 输出1024,说明对于一个进程而言最多只能打开1024个文件,

centos7在单台服务器上安装FastDFS的方法

准备环境: #安装依赖包 yum -y install gcc gcc-c++ libtool pcre* zlib openssl openssl-devel mkdir /FastDFS/ #上传下载工具 yum -y install lrzsz yum -y install unzip cd /FastDFS/ 上传fastdfs-dep.zip rz #安装libfastcommon cd /FastDFS/ unzip fastdfs-dep.zip cd /FastDFS/fastd

单台服务器最大tcp连接

如果对服务器进行压力测试,常常出现这种情况 tcp连接数过多 netstat   -an    windows查看tcp连接数 那么怎么增加单台服务器的最大连接数呢?       最简单的办法,增加内存,socket连接大概10多kb一个 详情   https://www.cnblogs.com/duanxz/p/4464178.html 原文地址:https://www.cnblogs.com/a1304908180/p/10606551.html

提取zabbix监控平台单台服务器图形并发邮件python实现

需求:希望每天邮件发出当天某台服务器的监控状态,如果某天都登陆zabbix截图很麻烦,而且并不能保证每天都准点操作,于是写了一段脚本实现自动抓取图片,并组装成html,通过定时邮件发送,实现日报自动化. 一.效果图: 二.代码: #!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb import datetime import cookielib, urllib2,urllib import smtplib from email

Centos7单台服务器搭建FastDFS+Nginx

Fastdfs+Nginx配置操作 单台配置 安装包下载: wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz wget https://github

Memcached解决单台服务器故障问题

<beitmemcached> <add key="name1" value="server1:port" /> <add key="name2" value="server1:port,server2:port,server3:port"/> </beitmemcached> 我使用的客户端是BeITMemcached,配置文件可以有两种方式,如上面代码,有单台配置和多台配置

单台服务器部署zookeeper集群

单台部署集群 不建议使用单台部署多台服务,因为并没有实现冗余.使用多台服务器部署zookeeper集群才是生产环境使用的方案. 系统环境 [[email protected] ~]# uname -rm 2.6.32-504.el6.x86_64 x86_64 [[email protected] ~]# cat/etc/redhat-release CentOS release 6.6 (Final) 设置java堆 交换会严重降低zookeeper的性能,所以设置java对大小非常重要.为了