Muszę pobrać duży plik (1 GB). Mam również dostęp do wielu komputerów z systemem Linux, ale zasady administratora ograniczają każdy z nich do prędkości pobierania 50 kB / s.
Jak mogę dystrybuować pobieranie tego pliku na kilka komputerów i scalać je po pobraniu wszystkich segmentów, aby szybciej otrzymać?
download
cluster
parallelism
Meysam
źródło
źródło
Odpowiedzi:
Wspólne protokoły żądania zakresu obsługi HTTP, FTP i SFTP , dzięki czemu można zażądać części pliku. Pamiętaj, że wymaga to również obsługi serwera, więc może, ale nie musi, działać w praktyce.
Możesz użyć opcji
curl
i-r
lub--range
, aby określić zakres i ewentualnie po prostucat
połączyć pliki razem. Przykład:A w końcu, kiedy zebrałeś poszczególne części, łączysz je:
Możesz uzyskać dodatkowe informacje o pliku, w tym jego rozmiar, z
--head
opcją:Możesz pobrać ostatni fragment z otwartym zakresem:
Przeczytaj stronę podręcznika curl, aby uzyskać więcej opcji i wyjaśnień.
Możesz dodatkowo wykorzystać ssh i tmux, aby ułatwić uruchamianie i śledzenie pobrań na wielu serwerach.
źródło
cat distro* > ...
sprawdź sortowanie plików, ponieważ*
rozwinięta przez twoją powłokę może to posortować w następujący sposób:distro1.iso distro10.iso distro11.iso ...
i w ten sposób konkatenacja w niewłaściwej kolejności.cat distro{1..10}.iso
cat $(seq -fdist%g.iso 1 10)
powinno być bardziej przewidywalne, ale jednak zawiedziecsh
. Zastępowanie$(…)
backtics wydaje się działać w większości powłok.seq
nie jest przenośnym poleceniem. Można użyćdistro001.iso
,distro002.iso
...distroy010.iso
Załadowanie pliku 1 gigabajta z prędkością 50 kilobajtów na sekundę zajęłoby około 5,5 godziny.
Wydaje się, że wysiłek koordynacji wielu komputerów w celu uzyskania częściowych może zaoszczędzić trochę czasu.
Możesz spojrzeć na bittorrent i wykorzystać web seeding wraz z transferami poprzez wymianę równorzędną. Każdy klient może odbierać elementy i dzielić się nimi z siecią lokalną (LAN). Na każdym komputerze kończy się ten sam plik 1 GB, ale scalanie elementów jest zautomatyzowane.
źródło