Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kolejkowanie w aplikacjach PHP
Forum PHP.pl > Forum > PHP
ciekawski
Hej,

mam aplikację, która przetwarza sporo danych non stop. Aktualizacje te wykonują się w cronie cyklicznie.
Zastanowiły mnie jednak kolejki. Czy macie jakieś doświadczenie w tym temacie?
Natknąłem się na http://activemq.apache.org/
Macie może jakieś doświadczenie z kolejkowaniem - jakieś plusy i minusy, możliwe zastosowania?
mathijas
Jeśli przeliczenia następują w dość harmonicznym cyklu, to chyba lepiej będzie napisać skrypt w bashu, który odpalisz CRONem na początku. Ewentualnie uruchomić program jako wątek systemu i niech on tam sobie pętli się w środku. Przeciwwskazania, jakie widzę, to jeśli masz webowy interfejs, przy pomocy którego administrator systemu zmienia samodzielnie godziny uruchomienia CRONa, i może coś popsuć i nawarstwić kilka wątków. Jeśli tak nie jest - śmiało polecam basha.
ano
@mathijas - a co ma "skrypt w bashu" wspólnego z sednem problemu?

Tak abstrahując: Bardzo ciężko lub wręcz niemożliwe jest stworzenie dobrego kolejkowania np. w mysql. To zawsze na jakimś etapie zawodzi.
Więc dobrze, że wziąłeś się za *MQ.
Ja polecam RabbitMQ - bardzo prosto w niego wejść, prosty, ma wszystko co potrzeba (np persistance, potwierdzania wiadomosci itp), ma fajne pluginy (np. bezbłędny panel zarządzania po http), mozliwość tworzenia wielu użytkowików, wysoko wydajny, idealny do tworzenia skalowalnych systemów, dobre biblioteki w PHP do obslugi itp...

Przykłady wykorzystania:
- indeksowanie danych w np. ElasticSearch
- wysyłka powiadomień (sms, emaile cokolwiek)
- logger (logowanie błędów itp)
- "ogólnie" asynchroniczne wywoływanie długotrwałych akcji (np. pobieranie danych z zewnętrznych API, wysyłanie)
- konkretne przykłady firm wykorzystujących na: whoisusing.it/RabbitMQ
mathijas
Ano ma to, że jeśli następna aktualizacja ma czekać aż skończy się poprzednio, to równie dobrze można olać CRONa i zapętlić je w skrypcie. Jak pierwsza się skończy, automatycznie odpali się druga.
ano
Dalej nie rozumiem. tzn do obsługi jakiegokolwiek systemu kolejkowania stawiasz sobie daemona (np. w php) - "konsumenta"...
mathijas
Tak, tak, ale ja się odnoszę nie do samego kolejkowania, tylko do problemu postawionego przez @ciekawski-ego, dlatego nie możemy się dogadać :-). Sorry za niezrozumienie ale możliwe, że wysnułem zbyt daleko idące wnioski :).

Kolega ma aplikację w sposób ustawiczny dokonującą długich przeliczeń - "aktualizacji" na bazie danych - w określonych odstępach czasu. Niektóre aktualizacje działają na tyle długo, że przekraczają czas na wykonanie, i zapewne to było motywem pytania o kolejkowanie. Sugeruję więc, że można to zrobić bez użycia kolejkowania, używając skryptu, który się ładnie zapętli i automatycznie wykona następną aktualizację w momencie ukończenia poprzedniej. W ten sposób aktualizacje nigdy nie wpadną w konflikt a całość powinna być lepiej zsynchronizowana. To oczywiście pod warunkiem, że nie jest istotna godzina uruchomienia następnej aktualizacji, mają się uruchamiać jedna po drugiej a CRON był tylko gwarantem braku konfliktów.

Natomiast powoli odnoszę wrażenie, że chyba pytanie o kolejkowanie faktycznie nie ma nic wspólnego z opisem aplikacji, więc sorry za zamieszanie :-).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.