`
905766491
  • 浏览: 31542 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP如何解决网站大流量与高并发

阅读更多

首先,确认服务器硬件是否足够支持当前的流量。 
普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,否则怎么优化都不可能彻底解决性能问题。 

其次,优化数据库访问。 前台实现完全的静态化当然最好,可以完全不用访问数据库,不过对于频繁更新的网站, 静态化往往不能满足某些功能。 
缓存技术就是另一个解决方案,就是将动态数据存储到缓存文件中,动态网页直接调用这些文件,而不必再访问数据库,WordPress和Z-Blog都大量使用这种缓存技术。 

如果确实无法避免对数据库的访问,那么可以尝试优化数据库的查询SQL.避免使用 Select * from这样的语句,每次查询只返回自己需要的结果,避免短时间内的大量SQL查询。 

第三,禁止外部的盗链。 
外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对于自身的图片或者文件盗链,好在目前可以简单地通过refer来控制盗链,Apache自己就可以通过配置来禁止盗链,IIS也有一些第三方的ISAPI可以实现同样的功能。当然,伪造refer也可以通过代码来实现盗链,不过目前蓄意伪造refer盗链的还不多,可以先不去考虑,或者使用非技术手段来解决,比如在图片上增加水印。 

第四,控制大文件的下载。 
大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗CPU,使得网站响应能力下降。因此,尽量不要提供超过2M的大文件下载,如果需要提供,建议将大文件放在另外一台服务器上。 

第五,使用不同主机分流主要流量 
将文件放在不同的主机上,提供不同的镜像供用户下载。比如如果觉得RSS文件占用流量大,那么使用FeedBurner或者FeedSky等服务将RSS输出放在其他主机上,这样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了。 

第六,使用流量分析统计软件。 
在网站上安装一个流量分析统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化,因此,解决流量问题还需要进行精确的统计分析才可以。比如:Google Analytics(Google分析)。

 

高并发和高负载的约束条件:硬件、部署、操作系统、Web 服务器、PHP、MySQL、测试

部署:服务器分离、数据库集群和库表散列、镜像、负载均衡

负载均衡分类:  1)、DNS轮循  2)代理服务器负载均衡   3)地址转换网关负载均衡  4)NAT负载均衡   5)反向代理负载均衡   6)混合型负载均衡

部署方案1:

适用范围:静态内容为主体的网站和应用系统;对系统安全要求较高的网站和应用系统。

Main Server:主服务器

承载程序的主体运行压力,处理网站或应用系统中的动态请求;

将静态页面推送至多个发布服务器;

将附件文件推送至文件服务器;

安全要求较高,以静态为主的网站,可将服务器置于内网屏蔽外网的访问。

DB Server:数据库服务器

承载数据库读写压力;

只与主服务器进行数据量交换,屏蔽外网访问。

File/Video Server:文件/视频服务器

承载系统中占用系统资源和带宽资源较大的数据流;

作为大附件的存储和读写仓库;

作为视频服务器将具备视频自动处理能力。

发布服务器组:

只负责静态页面的发布,承载绝大多数的Web请求;

通过Nginx进行负载均衡部署。

 部署方案2:

适用范围:以动态交互内容为主体的网站或应用系统;负载压力较大,且预算比较充足的网站或应用系统;

Web服务器组:

Web服务无主从关系,属平行冗余设计;

通过前端负载均衡设备或Nginx反向代理实现负载均衡;

划分专用文件服务器/视频服务器有效分离轻/重总线;

每台Web服务器可通过DEC可实现连接所有数据库,同时划分主从。

数据库服务器组:

相对均衡的承载数据库读写压力;

通过数据库物理文件的映射实现多数据库的数据同步。

共享磁盘/磁盘阵列

将用于数据物理文件的统一读写

用于大型附件的存储仓库

通过自身物理磁盘的均衡和冗余,确保整体系统的IO效率和数据安全;

方案特性:

通过前端负载均衡,合理分配Web压力;

通过文件/视频服务器与常规Web服务器的分离,合理分配轻重数据流;

通过数据库服务器组,合理分配数据库IO压力;

每台Web服务器通常只连接一台数据库服务器,通过DEC的心跳检测,可在极短时间内自动切换至冗余数据库服务器;

磁盘阵列的引入,大幅提升系统IO效率的同时,极大增强了数据安全性。

Web服务器:

Web服务器很大一部分资源占用来自于处理Web请求,通常情况下这也就是Apache产生的压力,在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx (“engine x”) 是俄罗斯人编写的一款高性能的 HTTP 和反向代理服务器。在国内,已经有新浪、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、 频道使用 Nginx 服务器。

Nginx的优势:

高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。

内存消耗少:在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。

内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。

策略:相对于老牌的Apache,我们选择Lighttpd和Nginx这些具有更小的资源占用率和更高的负载能力的web服务器。

Mysql:

MySQL本身具备了很强的负载能力,MySQL优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解。大家都知道数据库工作就是大量的、 短时的查询和读写,除了程序开发时需要注意建立索引、提高查询效率等软件开发技巧之外,从硬件设施的角度影响MySQL执行效率最主要来自于磁盘搜索、磁盘IO水平、CPU周期、内存带宽。

  根据服务器上的硬件和软件条件进行MySQl优化。MySQL优化的核心在于系统资源的分配,这不等于无限制的给MySQL分配更多的资源。在MySQL配置文件中我们介绍几个最值得关注的参数:

改变索引缓冲区长度(key_buffer)

改变表长(read_buffer_size)

设定打开表的数目的最大值(table_cache)

对缓长查询设定一个时间限制(long_query_time)

如果条件允许 ,一般MySQL服务器最好安装在Linux操作系统中,而不是安装在FreeBSD中。
策略: MySQL优化需要根据业务系统的数据库读写特性和服务器硬件配置,制定不同的优化方案,并且可以根据需要部署MySQL的主从结构。

PHP:

1、加载尽可能少的模块;

2、如果是在windows平台下,尽可能使用IIS或者Nginx来替代我们平常用的Apache;

3、安装加速器(都是通过缓存php代码预编译的结果和数据库结果来提高php代码的执行速度)
 eAccelerator,eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。

Apc:Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。

memcache:memcache是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。主要机制是通过在内存里维护一个统 一的巨大的hash表,Memcache能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等

Xcache:国人开发的缓存器,

策略: 为PHP安装加速器。

代理服务器(缓存服务器):

Squid Cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理网。Squid主要设计用于在Unix一类系统运行。

策略:安装Squid 反向代理服务器,能够大幅度提高服务器效率。

压力测试:压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽等。一般用并发来做压力测试。

压力测试工具:webbench,ApacheBench等

漏洞测试:在我们的系统中漏洞主要包括:sql注入漏洞,xss跨站脚本攻击等。安全方面还包括系统软件,如操作系统漏洞,mysql、apache等的漏洞,一般可以通过升级来解决。

漏洞测试工具:Acunetix Web Vulnerability Scanner

分享到:
评论

相关推荐

    PHP如何解决网站大流量与高并发的问题

    针对网站大流量与高并发问题的解决方法主要包括服务器硬件升级、数据库访问优化、外部盗链禁止、大文件下载控制、不同主机分流主要流量以及使用流量分析统计软件等策略。 首先,服务器硬件是网站能够承载流量的基础...

    大流量、高并发的网站的底层系统架构.pdf

    【大流量、高并发的网站底层系统架构】是针对处理大量用户访问和高并发场景而设计的复杂系统架构。这种架构通常由多个子系统组成,包括Web前端系统、负载均衡系统、数据库集群系统、缓存系统、分布式存储系统以及...

    高并发解决办法

    ### 高并发解决办法 #### 一、HTML静态化 HTML静态化是一种高效的网页呈现方式,它可以显著提高网站性能并减少服务器负担。对于那些需要快速响应且内容相对固定的页面(如新闻列表、公告等),静态化是首选方案。...

    PHP高并发和大流量解决方案整理

    在本文中,我们将深入探讨PHP处理高并发和大流量的解决方案。首先,我们需要理解高并发的基本概念。在互联网环境中,高并发指的是在同一时间点,系统能够处理的多个并发请求。这通常涉及到服务器的性能和架构设计,...

    高并发高负载网站系统架构

    ### 高并发高负载网站系统架构 #### 一、引言 随着互联网技术的迅猛发展,网站系统面临着越来越大的访问压力。特别是在电商领域,诸如淘宝这样的电商平台经常需要应对大规模的突发流量,比如“双十一”、“双十二...

    高并发Web网站构建和安全防护

    ### 高并发Web网站构建和安全防护 #### 高并发Web网站构建 ##### 高并发的由来 随着互联网技术的飞速发展,用户对于Web应用的需求也日益增长,这直接导致了对Web服务器处理能力的要求越来越高。在早期,简单的...

    PHP秒杀系统 高并发高性能的极致挑战-

    ### PHP秒杀系统高并发高性能的设计与实现 #### 一、引言 随着互联网技术的发展,各类电商网站和应用程序为了吸引用户,常常会举办限时秒杀活动。这种活动的特点是短时间内会产生大量的用户请求,对系统的并发处理...

    高并发问题解决

    在应对高并发问题时,网站开发者需要采取一系列策略来确保系统的稳定性和性能。以下是一些关键的解决方法,主要针对PHP网站: 1. **评估和升级硬件**:首先要确保服务器硬件能够承载当前的流量。例如,普通的P4...

    网站高并发架设第一讲

    在IT行业中,网站高并发架设是至关重要的一个领域,特别是在大型互联网应用或者高流量的电商网站中。本教程以“PHP教程进阶 网站高并发架设第一讲”为主题,旨在帮助开发者理解并掌握如何利用PHP来构建能够处理大量...

    高流量站点NGINX与PHP的优化

    为了确保网站的稳定性和响应速度,在高流量环境下优化NGINX与PHP-fpm配置至关重要。本文将详细介绍如何针对高流量站点进行NGINX与PHP-fpm的优化配置。 #### 一、理解高流量站点的需求 高流量站点通常指的是那些...

    说说大型高并发高负载网站的系统架构.txt

    随着互联网技术的发展与普及,越来越多的大型网站如门户网站等面临着巨大的挑战,特别是在处理高并发请求时。本文将深入探讨这些大型网站如何通过采用一系列技术和策略来应对高并发和高负载的问题。 #### 一、静态...

    大型高并发web应用系统架构分析与设计

    ### 大型高并发Web应用系统架构分析与设计 #### 引言 随着互联网技术的飞速发展,大型高并发Web应用系统已经成为许多企业和组织的关键基础设施之一。这类系统的稳定性、可扩展性和性能对于保障用户体验至关重要。...

    毕业设计:基于PHP高并发高性能秒杀系统.zip

    【标题】基于PHP高并发高性能秒杀系统的设计与实现 在现代互联网环境中,秒杀活动是一种常见的营销策略,它能够短时间内吸引大量用户参与,对系统的并发处理能力和性能提出了极高的要求。基于PHP构建的高并发高性能...

    php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题

    在处理大流量并发的场景,如抢购、秒杀、抽奖等活动时,PHP 面临的主要挑战是如何确保库存的准确性,防止出现商品超售的情况。这个问题通常由于并发请求导致多个用户同时尝试购买同一库存有限的商品,从而使得库存...

    高性能高并发服务器架构

    开源平台的高并发集群思考则强调了社区的力量,利用开源解决方案如Hadoop、Spark进行大数据处理,Elasticsearch进行实时搜索,Kafka进行消息队列等,构建可扩展的分布式系统。 最后,大型、高并发、高负载网站的...

Global site tag (gtag.js) - Google Analytics