2010-08-26 16 views
8

Tło

Mam aplikację internetową, która utworzy obraz z danych wprowadzanych przez użytkownika. Utworzenie obrazu może zająć za kilka sekund.Czy ta aplikacja internetowa wymaga kolejki zadań?

Problem

Jeśli pozwolę wątku serwera, który obsługuje żądanie/odpowiedź także generowania obrazu, który ma zamiar związać się wątek na kilka sekund, a może zapełniać mój serwer, wpływa na wydajność zabij szczeniąt itp

Pytanie

powinienem używać kolejki zadań, takich jak Celery, tak że serwer może oddać się tworzeniu obrazu i wrócić do obsługi żądań/odpowiedzi? Nie mam problemu z umożliwieniem użytkownikowi, który tworzy obraz, oczekiwania, ale nie chcę, aby inne osoby miały dostęp do strony.

Odpowiedz

6

Powiem "nie" - na razie.

  • Kilka sekund nie jest tak długo.
  • W każdym razie będziesz musiał zaimplementować rodzaj ankiety (lub przetwarzania komet), aby przesłać obraz do użytkownika.
  • Uczyni to twój system bardziej skomplikowanym.
  • Zaprojektuj system, więc dodanie go później w kolejce zadań jest wykonalne i łatwe.

Najpierw należy uprościć i sprawić, aby działało, ale pamiętaj, że możesz dodać kolejkę zadań później.

Zaimplementuj tę kolejkę zadań, gdy chcesz skalować.

+1

+1: I ... jeśli używasz Apache, będzie on obsługiwał dużo buforowania i współbieżności dla ciebie. Rzeczywiście przy użyciu mod_wsgi możesz mieć wiele, wiele procesów backendu działających równolegle. Do czasu testów porównawczych nie można być pewnym, ale obciążenie, z jakim może sobie poradzić, jest często ogromne. –

+0

Ok. Dzięki za uratowanie mnie N godzin pracy. Główną troską było dla mnie to, że kilka sekund było tak długo ... Jednym z moich osobistych celów było zapewnienie dobrego interfejsu użytkownika i myślałem, że użytkownik wpatruje się w pusty ekran przez kilka sekund, podczas gdy obraz zostanie wygenerowany i wysłany, byłby podrzędny. Gdyby istniała kolejka, mógłbym przynajmniej odpytować i zająć wiadomość lub coś na co popatrzeć. –

+0

@random_person: "patrząc na pusty ekran"? W jaki sposób strona HTML może przedstawiać "pusty ekran"? Jak to robisz? Przeważnie, gdy przesyłam formularz, przez chwilę wpatruję się w poprzednią stronę. Wtedy strona zostaje nagle zastąpiona. Ponadto, wielu ludzi ma ochotę próżniaków w JavaScript, aby pokazać jakąś akcję. Ale nie wiem, jak zrobić "pusty ekran" w przeglądarce. Czy możesz to wyjaśnić? –

0

Mam również witrynę generującą obrazy (Names4Frames) i robiłem takie rzeczy przez AJAX (i PHP). Nie zaobserwowałem żadnych zauważalnych spowolnień (lub martwych szczeniąt), ale strona, o której mowa, również nie generuje dużego ruchu. Nie jestem ekspertem od wątków, i szczerze mówiąc, nie jestem w 100% pewien, co to jest twoja dokładna sprawa i jakich technologii używasz ...

Zasadniczo jedna strona wymaga obrazu z innej strony (Być może nawet znajduje się na innym serwerze), a gdy jest to zrobione, druga strona powraca do pierwszej, każdej istotnej informacji o obrazie do celów przetwarzania/wyświetlania. Jeśli mówimy tylko o kilku sekundach, nie widzę, że jest to prawdziwy problem, chyba że masz do czynienia z MASYWĄ liczbą odwiedzających stale korzystających z tej usługi tworzenia obrazów.

0

Zasada: użyj kolejki, jeśli zadania mogą się kumulować.

W twoim przypadku zadanie może zająć aż do 2 sekundy, zakładając 8 godzin dziennie, możesz zrobić do 8 * 60 * 60/2 = 14400 obrazów dziennie bez współbieżności. Jeśli otrzymasz ponad 7200 próśb dziennie, masz 50% szansy, że jeden z nich się pokryje. Istnieją bardziej wyrafinowane analizy, aby pokazać oczekiwany poziom nakładania, jaki prawdopodobnie uzyskasz; ale wydaje się, że można bezpiecznie wykonać ponad tysiąc zdjęć dziennie przed przeładowaniem.

Teraz pytanie wydaje się łatwiejsze: czy myślisz, że w najbliższym czasie dostaniesz ponad tysiąc lub dwa obrazy? Jeśli tak, ustaw kolejkę; jeśli nie, zostaw to na później.

W każdym razie, zachowaj dobre logi; upewnij się, że możesz stwierdzić, kiedy nakładanie się danych przebiega. Pamiętaj, że po dwukrotnym przetworzeniu dwóch zadań, będą one trwały dłużej, zwiększając prawdopodobieństwo, że trzeci będzie mógł przybyć przed ukończeniem pozostałych dwóch, a czwarty ... po osiągnięciu niewidzialnego progu wydajność spadnie drastycznie. Nie przestawaj spać, po prostu nie pozwól, aby to się stało, zanim zauważysz.