Mam więc interesującą sytuację i nie wiem, jak sobie z tym poradzić.Ustaw limit czasu ładowania pliku z udziału EBS
Mamy proces, który skupia się na naszych danych sprzedaży, a następnie tworzy wykres za pomocą Google Chart. Aby nie uderzać w bazę danych (lub Google), uruchamia się to tylko co 30 minut. Sprawdza poprzedni plik, aby ustalić, czy przekroczył próg 30 minut, a jeśli tak, to tworzy nowy plik. Mamy dwa serwery za równoważnikiem obciążenia. Tak więc oba serwery muszą mieć dostęp do tej samej lokalizacji, aby przechowywać ten plik. Zrobiliśmy to za pomocą udziału EBS, zamontowanego za pośrednictwem NFS (cała nasza instalacja jest w AWS). Ten proces działa dobrze.
Problem polega czasami na tym, że udział EBS jest powolny lub odłączony. Powoduje to efekt marszczenia, podczas gdy nasze wewnętrzne narzędzia czekają na ten jeden plik do przetworzenia (chyba że wyłączysz powiadomienie). Czytałem kilka wątków (takich jak this one), które mówią o stream_set_timeout, ale nie jest jasne, w jaki sposób użyłbyś tego z ładowaniem pliku (to nie jest dokładnie strumień) i nie mogłem znaleźć żadnych przykładów.
Oto urywek do daje wyobrażenie co plik PHP robi
$file = '/ebs/path/to/image.png';
$newfile=false;
if(!is_file($file)) $newfile=true;
elseif(filemtime($file)+1800 < time()) {
$newfile=true;
unlink($file);
}
if(!$newfile){
$i=imagecreatefrompng($file);
header('Content-Type: image/png');
header('Expires: ' . gmdate('D, d M Y H:i:s', filemtime($file) + $timeout) . ' GMT');
imagepng($i);
imagedestroy($i);
exit;
} else {
// Build and output a new file here
}
Jak mogę stworzyć limit czasu dla tego scenariusza?
Główną przyczyną jest "EBS jest wolne lub odłączone", więc najlepszym rozwiązaniem jest naprawienie tego. Niezależnie od tego, czy AWS spełnia swoje zadanie, to kolejne pytanie. –