Witam serdecznie forumowiczów.
Mam w tym semestrze przedmiot nazywający się tak samo jak ten dział więc może i mój problem będzie tu pasował.
Otóż ja wraz z kolegą musimy stworzyć: Bibliotekę opartą na wzorcach do szeregowania zadań w środowiskach cloud'owych. Temat nie jest do końca nawet dla nas zrozumiały, prowadzący ostatnio też miał problem nam wytłumaczyć o co dokładnie chodzi. Link do informacji, które zebraliśmy. Myślimy nad wykorzystaniem Google Cloud Platform albo Amazon Web Services. Jeśli ktoś mniej więcej ogarnia te tematy to może jest w stanie podpowiedzieć z jakiś narzędzi moglibyśmy skorzystać z tych cloudów by dało się tam zrealizować temat naszego projektu.
Z góry dzięki za wszelką pomoc.
generalnie z chmury korzystasz głównie po to żeby nie trzeba było szeregować tylko stworzyć na potrzebę wystarczająco mocy obliczeniowej żeby nigdy zadania nie czekały, ale w teorii zawsze są zadania których się nie da policzyć od razu...
ja bym na waszym w celach akademickich zrobił tak:
- dopytaj o dokładniejsze sformułowanie problemu i powiedziec dlaczego o to prosicie
jak nie uzyskacie odpowiedzi to zrobiłbym coś w tym stylu:
- wymyślcie jakiś sensowny problem który da się obliczać na wielu komputerach (zawsze możecie minować bitcoiny jak nie macie pomysłu albo crackować jakieś hasła)
- zamiast myśleć o komputerach w chmurze myśl o jednostkach obliczeniowych, które czekają na zadania (np. pętla, która otwiera połączenie z serwerem i czeka aż serwer coś wyśle)
- jedna z jednostek obliczeniowych będzie szeregować i przyjmować zadania (jeśli potrzeba może być więcej, ale jeśli problem odpowiednio podzielisz nie powinno być to konieczne)
w common lispie masz do tego biblioteke, dopisujesz do tego szeregowanie zadań i jakiś skrypt bootstrapujący na maszynie i masz gotowe: https://github.com/lmj/lfarm/blob/master/README.md
AWS lambda chyba też coś takiego ma
Dzięki za tak szybkie zainteresowanie i rozpisanie się, weźmiemy Twoje podpowiedzi pod uwagę i jutro(w sumie dzisiaj) po zajęciach z tego przedmiotu zwrócę się jeśli coś byłoby jeszcze nie jasne :)
Trochę głębokie wody, rzeczywiście musicie zapytać prowadzącego, bo taki pełnoprawny scheduler zadań to dużo roboty.
https://cloudmesh.github.io/introduction_to_cloud_computing/class/lesson/cluster/yarn.html
https://blog.cloudera.com/blog/2016/01/untangling-apache-hadoop-yarn-part-3/
https://mesos.apache.org/documentation/latest/architecture/
https://research.google.com/pubs/pub43438.html
https://medium.com/@ArmandGrillet/comparison-of-container-schedulers-c427f4f7421
W google'u jest już gotoee narzędzie
https://cloud.google.com/dataflow/ + cloud functions.
Jakby Wam zależało na stricte kolejce to tutaj
https://cloud.google.com/appengine/docs/standard/python/taskqueue/
Możecie w łatwy sposób wysłać n zadań I postawić y maszyn do przetwarzania
krwq napisał(a):
generalnie z chmury korzystasz głównie po to żeby nie trzeba było szeregować tylko stworzyć na potrzebę wystarczająco mocy obliczeniowej żeby nigdy zadania nie czekały, ale w teorii zawsze są zadania których się nie da policzyć od razu...
ja bym na waszym w celach akademickich zrobił tak:
- dopytaj o dokładniejsze sformułowanie problemu i powiedziec dlaczego o to prosicie
jak nie uzyskacie odpowiedzi to zrobiłbym coś w tym stylu:
- wymyślcie jakiś sensowny problem który da się obliczać na wielu komputerach (zawsze możecie minować bitcoiny jak nie macie pomysłu albo crackować jakieś hasła)
- zamiast myśleć o komputerach w chmurze myśl o jednostkach obliczeniowych, które czekają na zadania (np. pętla, która otwiera połączenie z serwerem i czeka aż serwer coś wyśle)
- jedna z jednostek obliczeniowych będzie szeregować i przyjmować zadania (jeśli potrzeba może być więcej, ale jeśli problem odpowiednio podzielisz nie powinno być to konieczne)
w common lispie masz do tego biblioteke, dopisujesz do tego szeregowanie zadań i jakiś skrypt bootstrapujący na maszynie i masz gotowe: https://github.com/lmj/lfarm/blob/master/README.md
AWS lambda chyba też coś takiego ma
A masz jakiś pomysł w jaki sposób te zadania szeregować? Bo po wizycie u prowadzących nic ciekawego się nie dowiedzieliśmy. Nie mamy pojęcia skąd oni wzięli ten temat i zachowują się jakby kompletnie nie wiedzieli co powinniśmy w zakresie tego tematu zrobić
somas3k napisał(a):
Witam serdecznie forumowiczów.
Mam w tym semestrze przedmiot nazywający się tak samo jak ten dział więc może i mój problem będzie tu pasował.
Otóż ja wraz z kolegą musimy stworzyć: Bibliotekę opartą na wzorcach do szeregowania zadań w środowiskach cloud'owych. Temat nie jest do końca nawet dla nas zrozumiały, prowadzący ostatnio też miał problem nam wytłumaczyć o co dokładnie chodzi. Link do informacji, które zebraliśmy. Myślimy nad wykorzystaniem Google Cloud Platform albo Amazon Web Services. Jeśli ktoś mniej więcej ogarnia te tematy to może jest w stanie podpowiedzieć z jakiś narzędzi moglibyśmy skorzystać z tych cloudów by dało się tam zrealizować temat naszego projektu.
Z góry dzięki za wszelką pomoc.
Google Cloud Platform albo Amazon Web Services to tylko prowajder na którym chcesz odpalić swoją zabawkę. Z tego co rozumiem to chcecie
- Zapisywać stan kolejki zadań do wykonania, czy to w pamięci czy to na dysku.
- W prosty sposób dopiąć workera do takiej kolejki zadań .
Jeżeli tak to zaczął bym od takiego czegoś.
Potrzeba jakiegoś storage do przechowywania zadań, może to być super prosty Redis - jedna instancja i lista jako typ danych gwarantuje wam to że tylko jeden worker jest w stanie pobrać jedno zadanie. Oczywiście są tego założenia wady :
- single point of failure (klasyka gatunku) - ale z drugiej strony możecie sobie bardzo dużo rzeczy tutaj sami doimplementować jako np: dynamo layer dla redisa ( czy jakiegoś innego storaga).
- brak tutaj delivery guarantees, czyli wiadomośc może zostać zgubiona (albo jak chcecie taką gwarancje to ACK wiadomości trzeba implementować ręcznie) - ale to chyba ok jak na początek ?
Worker - tutaj wgl czarna magia trochę, bo jakie zadania chcecie szeregować ? co ten worker ma robić, na jakś konfiguracje ma pozwalać ? mogę podać kod takiego workera ?
Taki worker na pewno musi pobierać zadanie z Redis'a, ale to tez na początek może być zwykła pętle while() która od czasu do czasu pyta o zadanie.
Może taki Worker mógłby być definiowany jako kod w javascript a odpalać możecie go w http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html , to jest super proste do zrobienia.
Chyba że to ma być biblioteka w sensie np: javove maven dependency które includujesz i bach działa, jakoś ?
**P.S co to wgl znaczy to szeregowanie ? to znaczy że A ma zostać pobrane przed B czy A ma się WYKONAĆ przez B ? Bo to definitywnie zmienia postać problemu. Bo nawet jak A zostanie pobrane przed B, to na maszynie A może odpalić się GC, może być networki delay i fizycznie ta wiadomośc dojdzie albo wykona się później **