Jestem na etapie projektowania projektu, w którym użytkownik końcowy prześle żądanie ze strony internetowej, które spowoduje odrodzenie długo działającego asynchronicznego przetworzonego zadania. Czy istnieje „najlepsza praktyka” dla tego problemu? Czy usługi internetowe i brokerzy usług są dobrym rozwiązaniem? Czy ma tu zastosowanie kolejka wiadomości Microsoft?
web-development
async
John Ruf
źródło
źródło
Odpowiedzi:
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.
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.źródło
Podejrzewam, że mówisz o kilku minutach.
Jeśli zajmie to kilka minut, możesz uruchomić wątek roboczy w tle i wyświetlić postęp w interfejsie użytkownika. Wiele aplikacji internetowych korzysta z tej metody.
Jeśli jest to więcej niż, powiedzmy, 5 minut, możesz chcieć przekazać zadanie specjalnej usłudze. Jednym z przykładów są raporty generowane przez Google Analytics.
Kolejki Microsoft Messaging można używać do przesyłania informacji z systemu do innego lub komponentu do innego.
źródło