《WEB服务器.pdf》由会员分享,可在线阅读,更多相关《WEB服务器.pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、WEB 服务器1.Apache 服务器和 nginx 的优缺点:我们之前大量使用 Apache 来作为 HTTPServer。Apache具有很优秀的性能,而且通过模块可以提供各种丰富的功能。1)首先 Apache 对客户端的响应是支持并发的,运行 httpd 这个 daemon 进程之后,它会同时产生多个孩子进程/线程,每个孩子进程/线程分别对客户端的请求进行响应;2)另外,Apache 可以提供静态和动态的服务,例如对于 PHP 的解析不是通过性能较差的 CGI 实现的而是通过支持 PHP 的模块来实现的(通常为 mod_php5,或者叫做 apxs2)。3)缺点:因此通常称为 Apach
2、e 的这种 Server 为 process-basedserver,也就是基于多进程的 HTTPServer,因为它需要对每个用户请求创建一个孩子进程/线程进行响应;这样的缺点是,如果并发的请求非常多(这在大型门户网站是很常见的)就会需要非常多的线程,从而占用极多的系统资源CPU 和内存。因此对于并发处理不是 Apache 的强项。4)解决方法:目前来说出现了另一种 WebServer,在并 发方面表现更加优越,叫做 asynchronous servers 异步服务器。最有名的为Nginx 和 Lighttpd。所谓的异步服务器是事件驱动程序模式的 event-driven,除了用户的并发
3、请求通常只需要一个单一的或者几个线程。因此占用系统资源就非常少。这几 种又被称为lightweight webserver。举例,对于10,000 的并发连接请求,nginx 可能仅仅使用几M 的内存;而Apache 可能需要使用几百 M 的内存资源。2.实际中单一的使用:1)关于单一使用 Apache 来作为 HTTPServer 的情况我们不用再多做介绍,非常常见的应用;上面我们介绍到Apache对于PHP等服务器端脚本的支持是通过自己的模块来实现的,而且性能优越。2)我们同样可以单单使用 nginx 或者 lighttpd 来作为HTTPServer 来使用。nginx和lighttpd
4、 和Apache 类似都通过各种模块可以对服务器的功能进行丰富的扩展,同样都是通过 conf 配置文件对各种选项进行配置。对于 PHP 等,nginx 和 lighttpd 都没有内置的 模块来对 PHP进行支持,而是通过 FastCGI 来支持的。Lighttpd 通过模块可以提供 CGI,FastCGI 和 SCGI 等服务,Lighttpd is capable of automatically spawning FastCGIbackends as well as using externally spawned processes.nginx 则没有自己提供处理 PHP 的功能,需要
5、通过第三方的模块来提供对 PHP 进行 FastCGI 方式的集成。nginx has module support for FastCGI via a built-in module,SCGI and WSGI via 3rd Party module.The user must beable to spawn the processes separately because nginx isnot able to automatically spawn them 9.nginx does notsupport normal CGI applications 10,which is actu
6、ally asecurity benefit.Lighttpd vs nginx:http:/ Proxy:0)代理服务器的概念 proxy server:代理服务器的概念很容易理解,就是通常作为两台机器中间的机器,需要提供的功能往往有:缓 存 caching,安全,负载均衡 load banlancing。所谓的负载均衡就是,很多机器使用一个代理的时候,代理服务器需要对各个服务器进行均衡。我们常见的代理是正向的代理,例如我们机房有 20 台电脑要上网,现在只有一个电脑可以上网,那么可以使用这台电脑作为代理服务器,所有通过网络的数据传输 都要经过该代理服务器。而反向代理,是和正向代理相反的,正
7、向代理针对服务接收方用户来说,反向代理或者叫做服务器端代理是针对服务器端的,意思是有多台服务器,反向代理服务器对用户的请求代理发送给其中的一 台服务器进行处理。Proxy server:http:/en.wikipedia.org/wiki/Proxy_server1)实际中对于一个大型网站,我们通常使用很多台 sever 来构成一个 cluster 来对用户的各种请求进行响应。因此通常需要一台或者多台反向代理服务器来对多台Server 进行服务。这个反向代理服务器需要提供的功能一般都包括:安全方面;缓存压缩功能;负载均衡 功能;Reverseproxy:http:/en.wikipedia.
8、org/wiki/Reverse_proxy(需要注意反向代理服务器和防火墙优点类似,但是防火墙一般只有安全方面的考虑,没有缓存和负载均衡方面的功能。)3)综上,实际中 Web 服务器端的架构通常是多台 Web 服务器运行并行地提 供服务;同时还需要在 Web 服务器前段部署一台或者多台反向代理服务器,一方面缓存一些静态数据,或者将 Web 服务器动态产生的一些内容缓存,另一方面通 过负载均衡功能,可以均匀地将用户的并发请求传递给多台 Web 服务器进行处理。这样一方面可以大大降低后面每台 Web 服务器的负担;另一方 面可以实现多台服务器的负载均衡。4.实际中使用 nginx 或者 ligh
9、ttpd 当做反向代理服务器,后台布置多台 ApacheHTTPServer:1)上面说到,nginx 和 lighttpd 的优点在于速度快,轻量级,在处理多用户并发方面要大大优于 Apache 服务器。因此我们通常可以把他们作为反向代理服务器放置到多台的 Apache Web 服务器前段,来一方面缓存数据,另一方面实现多台服务器的负载均衡。2)当然了Apache 本身通过 mod_proxy 和mod_cache 也可以实现反向代理和缓存功能,但是在处理高并发方面还是无法与 nginx 和 lighttpd 这种轻量的异步模式的服务器来比较。3)另外,利用 nginx 和 lighttpd
10、 的反响代理功 能,我们可以通过设置其 configuration 文件,当客户端请求的是静态内容(例如一些图片,js,html 文件等)的话,直接由 nginx 或者lighttpd 进行响应;如果需要访问动态内容(通常需要实时从数据库中读取)的话,则通过反向代理,nginx 等可以将请求发送给后台等待的 Apache 进行响应,然后 Apache 将相应的结果返回给nginx,后者再响应用户的时候还 可以进行缓存。4)有时候还可以使用一些缓存的工具,例如 Squid。另外 nginx 也提供了对一些缓存功能的支持,例如memcache等。5)因此如果从图形来分析的话,通常的架构如下:ngi
11、nx 作为最前端的 web cache 系统这个结构的优点:1、可以使用 nginx 前端进行诸多复杂的配置,这些配置从前在squid 是没法做或者做起来比较麻烦的,比如针对目录的防盗链。2、nginx 前端可以直接转发部分不需要缓存的请求。3、因为 nginx 效率高于 squid,所以某些情况下可以利用nginx 的缓存来减轻 squid 压力。4、可以实现url hash 等分配策略。5、可以在最前端开启 gzip 压缩,这样后面的 squid缓存的纯粹是无压缩文档,可以避免很多无谓的穿透。6、因为 nginx 稳定性比较高,所以 lvs 不需要经常调整,通过nginx 调整就可以。7、
12、squid 的文件打开数按默认的 1024就绰绰有余,不过处理的请求可一个都不会少。8、可以启用 nginx 的日志功能取代 squid,这样做实时点击量统计时可以精确定位到 url,不必要再用低效率的 grep 来过滤。9、因为 nginx 的负载能力高于 squid,所以在用 lvs 分流时可以不必分得特别均衡,出现单点故障的几率比较低。nginx 和 squid 配合搭建的 web 服务器前端系统前端的 lvs和 squid,按照安装方法,把epoll 打开,配置文件照搬,基本上问题不多。这个架构和 app_squid 架构的区别,也是关键点就是:加入了一级中层代理,中层代理的好处实在太
13、多了:1、gzip 压缩压缩可以通过 nginx 做,这样,后台应用服务器不管是 apache、resin、lighttpd 甚至 iis 或其他古怪服务器,都不用考虑压缩的功能问 题。2、负载均衡和故障屏蔽 nginx 可以作为负载均衡代理使用,并有故障屏蔽功能,这样,根据目录甚至一个正则表达式来制定负载均衡策略变成了小 case。3、方便的运维管理,在各种情况下可以灵活制订方案。例如,如果有人用轻量级的 ddos 穿透 squid 进行攻击,可以在中层代理想办法处理掉;访问量和后台负载突变时,可以随时把一个域名或一个目录的请求扔 入二级cache 服务器;可以很容易地控制 no-cache
14、 和 expires 等header。等等功能。4、权限清晰这台机器就是不写程序的维护人员负责,程序员一般不需要管理这台机器,这样假如出现故障,很容易能找到正确的人。对于应用服务器和数据库服务器,最好是从维护人员的视线中消失,我的目标是,这些服务只要能跑得起来就可以了,其它的事情全部可以在外部处理掉。General Architecture of LVS ClustersFor transparency,scalability,availability and manageability of the wholesystem,we usually adopt three-tie archite
15、cture in LVSclusters illustrated in the following figure.The three-tiearchitecture consists ofLoad Balancer,which is the front-end machine of the whole clustersystems,and balances requests from clients among a setof servers,so that the clients consider that all the servicesis from a single IP addres
16、s.Server Cluster,which is a set of servers running actual network services,such as Web,Mail,FTP,DNS and Media service.Shared Storage,which provides a shared storage space for the servers,sothat it is easy for the servers to have the same contentsand provide the same services.Load balancer is the sin
17、gleentry-point of server cluster systems,it can run IPVSthat implements IP load balancing techniques inside theLinux kernel,or KTCPVSthat implements application-level load balancing insidethe Linux kernel.When IPVS is used,all the servers arerequired to provide the same services and contents,theload
18、 balancer forward a new client request to a serveraccording to the specified scheduling algorithms and theload of each server.No matter which server is selected,the client should get the same result.When KTCPVS isused,servers can have different contents,the loadbalancer can forward a request to a di
19、fferent serveraccording to the content of request.Since KTCPVS isimplemented inside the Linux kernel,the overhead ofrelaying data is minimal,so that it can still have highthroughput.The node number of server cluster can be changedaccording to the load that system receives.When all theservers are ove
20、rloaded,more new servers can be added tohandle increasing workload.For most Internet servicessuch as web,the requests are usually not highly related,and can be run parallely on different servers.Therefore,asthe node number of server cluster increases,theperformance of the whole can almost be scaled
21、up linearly.Shared storage can be database systems,network filesystems,or distributed file systems.The data that servernodes need to update dynamically should be stored in databased systems,when server nodes read or write data indatabase systems parallely,database systems canguarantee the consistenc
22、y of concurrent data access.Thestatic data is usually kept in network file systems such asNFS and CIFS,so that data can be shared by all the servernodes.However,the scalability of single network filesystem is limited,for example,a single NFS/CIFS can onlysupport data access from 4 to 8 servers.For l
23、arge-scalecluster systems,distributed/cluster file systems can beused for shared storage,such as GPFS,Coda and GFS,then shared storage can be scaled up according to systemrequirement too.Load balancer,server cluster and shared storage areusually connected by high-speed networks,such as100Mbps Ethern
24、et network and Gigabit Ethernet network,so that the network will not become the bottleneck ofsystem when the system grows up.生产环境中的一些 web server(主要是三巨头 apache,nginx,lighttpd):http:/ 作为最前端的 web cache 系统:http:/ 和 squid 配合搭建的 web 服务器前端系统:http:/ Architecture of LVS Clusters:http:/www.linuxvirtualserver.org/architecture.html作者:Sjolzy|Google+地址:http:/ 1024