Trao đổi với tôi

http://www.buidao.com

12/18/09

[Security] Chống Overload Server

Chống Overload Server

Author: PhiLong
Khi site của bạn có số lượng truy cập tương đối lớn thì việc quá tải (overload) của server hoàn toàn có thể xảy ra.

Ví dụ: server của bạn chỉ có thể xử lý được 10000 truy cập tại cùng 1 thời điểm, thì khi người thứ 10001 truy cập sẽ làm cho server bị overload (không truy cập được) để hạn chế tình trạng này ta có thể qui định giới hạn truy cập ví dụ "n < style="margin: 5px 20px 20px;">
PHP Code:

function server_busy($numer){
if (
PHP_OS == 'Linux' AND @file_exists('/proc/loadavg') AND $filestuff = @file_get_contents('/proc/loadavg')){
$loadavg = explode(' ', $filestuff);
if (
trim($loadavg[0]) > $numer) {
print
'Sever đang quá tải , đang dừng dịch vụ';
exit(
0);
}
}
}

$srv = server_busy(10000); // 10000 là số người truy cập tại 1 thời điểm

?>

Có các lưu ý mà bạn cần quan tâm:

1. Web sever phải hỗ trợ php. Nếu không hỗ trợ php mà chỉ là Java thì không áp dụng được, sẽ có đoạn code dàng riêng cho Java.
2. Chỉ áp dụng được trên sever Linux, Sever windows không áp dụng được.
3. Đây là cách giải quyết trong trường hợp tình thế, không thể xem là giải pháp dài lâu kiểu "setup one, run forever", nếu website bạn lớn và có lượt truy cập nhiều, thì bạn chuẩn bị 1 server dự phòng, trong trường hợp server 1 quá 10000 người, bạn tự động gọi tới server 2, thì đoạn code như sau:

PHP Code:

function server_busy($numer){
if (
PHP_OS == 'Linux' AND @file_exists('/proc/loadavg') AND $filestuff = @file_get_contents('/proc/loadavg')){
$loadavg = explode(' ', $filestuff);
if (
trim($loadavg[0]) > $numer) {
include(
"http://abc.com");
exit(
0);
}
}
}

$srv = server_busy(10000); // 10000 là số người truy cập tại 1 thời điểm

?>

Trong đó "http://abc.com" là địa chỉ sever dự phòng của bạn :)