Jestli dobře koukám, tak skladba řešení byla 1x PHP, 1x node.js, 2x .Net (C#). Tak nevím, jestli to je (možná s výjimkou toho node.js) úplně toolset pro backendy v Seznamu :)
A přimlouval bych se, kdyby byl někde dostupný nějaký jednoduchý graf srovnávající výsledky. Jak se říká, jeden obrázek vydá za 1000 řádků logů :)
Take jsem byl zklaman, ze nikdo neprisel s Pythonem nebo GoLangem, coz je u nas klasika. Ten Node byl prijemne prekvapeni. Technologie jsme ale nijak neomezovali, at si kazdy pise v tom, co je mu blizke. Podminka byla pouze "na internetu volně dostupné technologie."
Na graf zkusime kouknout a treba neco vyrobime, diky za napad.
léto a dovolené, nečtu to tady každý den, tak třeba příště. Rád vymačkávám každou instrukci a každý bajt, pokud to jde.
Ani v jednom ve zdrojových kódech (vč. referenčního) nevidím moc velký důraz na to být opravdu hooodně rychlý a hooodně efektivní. Počítač měl více jader, nízkolatentní disk a dostatek paměti, to je promarněná příležitost z toho nevytěžit víc. Není lepší programování než, když nemusím odevzdáný kód předávat na code review...
na blogu je to verze, když jsme hackathon vymýšleli. Pak jsme si k tomu sedli znova a došlo nám, že když necháme účastníkům tolik paměti, tak to mohou postavit kompletně in-memory a nasaturují 1 Gbit síťovku. Pak by se těžko hodnotilo, kdo poskytl rychlejší řešení, protože by narazili na limit síťové vrstvy. Proto jsme před začátkem RAMku dramaticky omezili právě na 1 GB. Tím jsme donutili účastníky používat disk.
Právě. Třeba náš cíl s PHP byl, že tam přijdeme s jazykem, který je relativně pomalý, za 2 hodiny budeme mít napsáno řešení a to řešení bude přijatelné, ale hlavně bude tzv. dummy a i tak bude konkurenceschopné.
Například jde vidět, že nic necachujeme a persistujeme okamžitě atd.
Taky jsme nijak neřešili v zadání složitě onu stromovou strukturu, která byla v rámci komentářů a prostě v případě, že se chtěly tři úrovně komentů, tak jsme udělali 3 dotazy tak jak to šlo pod ruku.
Výsledek:
Byli jsme 2 a měli jsme naprogramováno za 3 hodiny+-
Pak nám nějaký čas zabrala konfigurace serveru, protože to normálně neděláme. Odevzdaná verze byla hotová i se serverem tuším někdy kolem 1 ráno? Tedy celkový čas včetně piplačky s nastavováním serveru 7 hodin+-
Výherci byli 4, dělali v .netu, což už z podstaty kompilace je rychlejší jazyk a podle jejich slov to do výsledné odevzdané verze trvalo 22 hodin a vymýšlely nějaké složité mechanismy.
Podle výsledků byl náš kód v PHP o nějakých 53% pomalejší, než jejich, takže jsme spokojení.
Samozřejmě jsme si potom doma řekli, jestli je možné, abychom je s PHP předehnali. Trošku jsme zaexperimentovali a povedlo se. Podle BlackFire jsme za dalších 6 hodin stihli appku upravit tak, aby bylo vykonávání cca 3* rychlejší. Dál se nám to už nechtělo zkoušet zrychlit. (Nutno podotknout, že stále necachujeme a persistujeme pořád okamžitě, což jsou nejnáročnější operace)
jak v rychlosti koukám, vy i 4 jste měli hodně podobnou DB strukturu, oni PG, vy Mysql/mariadb, v tom velký rozdíl nebude, jak Nette, tak i ASP.NET Core startují podobně pomalu (cca desítky ms na serverech, na testovacích ntb asi pomaleji), hlavní rozdíl bude v kódu.
Kompilovaný jazyk nemusí rozhodně znamenat rychlejší, má obecně výhodu v lepší správě paměti a typovosti, ale to není všechno, u průtokových api se ten rozdíl často ztrácí, i v php lze dělat aplikace s odezvou v jednotkách ms, nepoužít framework umožní vidět problém z jiné prespektivy a přesně takovéhle akce jsou ideální prostor vyzkoušet něco neostřelého.
Saturovat tu gigabitovou linku s gigabajtem paměti by byl pěkný cíl, člověk by se nad tím musel trochu dopředu zamyslet a zvolit vhodný SW stack a ne replikovat řešení, které používám denně v práci.
:net core je dobra volba, samo o sebe je rochlejsie ako Go aj Node. No na druhej strane sa v nom lepsie a richlejsie pise realny produkcny kod a s kniznicami netreba robit psie kusy.
Neviem preco si kazdy mysli, ze na richlost treba Go... v dnesnej dobe, ked chcem vykon tak sihanem po dotnete, ak to ma byt fakt mikrosluzba a chcem extremnu richlost (kvoli alokaciam) tak Rust. No rozdiel pri spracovavani requestom medzi vytunenym dotnetom a rustom velky nie je. Akurat Rust ma richlejsi statrtup time, ale tych par ms pri restarte serveru nikoho realne netrapi.
Ano su, tie kazdomesacne, kde sa porovnaju najznamenjsie webove tchnologie.
Velkost binarky, no to by som ani nepovedal. Ak robite malu CLI utilitku, tak go je mensi, ale pri webovych aplikaciach je to uplne rovnake. Vapriklad Hasicorp Valut ma 50MB, obdobna dotnetova aplikacia skompilovana tak aby nepotrebovala runtime ma 50MB.
Pametova narocnost, to uz tiez neplati.
Vďaka za podnet, jednoduchý graf dosiahnutých skóre je možné si pozrieť tu: https://ghcdn.rawgit.org/seznam/Hackathon-Brno-2021/main/score-results/performance-final.html