GopherCon UK 2018, den 2
Nevím, jestli někdo odhalil smysl nadpisů v minulé části (jednoduché 4-dílné řešení můžete psát do komentářů, plus jedno bonusové i v tomto textu), kdy jsme se v článku podívali na první den londýnské Golang konferencce GopherCon UK, která se konala ve dnech 1.-3. srpna.
Po středečních workshopech, kterých jsem se neúčastnil, proběhly dva dny přednášek. Už jsem zmiňoval, že čvrteční přednášky nebyly až tolik Golang-technické (a žádná z nich nebyla advanced) a z tohoto pohledu byl páteční den přínosnější i zajímavější.
🔑 Growing a Community of Gophers
Úvodní keynote Cassandry Salisbury (@Cassandraoid) jsem neviděl — ať už to bylo proto, že jsem se rozhodnul snídat déle, či jít z hotelu na konferenci cca 50 minut pěšky (Londýn je obrovský), anebo proto, že mě téma moc nezajímalo. Jak už jsem psal, téma budování komunity na konferenci (aspoň mezi speakery) silně rezonovalo.
👍 From source code to Kubernetes, a Continuous Deployment tale
Z přenášky Alexandra Gonzáleze (@agonzalezro) si toho moc nepamatuju — jen to, že měl pekné live-demo, ve kterém ukazoval:
- Jednoduché Hello, world! s využitím gorilla/mux.
- Push do GitHub repozitory.
- Webhook + push na (public) Jenkins.
- Deployment do Kubernetes clusteru.
Nic světoborného, takhle si představuju Continuous Deployment. Samozřejmě, chyběly tam testy atd. a čekal bych nějaké modernější Pipelines, než obstarožní Jenkins, ale jinak pěkná a svižná přednáška.
👍 Goroutines: the dark side of the runtime
Konečně přednáška, která přesahovala mé Golang technické znalosti! Roberto Clapis (@empijei) se ponořil do záludností goroutines. Zkuste si tipnout, jaký bude výstup tohoto programu:
Že to bude deset desítek asi nikdo z vás netipoval, co? 🤔
To podstatné z Robertovy přednášky:
- Go má jak goroutines, tak closures — nemíchat!
- Runtime is not preemptive — goroutine is done when it says it’s done.
- Garbage collection (stop the world) — goroutines are asked to yield execution. Čekání na goroutines může blokovat GC → freeze all the cores.
- Goroutine cannot be stopped. Měly by explicitně vracet
return
a přijímat context (s cancel funkcí), nebo done channel. - Check for cancellation wherever possible. Pokud knihovna/funkce cancellation neumožňuje, dodejte svoji vlastní via closure.
A pro zvědavce, jak by měl předešlý kód správně vypadat, aby dával očekávaný výstup (ďábel 😈 je skrytý v detailu).
Pro vysvětlení se podívejte buď na přednášku, nebo si přečtěte Effective Go.
👍 Understanding Go’s Memory Allocator
André Carvalho (@andresantostc) doručil druhou z nejtechničtějších přednášek — vysvětlení, jak funguje Go Memory Allocator:
- Založený na TCMalloc (Thread-Caching Malloc).
- Navíc přidává tiny allocations (k původním small, medium a large alokacím).
- Go (očividně) nemá
malloc
, anifree
. - Pragma
//go:noinline
prevents inlining. - Kompilátor se snaží držet většinu proměnných na stacku (levnější) a jenom ty, které uniknou (escape) dává na heap.
- Volání funkce mallocgc() vkládá kompilátor.
- GC Sweeping:
- Scan all objects.
- Mark objects that are live.
- Sweep objects that are not alive.
- Šikovná funkce ReadMemStats() — runtime statistiky memory allokátoru.
👍 Building Resilient Data Pipelines in Go
Přednáška Granta Griffithse (@griffithsgrant) byla primárně o případu užití Go — vytvoření data pipelines, které přesouvají data z IoT do zákaznických aplikací. Pipelines, které přesouvají data z Apache Kafka nodů do Apache Cassandra nodů, měli původně napsané v Javě, ale kvůli provozním nákladům je začali přepisovat do Golang. Pro porovnání:
- 30 Kafka nodes → 144 Java pipelines nodes → 150 Cassandra nodes = 900.000 writes/sec.
- 4 Kafka nodes → 32 Go pipelines → 9 Cassandra nodes = 450.000 writes/sec.
Po náběhu na stejnou úroveň nodů jako u Java řešení očekávají dvojnásobné množství zápisů do Cassandry.
Design Go data pipelines vypadá následovně:
- Go micro-services
- Go channels
- Message channel — čte data z Kafky
- Notification channel — rebalance notifikace
- Error channel — chyby v Offset Managementu
- OS Signals channel — naslouchání signálům OS pro graceful shutdown
- Message transformation
- Deployované na K8s cluster
Zajímavé bylo také Reliability Testing, něco vy stylu:
- Pošli 50 zpráv,
- “Za-pauzuj” Docker po 10 zprávách,
- “Od-pauzuj” Docker po 30 zprávách.
Celkově, velmi zajímavá přednáška o real-world, large-scale use casu, jakých na koferenci moc nebylo (což mi chybělo).
👍 How do you structure your Go apps?
Od prezentace Kat Zien (@kasiazien) jsem nečekal žádné zjevení, ale ve výsledku to byla příjemná přednáška a i něco nového jsem se v závěru přiučil. Jak strukturovat Go projekt je vousatá otázka. Přednáška shrnula různé layouty a krátce vypíchla jejich charakteristiky. Tedy:
- Flat structure — všechno je v
main
packagi, vhodné pro malé projekty. Z pohledu na soubory je většinou nejasná business doména. - Group by function — klasika, která většinou vede k něčemu, jako je MVC.
- Group by module — seskupení podle business domény. Vede k repetitivnosti (
user.User
,user.AddUser()
atd.) a není intuitivní (kam přidat novou funkci?). - Group by context — vhodné pro komplikovanější aplikace:
- DDD přístup,
- Hexagonal Architecture
- Actor Model = goroutines + channels
Takže, jako vždycky — No Silver Bullet, strukturu svého Golang projektu si budete muset vyřešit sami. 😉
🔑 Athens — The Center of Knowledge
Brian Ketelsen (@bketelsen), mající závěrečnou keynote, přinesl asi nejzajímavější téma celé akce. Obecně, problém verzování a dependency managementu Golang packagů mi na konferenci hodně chybělo — je to nejsilnější a nejbolavější téma posledního půlroku, který jsem s Go strávil. Občas se sice někdo zeptal, kdo používá vgo a kdo používá dep, ale žádná přednáška se tomu nevěnovala.
Brian představil zbrusu nový projekt — Athens, který zastřešuje několik aktivit. Mimo jiné poskytuje:
- Caching proxy server, který může běžet za firewallem.
- Distributed trust, potvrzující autenticitu balíčků.
- Decentralized verification, nezávisející na jednom centrálním poskytovateli (a.k.a. evil corporation).
Co to všechno nabízí (resp. bude poskytovat)?
- Repeatable builds (i pokud je GitHub/GitLab/Bitbucket nedostupný).
- Module validation, využívající hash v
go.sum
souboru (nyní součást Go modules). - Module signing, pomocí sítě distribuovanýcn “notářství” (notaries).
- Discoverability = Notaries + Publishers (collect certificates from Notaries).
Hlavním heslem je: Decentralized, Federated, Independent. Bude hodně zajímavé tenhle projekt sledovat!
Gopher — to be, or not to be?
Celkově hodnotím konferenci pozitivně. Co bych vypíchnul, byla profesionalita, která byla všudypřítomná. Nevím, jestli je v Česku něco podobně srovnatelného. Samozřejmě, nesmím zapomenout na dobré jídlo a catering.
Orientaci na komunitu jsem opakovaně zmiňoval. Což je pozitivní — Go je velice otevřená platforma a byť je to jazyk, který se blíží první dekádě, je zatím relativně mladý a řekl bych, že — minimálně v oblasti cloudu (a cloudové infrastruktury) — ještě stále nabírá momentum (které do Česka zatím ještě moc nedorazilo).
Co mi na konferenci chybělo? Advanced přednášky — pokud má konference 3 streamy, jsou dvě pokročilé prezentace za dva dny málo. Taky mi chybělo víc use case použití, real-world scénářů, kdy Go je dobrá/správná/excelentní volba.
Musím ocenit, že na konferenci bylo relativně hodně holek — na jednu stranu je to trochu překvapující (Go je docela low-level jazyk), na druhou stranu, na konferenci bylo znát, že nastupující/etablovanou generací jsou Milleniálové, což možná jde ruku v ruce.
Takže, za mne palec nahoru 👍 a snad se jednou dočkáme Golang konference i v Česku. 🤞
The Loneliness of the Long Distance Runner
Konference je jedna věc, co dělat ve zbývajícím volném čase je jiná záležitost. Londýn samozřejmě nabízí mnoho lákadel, od volného vstupu do mnoha muzeí a galerií, přes kvantum pamětihodností, až po obrážení tradičních pubů a rozmanitých restaurací s národními jídly.
Byť jsem některé z těchto možností také využil, hlavně jsem si užil Londýn běžecky — sice to není úplně intuitivní volba, ale když to člověk zkusí, zjistí, že tak pokryje docela velký akční rádius, včetně bonusových překvapení. Můžu doporučit. Doprovodné fotografie (vyjma 3 konferenčních) jsou pořízeny právě z těchto běžecko-průzkumných výprav.