详解php处理大并发大流量大存储

目录
  • 一、判断大型网站的标准
  • 二、大型网站带来的一些问题
  • 三、大并发的解决方案
  • 四、大流量解决方案
  • 五、大存储解决方案

一、判断大型网站的标准

1、pv(page views)网页的浏览量

概念 一个网站所有的页面,在24小时内被访问的总的次数。千万级别,百万级别,

2、uv值(unique vistor)独立访客

概念:一个网站,在24小时内,有多少个用户来访问我们的网站。达到10万

3、独立ip,重点内容

概念:一个网站,在24小时内,有多少个ip来访问我们的网站。
uv值约等于独立ip.如果要考虑局域网,uv值略大于独立ip

二、大型网站带来的一些问题

1、大的并发
并发量:在同一时间点(1秒内),有多少个用户同时访问我们的网站。对同一个网址,同时刷新浏览器。达到500,就非常大了。
假如并发量是500,pv值是多少。500*3600*10

2、大流量
网站需要的大的带宽。10G.

3、大的存储
网站中的数据库,表的容量成海量趋势,GT级别,如何快速的查找出想要的数据。

三、大并发的解决方案

1、负载均衡器
硬件:f5-bigip 性能比较好,立竿见影,价格昂贵,一般适合于大型网站公司,网游公司。

软件:
lvs(linux virtual server)linux虚拟服务,加入到linux的内核中。
nginx:可以做web服务器(apache),还可以做负载均衡。

2、负载均衡实现的方式

主要有:
轮询技术:客户端请求服务器轮流转发。
ip哈希:同一ip地址的客户端,始终请求同一台服务器。
最少连接:把请求转发给最空闲的服务器。

3、集群

主要是解决计算机单点故障,在一个集群中的计算机,只有一台计算机工作,其他计算机处于休眠状态,监视正在工作的计算机,当正在工作的计算机出现问题,则休眠的计算机立刻接替工作。

四、大流量解决方案

1、防止我们的网站资源被盗链

可以采用一些非技术手段防止被盗链,在图片上添加水印

2、减少http请求

主要手段就是合并js文件,css文件,背景图片的文件。将浏览器需要的样式文件或者js文件,合并成一个样式文件或js文件。比如通过背景图片举个例子。

3、启用压缩

减少数据传输的数据量,常见的压缩格式是:gzip,deflate.

4、通过浏览器缓存数据内容

在网站中有一些资源,比如js文件,css文件,一些图片文件,更新的频率比较少。通过个设置http的cache-control expires属性来进行设置缓存,可以设置缓存的文件类型,设置缓存的缓存周期,

5、可以把比较占用流量的一些资源,单独组建一个服务器

比如图片服务器,视频服务器等。

五、大存储解决方案

1、缓存技术

通过缓存技术,达到不查询数据库或者少查询数据库的目的。
计算机的访问速度,内存》硬盘文件》数据库
缓存技术主要有:
磁盘缓存(页面静态化),把一个查询数据库的页面变成一个不查询数据库的页面
内存缓存:把经常查询的数据保存到内存里面,下次查询数据时候直接在 内存里面查询。
(memcache/redis/mysql的memory引擎)

2、在设计表的时候,要满足3范式

第一范式是:原子性,字段不能再分割了。只要是关系型数据库就自动满足第一范式:
数据库的分类:
关系型数据库:有行和 列的概念,二维表格。常见的关系型数据库:mysql,sql server,oracle,db2,
非关系型数据库(nosql)面向集合和 文档的,没有行和列的概念常见的有redis/mongodb等。
第二范式:在一个表中不能有完全相同的记录。可以通过设置一个主键。
第三范式:表中的字段不能冗余存储。

3、要给表添加适当的索引

索引非常重要的,可以提高查询速度。
常见索引有:主键索引,唯一索引,普通索引,全文索引,

4、要创建适当的存储过程,函数,触发器等

5、读写分离(主从服务器)

6、分表技术(垂直分割和水平分割)

7、分区技术

把一个表的数据内容,在不同的 区域存储,

8、升级mysql服务器(添加配置:加大内容,64位)

9、要对sql语句进行调优

select * from tablename 该语句不要使用,要按需查询。需要哪个字段的数据,就查询哪个字段的数据。

10、对配置文件进行优化配置 

比如配置mysql数据库的并发量:

以上就是详解php处理大并发、大流量、大存储的详细内容,更多关于php的资料请关注我们其它相关文章!

(0)

相关推荐

  • php并发加锁问题分析与设计代码实例讲解

    在工作项目中,会遇到一些php并发访问去修改一个数据问题,如果这个数据不加锁,就会造成数据的错误.下面我将分析一个财务支付锁的问题.希望对大家有所帮助. 1 没有应用锁机制 1.1 财务支付简化版本代码 <!--?php /** * pay.php * * 支付没有应用锁 * * Copy right (c) 2016 * * modification history: * -------------------- * 2018/9/10, by CleverCode, Create * */

  • PHP解决高并发的优化方案实例

    我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Per Second,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键.举个例子,我们假设处理一个业务请求平均响应时间为100ms,同时,系统内有20台Apache的Web服务器,配置MaxClients为500个(表示Apache的最大连接数目). 那么,我们的Web系统的理论峰值QPS为(理想化的计算方式): 20*500/0.1 = 100000 (10万QPS) 咦?我们的系统似乎很强大,1秒钟可以处理完10万的

  • php处理抢购类功能的高并发请求

    本文以抢购.秒杀为例.介绍如何在高并发状况下确保数据正确. 在高并发请求下容易参数两个问题 1.数据出错,导致产品超卖. 2.频繁操作数据库,导致性能下降. 测试环境 Windows7 apache2.4.9 php5.5.12 php框架 yii2.0 工具 apache bench (apache自带高并发请求工具). 通常处理方法 从控制器可以看出代码思路.先查询商品库存.如果库存大于0 ,则库存减少1,同时生产订单,录入抢购者数据. // 常规代码处理高并发 public functio

  • PHP+Redis 消息队列 实现高并发下注册人数统计的实例

    前言 现在越来越多的网站开始注重统计和用户行为分析,作为网站经常使用的功能,如何让统计性能更加高,这也是我们需要考虑的事情.本篇通过Redis来优化统计功能(以注册人数统计为例). 传统的统计功能都是直接操作数据库把数据插入表中.这样做,对数据库的性能消耗就会比较大. 思路: 这里我们用到了redis的队列,注册的时候先添加到队列,然后在处理的时候出队,并且把人数添加redis里. 代码: <?php //register.php $redis = new Redis(); $redis->c

  • php结合redis高并发下发帖、发微博的实现方法

    发帖.发微博.点赞.评论等这些操作很频繁的动作如果并发量小,直接入库是最简单的 但是并发量一大,数据库肯定扛不住,这时可采取延迟发布:先将发布动作保存在队列里,后台进程循环获取再入库 模拟发布微博先进入redis队列 weibo_redis.php <?php //此处需要安装phpredis扩展 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth("php001"); //连接

  • PHP使用Redis实现防止大并发下二次写入的方法

    本文实例讲述了PHP使用Redis实现防止大并发下二次写入的方法.分享给大家供大家参考,具体如下: PHP调用redis进行读写操作,大并发下会出现:读取key1,没有内容则写入内容,但是大并发下会出现同时多个php进程写入的情况,这个时候需要加一个锁,即获取锁的php进程有权限写. $lock_key = 'LOCK_PREFIX' . $redis_key; $is_lock = $redis->setnx($lock_key, 1); // 加锁 if($is_lock == true){

  • php curl批处理实现可控并发异步操作示例

    本文实例讲述了php curl批处理实现可控并发异步操作.分享给大家供大家参考,具体如下: 通常情况下 PHP 中的 cURL 是阻塞运行的,就是说创建一个 cURL 请求以后必须等它执行成功或者超时才会执行下一个请求:API接口访问一般会首选CURL 在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, 为了提高性能, 可以采用cURL提供的curl_multi_*族函数实现简单的并发. <?ph

  • php多进程模拟并发事务产生的问题小结

    前言 本文通过实例代码给大家介绍了关于php多进程模拟并发事务产生的一些问题,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 表 drop table if exists `test`; create table if not exists `test` ( id int not null auto_increment , count int default 0 , primary key `id` (`id`) ) engine=innodb character set utf

  • PHP开发中解决并发问题的几种实现方法分析

    本文实例讲述了PHP开发中解决并发问题的几种实现方法.分享给大家供大家参考,具体如下: 对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了 在PHP语言中并没有原生的提供并发的解决方案,因此就需要借助其他方式来实现并发控制. 方案一:使用文件锁排它锁 flock函数用于获取文件的锁,这个锁同时只能被一个线程获取到,其它没有获取到锁的线程要么阻塞,要么获取失败 在获取到锁的时候,先查询库存,如果库存大于0,则进行下订单操作,减库存,然后释放锁 方案二:使用Mysq

  • PHP并发场景的三种解决方案代码实例

    在秒杀,抢购等并发场景下,可能会出现超卖的现象,在 PHP 语言中并没有原生提供并发的解决方案,因此就需要借助其他方式来实现并发控制,其实方案有很多种,今天只是举个栗子抛砖引玉,有其他更好的方案你可以自己去玩一玩就好了. 列出常见的3个解决方案有: 使用队列,额外起一个进程处理队列,并发请求都放到队列中,由额外进程串行处理,并发问题就不存在了,但是要额外进程支持以及处理延迟严重,本文不先不讨论这种方法. 利用数据库事务特征,做原子更新,此方法需要依赖数据库的事务特性. 借助文件排他锁,在处理下单

  • PHP利用Mysql锁解决高并发的方法

    前面写过利用文件锁来处理高并发的问题的,现在我们说另外一个处理方式,利用Mysql的锁来解决高并发的问题 先看没有利用事务的时候并发的后果 创建库存管理表 CREATE TABLE `storage` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `number` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=l

随机推荐