Nie wiem o „najlepszych praktykach”. Znam najczęstsze błędy.
Pierwszy błąd: sam DOS
Do przetworzenia długotrwałego zadania używasz modułu obsługi sieci. Może to być złe lub bardzo złe, w zależności od procentu trafień, które stają się długotrwale wykonanymi zadaniami, jak długo trwają i ile utrzymujesz ciągłego ruchu.
Chcesz się upewnić, że nie otrzymujesz więcej niż 1 długotrwale zadanie w ciągu czasu potrzebnego do jego ukończenia. Jeśli zrobisz to sam DOS. Będzie się również pogarszać wraz ze wzrostem natężenia ruchu, przy założeniu, że odsetek i czas pozostaną spójne. Jest to jeden z tych problemów, który sam narzuca ograniczenie wzrostu ruchu.
Drugi błąd: odradzanie się z modułu obsługi sieci
Przywołanie procesu z modułu obsługi sieci do obsługi długotrwałego procesu może być trudny, aw rezultacie również podatny na błędy.
- Musisz poprawnie oddzielić się od rodzica, w przeciwnym razie moduł obsługi sieci czeka na zakończenie procesu przez dziecko.
- Gdy rozwidlasz dziecko w systemie uniksowym, dziedziczy ono otwarte uchwyty od rodzica. Zostaną one automatycznie zamknięte, chyba że zostaną zastąpione. Obejmuje to między innymi połączenia z bazą danych, uchwyty plików, inne otwarte połączenia sieciowe. Wszystkie zostaną zamknięte po zakończeniu procesu potomnego.
Opcje
Zwykle używam at(1)
do czystego odcięcia się od modułu obsługi bez rozwidlania.
Możesz także użyć implementacji odpytywania za pomocą cron
.
Możesz komunikować się z innym procesem serwera, który obsługuje przetwarzanie. Że komunikacja może odbywać się z sockets
, pipes
lub wyższym poziomie abstrakcji, jak REST wywołania HTTP lub routing wiadomości kolejki.