文档章节

PHP控制站点并发

有些服务器
 有些服务器
发布于 2015/10/14 20:10
字数 506
阅读 66
收藏 1

一般来说,一个项目中总是会有一些较难处理的业务,比如业务复杂花样繁多的搜索,使用搜索系统如sphinx,lucence等来处理的话,数据源的若是变化过快(如顶、踩、浏览数之类),则首先推数据的频率就较难衡量,另外无法精确搜索或排序。所以一般情况下的做法是通过DB进行搜索,并且除了尽量将业务分解到程序层面外,还会在DB前加一层cache。但是这样做也有不少已知的弊端:

1、实际上很多业务无法放到普通的PHP中处理,如一些较复杂的排序、筛选,通过普通的PHP来实现的话效率还不如MYSQL。

2、cache的命中率也不好保证,特别是对一些使用关键词进行查询的业务,关键词变化太多。


若是遇到恶意刷的话,DB服务器容易直接挂掉,因此我们可以在程序层面上加一层限制器,限制并发数,该限制器具备以下特点:

1、高效(废话么,否则直接刷限制器就刷爆了)。现在是使用memcache进行原子操作计数,可以扩展成使用其他方法。

2、精确到action层。可以单独限制单个页面。

3、方便。见仁见智吧

4、成本低廉。包括研发成本与硬件成本。


根据压测,原先只能100并发的搜索功能,限制100后,压测800结果正常。


使用方法如下:


<?php

    /**

     * 搜索

     */

    public function search(){

        //增加计数器功能,超过次数则返回系统繁忙

        $viewlimiter = Library::load('viewlimiter');

        //访问限制器的名称,请用controller+action,尽量单个页面保持唯一

        $limitName = 'search_search';

        //最多同时访问数

        $limit = 100;

        //若是超过数量则直接返回

        if(!$viewlimiter->check($limitName, $limit)) {

            ajaxOutput(0, $this->lang->line('multi_search_limit'));

        }


        /*----复杂变态的业务逻辑-----*/

        $xxxModel->search($params);

    }

    //end func

?>


© 著作权归作者所有

共有 人打赏支持
有些服务器
粉丝 4
博文 49
码字总数 86607
作品 0
南昌
私信 提问
apache限制并发数,IP,带宽设置

给大家推荐两个Apache模块,一个是modvhostlimit,用来限制请求并发数,一个是modlimitipconn,用来控制 Apache的并发联接数,通过该模块可以限制同一来源IP的并发联接数。另一个模块是bwmod...

欣儿
2015/01/09
0
2
从分布式数据库结构入手讲解其前世今生

由于分布式数据库克服了集中式数据库的许多缺点,并且自然地适应于许多单位地理上分散而逻辑上统一的组织结构,因此,20多年以来从理论到实践都得到了迅速发展,并取得了决定性成果。   分...

Oscarfff
2016/06/10
294
0
web压力测试,本机压的结果和内网机压的结果qps差不多,但是php进程使用度却不一样?

压力测试,使用web服务器本机,ab测试, ab -c 1000 -n 10000 http://www.xxxx.com/tp.php 结果为 Requests per second: 463.98 [#/sec] (mean) 压力测试期间观察php-fpm状态页,显示空闲进程...

玖伍陈海天
2017/06/26
94
4
十个免费的WEB压力测试工具

本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的。这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能。 0. Grinder � Grinder是一个开源的JVM...

Jay_Wei
2015/12/27
119
0
十个免费的 Web 压力测试工具

本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的。这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能。 0. Grinder – Grinder是一个开源的JVM...

oschina
2012/06/25
242.1K
18

没有更多内容

加载失败,请刷新页面

加载更多

Mariadb二进制包安装,Apache安装

安装mariadb 下载二进制包并解压 [root@test-a src]# wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.t......

野雪球
今天
3
0
ConcurrentHashMap 高并发性的实现机制

ConcurrentHashMap 的结构分析 为了更好的理解 ConcurrentHashMap 高并发的具体实现,让我们先探索它的结构模型。 ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEnt...

TonyStarkSir
今天
3
0
大数据教程(7.4)HDFS的java客户端API(流处理方式)

博主上一篇博客分享了namenode和datanode的工作原理,本章节将继前面的HDFS的java客户端简单API后深度讲述HDFS流处理API。 场景:博主前面的文章介绍过HDFS上存的大文件会成不同的块存储在不...

em_aaron
昨天
4
0
聊聊storm的window trigger

序 本文主要研究一下storm的window trigger WindowTridentProcessor.prepare storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentProcessor.java public v......

go4it
昨天
7
0
CentOS 生产环境配置

初始配置 对于一般配置来说,不需要安装 epel-release 仓库,本文主要在于希望跟随 RHEL 的配置流程,紧跟红帽公司对于服务器的配置说明。 # yum update 安装 centos-release-scl # yum ins...

clin003
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部