Hejto.pl
Motyw strony
Dodaj post

Wpis użytkownika qwarqq w Dyskusje

Inspirator

w Dyskusje

82piorunów

W 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)

Osobistość0piorunów

@qwarqq Plz powiedz mi, że przepisaliście to z Pythona na Rusta xDDD

Mocarz0piorunów

@qwarqq fabric, snowflake czy databricks?

Zawodowiec0piorunów

@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:

Gruba ryba0piorunów

Tu sie zgodzę...pytong nie nadaje sie do "dużych porcji" (zawsze wolne gunwo).

Cieszę się, ze czegoś sie naumiałeś.( ͡° ͜ʖ ͡°)

Autorytet5piorunów

Masz przejęzyczenie w ostatnim zdaniu, powinno być "A python to wciąż najgorszy możliwy język." :P

Fanatyk2piorunów

@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.

Fanatyk2piorunów

@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 🤷

Autorytet2piorunów

@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.

Gruba ryba5piorunów

@AureliaNova dawaj mordo, otwórz puszkę Pandory xD

Fanatyk5piorunów

@qwarqq 310 miesięcznie? Co Wy tam macie, że tak tanio? :thinking_face:

Fanatyk1piorunów

@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:

Zawodowiec0piorunów

@koszotorobur coś Ci to dało? Procent do pensji, sensowną premie?

Fanatyk5piorunów

@koszotorobur nie no w dolarach mówię. Na 2+3, na azure, wystarczy ( ͡° ͜ʖ ͡°)

Fanatyk1piorunów

@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:

Fanatyk5piorunów

@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

Fanatyk5piorunów

@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

Fanatyk10piorunów

@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!

Inspirator7piorunów

@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

Fanatyk17piorunów

@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.

Inspirator2piorunów

@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ą.

Fanatyk5piorunów

@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 🙂

Gruba ryba5piorunów

> 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ł

Autorytet26piorunów

Odkryłeś że ludzie chodzą do pracy żeby zarabiać, a nie pracować :slightly_smiling_face:

Fanatyk1piorunów

@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.

Inspirator2piorunów

@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.

Fanatyk4piorunów

@qwarqq

> 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.

Inspirator1piorunów

@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.

Fanatyk1piorunów

@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 😊

Fanatyk1piorunów

@Marcowy_Kot - jakby powiedział Scala to bym skisł :rolling_on_the_floor_laughing:

Inspirator6piorunów

@Marcowy_Kot zależy od zastosowania, ale tam gdzie przetwarzasz kilkadziesiąt TB danych dziennie: java, rust, ew nodejs. zależy od designu systemu.

Autorytet3piorunów

@qwarqq to nie defekt, to brak znajomości :slightly_smiling_face:

Inspirator7piorunów

@Gustawff prawdę mówisz, ale niestety chyba nigdy tego nie pojmę w pełni :pensive: taki mam defekt.

W zeszłym roku wywalono mnie z roboty za wytykanie jednemu zespołowi, że ich nieumiejętnie napisane aplikacje - qwarqq - Hejto.pl (demo semantyczne)