Wpis użytkownika qwarqq w Dyskusje
qwarqqInspirator
82piorunówW zeszłym roku wywalono mnie z roboty za wytykanie jednemu zespołowi, że ich nieumiejętnie napisane aplikacje zżerają niesamowite ilości kasy żeby to uruchomić i utrzymać. Oraz że nie da się tego wyskalować. Zwolniono mnie z dnia na dzień, bo okazało się, że w pierwszej kolejności tam grał rolę nepotyzm, a każdy problem można zalać kasą. Przynajmniej wg managera który chronił swojego przyda. Zwolniono mnie z tekstem, że "może się czegoś nauczysz".
W nowej robocie trafiłem do projektu, który robi de facto to samo co poprzedni. Jedyna różnica to kompetencje ludzi dookoła. Parę dni temu udało nam się odpalić podobny system jeśli chodzi o skalę przetworzonych zapytań jak mój poprzedni projekt. Tyle że w starej firmie kosztował ok 10000 USD na miesiąc. Nowy, zoptymalizowany, i nie używający pythona system kosztuje 310 USD miesięcznie.
No więc się nauczyłem czegoś! Czego się nauczyłem? Za głupotę i nepotyzm się płaci. A python to wciąż najgorszy możliwy język gdy masz do czynienia z dużą skalą.
Komentarze (35)
@qwarqq Plz powiedz mi, że przepisaliście to z Pythona na Rusta xDDD
@qwarqq fabric, snowflake czy databricks?
@qwarqq też mamy takiego jednego jak Ty w zespole i wszyscy walczą żeby utkał dziurę bo każdy przychodzi zrobić 8h i chce wyjść ( ͡~ ͜ʖ ͡°)
Niestety w tym przypadku chłop jest niezwalnialny :confused:
Tu sie zgodzę...pytong nie nadaje sie do "dużych porcji" (zawsze wolne gunwo).
Cieszę się, ze czegoś sie naumiałeś.( ͡° ͜ʖ ͡°)
Masz przejęzyczenie w ostatnim zdaniu, powinno być "A python to wciąż najgorszy możliwy język." :P
@AureliaNova Ja strasznie lubiłem Adę. Python też jest spoko, prawie wszystko jest spoko, pod warunkiem odpowiedniego dobrania języka do problemu. C# akurat nie lubię, bo bo od lat jestem trochę anty-MS, a przy okazji wszystkie C#-owe projekty z jakimi miałem styczność były napisane tak sobie.
Erlanga też tak sobie lubię, ale to też raczej przez projekt, przy którym dłubałem, a nie sam język.
@AureliaNova - kwestia przyzwyczajenia do określonej składni 🤷
Ja z te 20 kilka lat temu strasznie nie lubiłem Pythona - ale powolutku zaczął być dla mnie czytelny - niemniej czasem dla dużych klas czy funkcji brakuje tej klamry, ale nie zdarza się to często.
Python to jest taki fast food języków programowania - może nie smakuje dobrze ale przynajmniej szybko ląduje w koszu :stuck_out_tongue_winking_eye:
Jakby na niego nie patrzeć został najpopularniejszym językiem programowania - a niektórym co popularne, choćby zjadliwe, nigdy nie będzie smakowało 🤷
@serel @koszotorobur mialo być śmieszkowanie, ale widzę, że zabrnąłem do złej dzielnicy ⚔️
Także żeby wyjaśnić to raz na zawsze, każdy język służy do czegoś innego: js będzie dobry do frontendu, SQLe do zapytań, Java do backendu, a python jest do dupy
A tak serio serio i prywatnie, to dla mnie jako osoby używającej na co dzień C# i różnych pokrewnych języków/technologii, to pisanie w pythonie było uciążliwe. Przedstawienie się na czytanie kodu w tej składni też było wkurzające, bo się wszystko zlewa w jedno. Gorzej chyba tylko PHP wspominam :) no i Adę, ale to wyłącznie na studiach.
@AureliaNova dawaj mordo, otwórz puszkę Pandory xD
@AureliaNova - to teraz zapodaj jaki jest najlepszy 😁
@qwarqq 310 miesięcznie? Co Wy tam macie, że tak tanio? :thinking_face:
@piotrlionel - wiedziałem od razu przy podejmowaniu tej pracy, że będę za to odpowiedzialny - ocenienie jak bardzo źle jest należało do mnie oraz przygotowanie planu wdrożenia i jego egzekucja - pensja była bardzo dobra - a bonus to był 3% rocznej pensji przy wywiązaniu się z obowiązków w przeciągu roku - oczywiście się wywiązałem, zgarnąłem kasę i znalazłem pracę za jeszcze lepsze pieniądze :face_with_hand_over_mouth:
@koszotorobur coś Ci to dało? Procent do pensji, sensowną premie?
@koszotorobur nie no w dolarach mówię. Na 2+3, na azure, wystarczy ( ͡° ͜ʖ ͡°)
@rith - klaster K8s za 1K PLNów (w konfiguracji 3+5) w AWSie... jakby tak pokombinować z zarezerwowanymi instancjami ARM opartymi o procesory Graviton... :thinking_face:
@koszotorobur o proszę. Też fajna zabawa. Ja ogólnie to jestem przyzwyczajony do tego, że jak ktoś mówi że ma cała aplikacje i chce klaster, i ma być za mniej niż 1k/mc to mówię że się nie da xD
@rith - to pozwól, że ja Ci napiszę jak obniżyliśmy koszty w AWSie jakoś tak dziesięciokrotnie :slightly_smiling_face:
A więc przyjąłem się do firmy co zapuszczała w nocy batch processing i jak zobaczyłem co robią to złapałem się za głowę:
* Używali jednej wielkiej instancji co była cały czas włączona
* Instancja była on-demand (i działała już tak ze 2 lata)
* Aplikacja była napisana w Pythonie + Pandas
* Aplikacja od czasu do czasu musiała w ciągu dnia "doliczyć" jakieś rzeczy i było to liczone przez dosłownie kilka minut na tej ciągle uruchomionej isntancji
W ciągu kilku miesięcy udało mi się:
* Sprofilować kod i wykazać gdzie są największe bottlenecki
* Dogadać z developerami by zoptymalizowali funkcje obróbki danych przy pomocy Cythona
* Zmienić infrastrukturę tak by wszystko było event driven
* Uruchamiać tą jedną nieszczęsną instancję tylko na czas procesowania danych i wyłączać ją gdy nic nie musiało być liczone
W ciągu kilku następnych miesięcy:
* Wykorzystując fakt, że firma została zakupiona przez korpo rok wcześniej - przejść na resellera usług AWS, gdzie za instancje on-demand płaciliśmy jak za takie zarezerwowane na 3 lata
* Doprowadzić do przepisania aplikacji tak by wszytko liczyło się na uruchamianej instancji tylko gdy jest taka potrzeba a przy przerwaniu procesowania danych można było je wznowić na innej instancji - wyciskając dodatkowe oszczędności na infrastrukturze używając domyślnie spot instance z fallbackiem na on-demand
@qwarqq aaaa ok. Myślałem że na jakiejś chmurze coś opędziliście za 310$/mc i się zastanawiam jak to kurde możliwe xD
To najs, fajnie ze się udało trafić do ludzi którym zależy!
@rith przemyślany kod, optymalna infrastruktura... i serwery bare-metal dedykowane ten konkretny workload. Dwa Epyc 4464p. Ogólnie śmiesznie z nimi było musiałem się jeszcze z technikami wykłócać o to które sloty ramu użyli xD
@qwarqq - Python jako klej jest świetny - a optymalizację też da radę w nim zrobić - w poprzedniej firmie użyliśmy do tego Cythona, a w obecnej firmie jeden zespół wybrał przejscie na Polars a drugi na czysty NumPy i Numbę - przepisanie na coś innego nie wchodziło w grę bo nie ma na to zasobów - ale obliczenia w niektórych momentach wykonują się 1K razy szybciej - no i oba projekty działają lepiej niż się na początku wydawało, że będą. Do tego Lead Developer w tym drugim zespole to świetny gość i przerobił wszystkie możliwe scenariusze i poparł je danym ze swoich eksperymentów - z takim ludźmi pracować to przyjemność.
Bez względu, strasznie dużo czasu traci się na serializacji i deserializacji danych - jak to się ogarnie to połowa sukcesu - potem trzeba już kombinować z dostępnymi technologiami i zasobami ludzkimi bo to czasowo i budżetowo się musi śpiąc w działającej aplikacji, która jest krytyczna dla biznesu.
@koszotorobur jako język do sterowania, klej, to faktycznie się sprawdza. jakieś skrypty administracyjne, coś w tym stylu.
Ale jakiekolwiek operacje IO czy na danych to bez bindingów do bibliotek z bardziej sensownych języków nie ruszysz. Taki wspaniały język, że sam nic nie może, a jeszcze jego architektura czyni go kompletnym kaleką.
@serel - no gość jest bardzo ogarnięty technicznie - do tego miły i rozmowny - jak się widzimy urządzamy sobie sesje ostrego narzekania i jedziemy równo po wszystkim bo obydwoje nie cierpimy korpo bulszitu - generalnie to super się dogadujemy - nie oddam go bo jest wart swojej wagi w złocie 🙂
> przerobił wszystkie możliwe scenariusze i poparł je danym ze swoich eksperymentów - z takim ludźmi pracować to przyjemność
@koszotorobur daj mi tego gościa, płacę w złocie. Dżizas, ileż to razy "świetne pomysły" wyjebały system na głupi ryj, bo ktoś tylko happy path sprawdził
Odkryłeś że ludzie chodzą do pracy żeby zarabiać, a nie pracować :slightly_smiling_face:
@qwarqq - no i dochodzimy do sedna - każdy język programowania jest do czegoś przydatny a czym więcej go używamy tym bardziej zauważamy do czego przydatny nie jest :stuck_out_tongue_winking_eye:
Jakbym sam miał robić greenfield project do obrabiania terabjtów danych to zastanawiałbym się nad doborem języka pod to zadanie i jednym z kryteriów byłaby też docelowa architektura (bo w korpo nie zawsze dane jest nam decydować na czym się nasz kod będzie uruchamiał).
Ja prócz Pythona sam programuję w Ruście, Golangu, JavaScripcie - ba kiedyś nawet w Javie i C - i są to jedynie narzędzia, które dobieram do zadania.
A co do Pythona, to widać, że obrali kierunek na zwiększenie wydajności przetwarzania danych - więc w kolejnych wersjach można spodziewać się różnorakich udogodnień, które (powoli) są rozwijane, by zastąpić te mniej oficjalne (niemniej funkcjonalne) rozwiązania.
@koszotorobur tu masz rację, definicja wydajności zależy od wymagań projektu, w przypadku oby projektów o których mówiłem jest to samo: pobrać i przetworzyć określone dane i wypluć je klientowi. W bardzo dużej ilości. Dlatego porównane w tym wypadku jest poprawne. I zgadzam się, że w przypadku pythona, gdy będziesz uważał i pamiętał o wszystkich problemach języka, plus do ciężkich zadań wykorzystasz biblioteki z bardziej dorosłych języków, to masz szansę napisać coś równie wydajnego, co średnio rozgarnięty mid w javie albo rust'cie :)
A co do łęchtania ego, to ponownie masz rację. Głównie dlatego, że w poprzedniej robocie manager z przydum zwalali winę za brak wydajności na infrę. Teraz wiem, że nie ona była problemem.
> Z pythona wydajnego programu nie ukręcisz. Ukręcisz działające coś, ale nie będzie to wydajne. Nigdy.
Mylisz się - będzie wydajny, ale zapewne nie najwydajniejszy - wszystko zależy jak definiujesz wydajności - zdaje mi się, że obecnie dla Ciebie najważniejsza jest szybkość wykonywania się kodu.
To co w nowej firmie napisałeś też pewnie da się przepisać na coś szybciej się wykonującego według naszej obecnej wiedzy - jak dług można gonić tego króliczka?
Cieszę się, że miałeś możliwość zaprojektowania systemu od podstaw i jest na tyle wydajny, że łechta Twoje ego - teraz tylko trzeba go rozwijać, utrzymywać i jeszcze najlepiej zrobić tak by można przekazać development komuś innemu - życzę wielu kolejnych owocnych lekcji.
@koszotorobur już zaraz, za momencik (3.12 też miało być takim przełomem wydajnościowym, nie było)... Ale są obejścia, frameworki i tricki!... Zaczyna to przypominać historię PHP jeśli mam być szczerym :P
Z pythona wydajnego programu nie ukręcisz. Ukręcisz działające coś, ale nie będzie to wydajne. Nigdy.
@qwarqq - Pythona od wersji 3.13 można sobie skompilować z flagą --without-gil - więc nad tym już ostro pracują.
Poza tym od dawna można ominąć GILa - dużo jest poradników jak wyszukasz sidestepping/bypassing/removing GIL.
Może się na Pythonie przejechałeś ale ja go jeszcze nie skreślam 😊
@koszotorobur cokolwiek co nie ma gila xD
@Marcowy_Kot - jakby powiedział Scala to bym skisł :rolling_on_the_floor_laughing:
@Marcowy_Kot zależy od zastosowania, ale tam gdzie przetwarzasz kilkadziesiąt TB danych dziennie: java, rust, ew nodejs. zależy od designu systemu.
@qwarqq to nie defekt, to brak znajomości :slightly_smiling_face:
@qwarqq a co zamiast pythona?
@Gustawff prawdę mówisz, ale niestety chyba nigdy tego nie pojmę w pełni :pensive: taki mam defekt.