V případě 64bitového Linuxu má binárka velikost téměř 23 MB. Pro srovnání: balíček nginx-full v Debian Jessie sice zabírá po rozbalení jen lehce přes 1 MB, pokud jej však instalujete na minimální systém, vyvolá stažení dalších závislostí, které si řeknou o dalších 62 MB.
Snažíte se naznačit, že si nginx do paměti po startu natáhne i veškerý obsah /usr/share/doc? Místo na disku, které zabírají balíčky, je veličina, která je opravdu nezajímavá z libovolného úhlu pohledu
Co je zajímavé, je spotřebovaná paměť per nakonfigurovaný web, per spojení, atp. Sdílené knihovny zabírají v paměti místo jenom jednou (zjednodušeně řečeno).
Aneb fakt mě na závodní dráze nezajímá, že má trabant opravdu ale opravdu lehkou karosérii...
A osobně si myslím, že Go se svým statickým linkováním je security nightmare. CVE-2015-8618, které Vás donutí překompilovat veškerý Go kód používající TLS (resp. RSA klíče) je fakt bezva.
Taky zbožňuji instalaci náhodných binárek z náhodných webových serverů, kde není zjevné, s čím a jak bylo co zkompilováno. Přijde mi to jen o úroveň horší než `wget foo | sudo bash`. Bavíme se tady o kontrole kontrolních součtů a tady není ani vidět jaké verze knihoven výsledná binárka používá. Řekněme, že je v miekově DNS knihovně v nějaké verzi bezpečnostní chyba, tak a teď mi řekněte, jestli jsem v bezpečí nebo ne? Těžko říct, co? GH/miek/dns je jenom git repozitář, který zatím nemá ani jeden release, tj. se při každém sestavení použije aktuální verze z gitu? A mám vlastně správnou verzi z webu, když autor nevystavuje podepsané kontrolní součty, nebo už mám na serveru nějakou pěknou čínsko-rusko-americkou binárku, a tajné služby se přetahují, kdo rychleji stáhne obsah mého disku? No bezva, půlka bezpečnostního týmu právě podala výpověď a druhá půlka se preventivně opila do němoty...
Na takové to domácí hraní, kde to na klik nasadím v throw-away kontejneru, je to dobrý, ale pro seriózní použití směrem ven do Internetu, kde jsou zapotřebí nějaké garance, bych raději pouvažoval o projektu, který bezpečnost bere vážněji.
Go a bezpečnostní aktualizace je docela peklo, jednak je vždy nutné vše nutně kompilovat svépomocí právě kvůli statickému linkování.
Go trpí (teda spíše většina aplikací nad ním) neduhem v podobě definování závislostí pouze na master. Nejenže nedokážu zpětně zkompilovat stejné verze závislostí jako před týdnem, nemám ani přehled o tom, která oprava je již součástí masteru závislosti a která ne.
Peklíčko, pánové. Řešením je si všechny závislosti složitě spravovat třeba přes godeb, trackovat si commity, z kterých se buildí a k tomu si automaticky generovat changelogy a hledat opravy konkrétní bugů a případně redeployovat. Nemáte náhodou někdo lepší řešení?
Caddy je ale opravdu docela návyková věc na takovéto jednoduché spouštění interních appek pro různé potřeby, běží stabilně, snese se supervizorem, v paměti toho tolik nebere. Nezvládá ale vysokou konkurenci a v zatížení není porovnatelný s haproxy/nginx/varnish. Necpěte ho ale na produkci :)
Kde to mám podepsat? :-) To srovnání oproti systémovému balíku bylo opravdu zbytečné, nicméně jinak je článek pěkný, taky mě ten software zaujal (na takovéto "domácí webserverování").
Pamatujete na DLL-hell? Pak na JAR-hell? Teď máme Go-hell... Jako občasný balíčkář jsem se s tím už potkal a je to hodně špatně řešitelná situace, pokud se upstream k tomu bude stavět a nadále chladně. Ono to do sebe "zapadá" - kontejner plný CVEček, v něm běží mega-statická binárka s další várkou CVEček a přes to všechno se odesílá spam, dolují bitcoiny a DDoSuje zatímco autor rajdí na skateboardu a na zádech v batohu MacOS.
Snažíte se naznačit, že si nginx do paměti po startu natáhne i veškerý obsah /usr/share/doc? Místo na disku, které zabírají balíčky, je veličina, která je opravdu nezajímavá z libovolného úhlu pohledu
Co je zajímavé, je spotřebovaná paměť per nakonfigurovaný web, per spojení, atp. Sdílené knihovny zabírají v paměti místo jenom jednou (zjednodušeně řečeno).
Aneb fakt mě na závodní dráze nezajímá, že má trabant opravdu ale opravdu lehkou karosérii...
Děkuji za váš názor. Natahování /usr/share/doc do paměti při normálním použití je samozřejmě nesmysl. Pokud podle vás toto vyplývá z některé části článku, tak se omlouvám, nebyl to záměr. Pokus o srovnání velikosti s nginx je zde zmíněn z toho důvodu, že jsem se s otázkami ohledně přiměřenosti velikosti binárky již několikrát setkal. Proto jsem se snažil číslo zasadit do kontextu pro porovnání.
Spotřeba paměti samozřejmě je zajímavý údaj, nicméně se tady snažíte o zařazení Caddy serveru do kategorie, do které nemíří. Jeho hlavním cílem není rychlost nebo nenáročnost na prostředky, ale jednoduchost nasazení a konfigurace. Vaše přirovnání se závodní dráhou je tedy stejně zcestné, jako byste samořídící automobil od Google hodnotil podle výsledku na oné závodní dráze.
Bezpečnost, kontrolní součty, a komplikace s reprodukovatelností sestavení jsou samozřejmě nezanedbatelná kriteria, ale jsou dána použitým jazykem, a nikoliv projektem či konceptem jako takovým.
Bezpečnost, kontrolní součty, a komplikace s reprodukovatelností sestavení jsou samozřejmě nezanedbatelná kriteria, ale jsou dána použitým jazykem, a nikoliv projektem či konceptem jako takovým.
tady v tom jazyk s tím tolik nesouvisí, go get je výchozí balíčkovací/sestavovací nástroj a je možné použít jiný (godeb si třeba umí uložit konkrétní verze závislostí a poté je znovupoužít), použít git submodules či jiným způsobem sestavit závislosti ke kompilaci. Hlavní problém jsou vývojáři, kteří s tím dělají a kašlou na to.
S tím srovnáváním jste začal Vy v článku. Jen tak mimochodem, nginx(-full) binárka a všechny sdílené knihovny, což je přibližně[*] tento seznam:
14544 /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
14664 /lib/x86_64-linux-gnu/libdl-2.19.so
20648 /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
35176 /lib/x86_64-linux-gnu/libcrypt-2.19.so
62376 /usr/lib/x86_64-linux-gnu/libjbig.so.0
64024 /lib/x86_64-linux-gnu/libpam.so.0.83.1
72136 /lib/x86_64-linux-gnu/libgpg-error.so.0.13.0
72904 /usr/lib/x86_64-linux-gnu/libXpm.so.4.11.0
87912 /usr/lib/x86_64-linux-gnu/libexslt.so.0.8.17
109144 /lib/x86_64-linux-gnu/libz.so.1.2.8
113024 /lib/x86_64-linux-gnu/libaudit.so.1.0.0
137440 /lib/x86_64-linux-gnu/libpthread-2.19.so
138016 /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
141752 /lib/x86_64-linux-gnu/liblzma.so.5.0.0
158616 /lib/x86_64-linux-gnu/libpng12.so.0.50.0
165864 /lib/x86_64-linux-gnu/libexpat.so.1.6.0
195616 /usr/lib/x86_64-linux-gnu/libGeoIP.so.1.6.2
248816 /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.8.0
256144 /usr/lib/x86_64-linux-gnu/libxslt.so.1.1.28
289464 /usr/lib/x86_64-linux-gnu/libjpeg.so.62.1.0
392312 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
426216 /usr/lib/x86_64-linux-gnu/libgd.so.3.0.0
448440 /lib/x86_64-linux-gnu/libpcre.so.3.13.1
479528 /usr/lib/x86_64-linux-gnu/libtiff.so.5.2.0
696008 /usr/lib/x86_64-linux-gnu/libfreetype.so.6.11.1
924096 /lib/x86_64-linux-gnu/libgcrypt.so.20.0.3
1051056 /lib/x86_64-linux-gnu/libm-2.19.so
1215032 /usr/sbin/nginx
1319088 /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0
1465816 /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.1
1738176 /lib/x86_64-linux-gnu/libc-2.19.so
1776592 /usr/lib/x86_64-linux-gnu/libvpx.so.1.3.0
2062720 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
zabírají celkem cca 15MB.
* - přibližně, protože některé z knihoven můžou do paměti natahovat nějaké kousky dynamicky.
Z toho minimálně dva největší kousky (libc a libcrypto) jsou už natažené do paměti kvůli něčemu jinému.
Kdyby to Vaše srovnání nebylo takový do očí bijící nesmysl, tak bych nad tím asi i mávl rukou.
> nikoliv projektem či konceptem jako takovým.
Nepodepsané binárky bez kontrolních součtů na web dal taky onen jazyk? Aha, to je pekelná potvora to Go... No tak to jó.
"Bezpečnost, kontrolní součty, a komplikace s reprodukovatelností sestavení jsou samozřejmě nezanedbatelná kriteria, ale jsou dána použitým jazykem, a nikoliv projektem či konceptem jako takovým."
I kdyby to byla pravda (jakože není), tak:
1. Je mi asi celkem jedno, jestli mám děravý server kvůli jazyku, kvůli standardní knihovně, kvůli samotnému projektu webserveru, nebo kvůli distribuci. Prostě mám děravý server a otázkou potom jsou rizika, možnosti řešení atd.
2. Volba jazyka atd. je taky záležitostí autorů, to není volba, která by jim byla vnucena zvenku...