Skocz do zawartości

Dedyk czy VPS? Cron i cURL non stop.


kokosanka

Rekomendowane odpowiedzi

Witam wszystkich.

Chciałem poprosić znawców tematu o radę w sprawie wyboru hostingu dla mojego serwisu.

Problem: cron odpalający co minutę skrypty php, które z użyciem cURL pobierają w pętli kilkaset stron, parsują dane (preg match), zapisują do bazy danych, ewentualnie uzupełniają dane wysyłając żądania POST. Skrypt zapuszczony w pętli. Z racji, że php nie jest wielowątkowe, skrypt pobiera strony pokolei w pętli - czas wykonywania skryptu około 40 sekund (na shared hosting na az.pl). Gdy dorzuciłem drugiego crona, zostałem obdarowany mailem od admina az.pl, że mam to wylączyć bo serwer sie blokuje (pozera cale zasoby). Także 2 skrypty php odpalone przez crona równolegle zamulily serwer tak że moja strona wogóle była niedostępna, oraz innych klientów również.

Stąd potrzeba przejscia na VPS lub dedyka. Wolałbym zacząć od VPS, gdyż to tańsza sprawa.

Pytanie:

1. Co proponujecie aby rozwiązać problem skryptów php działających w sposób ciągły i praktycznie blokujących serwer? Na VPS myślę że sytuacja może być podobna, tylko że po odpaleniu np dopiero 10 skryptów. Zależy mi na tym aby "frontend" serwisu WWW był dostępny non stop i działał bez zająknięcia, bez względu na to czy skrypty w tle działają czy nie (coś jakby wydzielenie dla apache gwarantowanego czasu procesora, najwyzszy priorytet w systemie czy cos). PHP jest łakome na zasoby systemu i pożre tyle ile mu się da - jak można zoptymalizować równolegle pracujące skrypty php? Czy przepisanie tych skryptów np do perla, który radzi sobie z wielowątkowoscia naprawiłoby sprawę? Jak wy odpalacie te różne skrypty do spamowania po tysiąc stron w minute a serwer jakoś żyje (mam na mysli takie skrypty w php, a nie oprogramowanie korzystajace z polaczen asymetrycznych)?

2. Który VPS wybrać na początek? Zero doswiadczenia w zarządzaniu serwerami, jedynie za pomocą DA, cPanel. Myslalem nad hetzner.de, gdyż cena jest przystępna i opinie bardzo dobre.

Dziękuję za rady i pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

W większości VPSów i tanich dedyków i tak będziesz miał do czynienia z jednym rdzeniem, więc przepisanie do perla niewiele Ci pomoże. Lepiej pomyśleć nad jakąś optymalizacją samego kodu.

Jak się nie znasz na serwerach to masz dwie opcje (zakładając, że wolisz VPS od np. kimsufi): vps z dostępem do root (np. statnet) + zaufany admin (np. Patryk z neteasy, Paweł z hostinghouse itd.) lub vps managed (dobrą ofertę ma neteasy).

"Szaleństwem jest chodzenie po ulicy z połówką melona na głowie i powtarzanie: Jestem chomikiem"

Dick Steele, Agent WD-40 [*]

Odnośnik do komentarza
Udostępnij na innych stronach

Witam wszystkich.

Problem: cron odpalający co minutę skrypty php, które z użyciem cURL pobierają w pętli kilkaset stron, parsują dane (preg match), zapisują do bazy danych, ewentualnie uzupełniają dane wysyłając żądania POST. Skrypt zapuszczony w pętli. Z racji, że php nie jest wielowątkowe, skrypt pobiera strony pokolei w pętli - czas wykonywania skryptu około 40 sekund (na shared hosting na az.pl).

40 sekund czas wykonywania i uruchamiany co minutę :)

Nie znam oprogramowania, ale na 90% jestem pewien, że jest zła logika w nim jeśli musi tak często aktualizować dane.

Jeśli już potrzeba taki akcji trzeba myśleć o rozwiązaniach programowych np program wykonywalny C/C++ skompilowany na serwerze realizujący żądania wielowątkowo dane obrabiane przez program lub zapisywane w bazie do dalszej obróbki przez PHP.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

zoptymalizować kodu się bardziej nie da, gdyż przez fakt niewątkowości php i użycia curla, muszę poprostu czekać aż strona zostanie pobrana - na tym skrypt traci najwięcej czasu, nie na parsowaniu treści i operacjach na bazie danych. mógłbym odpalić np 200 skryptów php naraz z czego jeden by pobierał po jednej stronie wówczas czas wykonania każdego z nich byłby krótki, wielkość łącza wykorzystana jak należy (bo co mi po 100 mbit łączu jak skrypt pobiera tylko w jednym momencie strone o rozmiarze 20kB), ale utworzenie 200 procesów tak nagle to chyba niezdrowe dla stabilności serwera.

crona nie mozna ustawic aby wywolywal skrypt co sekunde, jedynie co minutę, więc nie wiem jak to rozwiązać. to w jaki sposób zmienic logike działania tego crona i skryptów aby zarzadzanie zasobami serwera było optymalne?

Narazie jest tak:

1. Jeden skrypt php pobierający w pętli po kolei strony (obciążenie niepotrzebne procka, gdyż większość czasu czeka na pobranie strony nic nie robiąc a mimo to zabiera 100% mocy - takie jest php)

2. Strony pobierane są jedna po drugiej czyli maksymalnie jedna naraz (marnowanie łącza i wydłużenie czasu na ukonczenie danej operacji)

3. Skrypt wykonuje się długo, ponad 30 sekund.

A najlepiej zamienić to na tak:

1. Wiele skryptów php wykonujących się krótko - ponizej sekundy (pobiera jedna strone). Dzięki temu nie obciąza procesora na bezczynnym czekaniu na zaladowanie strony, wykonuje procesy równolegle.

2. Strony pobierane sa wszystkie w tym samym momencie - skuteczne wykorzystanie potężnego łącza.

3. Czas całej operacji wynosi maksymalnie 2 sekundy.

Same plusy w drugim przypadku, ale czy odpalenie nagle 1000 nowych procesów php przez crona nie ubije serwera i akurat frontend wlasnie w tym momencie nie bedize dostepny? Jakby to zrobic?

Odnośnik do komentarza
Udostępnij na innych stronach

Jaki ciekawostkę Ci powiem, że jak będziesz zbyt wiele żądań wykonywał z serwera to mogą Cie wywalić z hostingu - lepiej się upewnij.

@ale czy odpalenie nagle 1000 nowych procesów php przez crona nie ubije

co z żądaniami w cURL - chyba żartujesz :)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

kombinuje z curl_multi.

po walce z różnymi pseudo multi-wątkowymi rozwiązaniami dla PHP wniosek jeden: php nie nadaje się do tego typu zadania i tyle.

Jaki język wybrać do implementacji takiego zadania? Coś co bezproblemowo wspiera prawdziwe wątki, przesył asynchroniczny, obsługę mysql i da sie to wywoływać cronem w srodowisku linux (pomijając C).

czyzby tylko perl? nie usmiecha mi sie uczyc specjalnie tego jezyka :/

a jakis sposob z skryptami powloki? np bash ktory by pobieral wgetem te strony jako pliki tymczaswoe, pozniej parsowanie przez php. czy wywolanie 25 instancji wgeta do pracy z basha zakluci dzialanie frontendu apache?

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności