Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

लॉगिन प्रयासों को कैसे कम करें - PHP और MySQL और CodeIgniter

मैंने एक गरीब आदमी का गला घोंटना तंत्र लागू किया phunction में अकेले एपीसी का उपयोग करके, मैं इसका उपयोग इस प्रकार करता हूं:

// allow 60 requests every 30 seconds
// each request counts as 1 (expensive operations can use higher values)
// keep track of IPs by REMOTE_ADDR (ignore others)

$throttle = ph()->Throttle($ttl = 30, $exit = 60, $count = 1, $proxy = false);

if ($throttle === true)
{
    // IP exceded 30 requests in the last 60 seconds, die() here
}

else
{
    // $throttle is a float
    // number of requests in the last 30 seconds / 30 seconds

    /*
     1 req / 30 = 0,033 sec
     5 req / 30 = 0,166 sec
    10 req / 30 = 0,333 sec
    15 req / 30 = 0,5   sec
    20 req / 30 = 0,666 sec
    25 req / 30 = 0,833 sec
    30 req / 30 = 1     sec
    */

    usleep(intval(floatval($throttle) * 1000000));
}

मैं इसे अपने फ्रंट-कंट्रोलर पर उपयोग करता हूं और मूल्य को मेरी रूटिंग विधि में पास करता हूं, लेकिन यह एक और कहानी है।

लब्बोलुआब यह है कि यदि आप एपीसी का उपयोग करते हैं तो आप चीजों को बहुत तेजी से स्मृति में और कम स्मृति खपत के साथ रखने में सक्षम हैं क्योंकि एपीसी एक FILO पद्धति का पालन करता है। यदि आपको अधिक समयबाह्य की आवश्यकता है तो आप किसी ऐसी चीज़ का उपयोग करने पर विचार कर सकते हैं जो स्मृति आधारित नहीं है।

BTW:MySQL MEMORY इंजन वाली तालिकाओं का समर्थन करता है।

समस्या sleep() के साथ है :

एक मॉड्यूल के रूप में स्थापित PHP के साथ एक विशिष्ट अपाचे वेब सर्वर प्रति उदाहरण लगभग 10 एमबी रैम खाएगा, आपके उपलब्ध रैम से अधिक होने से बचने के लिए कुछ अपाचे सेटिंग्स हैं जिन्हें आप अपाचे शुरू करने में सक्षम अधिकतम उदाहरणों को सीमित करने के लिए कॉन्फ़िगर कर सकते हैं।

समस्या तब होती है जब आप sleep() , वह इंस्टेंस अभी भी सक्रिय है और पर्याप्त अनुरोधों के साथ नए सर्वर शुरू करने के लिए सभी उपलब्ध स्लॉट खा सकते हैं, इस प्रकार कुछ लंबित अनुरोधों के पूरा होने तक आपकी वेब साइट को दुर्गम बना सकते हैं।

PHP AFAIK से इसे दूर करने का कोई तरीका नहीं है, इसलिए अंत में यह आप पर निर्भर है।

सिस्टम वाइड थ्रॉटलिंग के लिए सिद्धांत समान है:

function systemWide($ttl = 86400, $exit = 360)
{
    if (extension_loaded('apc') === true)
    {
        $key = array(__FUNCTION__);

        if (apc_exists(__FUNCTION__) !== true)
        {
            apc_store(__FUNCTION__, 0, $ttl);
        }

        $result = apc_inc(__FUNCTION__, 1);

        if ($result < $exit)
        {
            return ($result / $ttl);
        }

        return true;
    }

    return false;
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. XAMPP में mysql डेटाबेस को कैसे पुनर्स्थापित करें?

  2. qt 5.8 sql कनेक्शन त्रुटि:QMYSQL ड्राइवर विंडोज़ 10 पर लोड नहीं हुआ

  3. मैक पर लैरवेल की स्थापना php कारीगर माइग्रेट त्रुटि:ऐसी कोई फ़ाइल या निर्देशिका नहीं

  4. CSV फ़ाइल को सीधे MySQL में आयात करें

  5. xampp में mysql संस्करण को कैसे अपडेट करें (innodb_additional_mem_pool_size के साथ त्रुटि)