PHP控制網站並發

來源:互聯網
上載者:User
一般來說,一個項目中總是會有一些較難處理的業務,比如業務複雜花樣繁多的搜尋,使用搜尋系統如sphinx,lucence等來處理的話,資料來源的若是變化過快(如頂、踩、瀏覽數之類),則首先推資料的頻率就較難衡量,另外無法精確搜尋或排序。所以一般情況下的做法是通過DB進行搜尋,並且除了盡量將業務分解到程式層面外,還會在DB前加一層cache。但是這樣做也有不少已知的弊端:

1、實際上很多業務無法放到普通的PHP中處理,如一些較複雜的排序、篩選,通過普通的PHP來實現的話效率還不如MYSQL。

2、cache的命中率也不好保證,特別是對一些使用關鍵詞進行查詢的業務,關鍵詞變化太多。


若是遇到惡意刷的話,DB伺服器容易直接掛掉,因此我們可以在程式層面上加一層限制器,限制並發數,該限制器具備以下特點:

1、高效(廢話麼,否則直接刷限制器就刷爆了)。現在是使用memcache進行原子操作計數,可以擴充成使用其他方法。

2、精確到action層。可以單獨限制單個頁面。

3、方便。見仁見智吧

4、成本低廉。包括研發成本與硬體成本。


根據壓測,原先只能100並發的搜尋功能,限制100後,壓測800結果正常。


使用方法如下:


/**

* 搜尋

*/

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

?>

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.