Three Billy Goats Gruff A developer's tale: from a monolith to containers to functions Michael Hausenblas @mhausenblas Developer Advocate, Red Hat 2018-08-02, GopherCon UK, London
Hit me up on Twitter: @mhausenblas 2 • Developer Advocate @ Red Hat (Go, Kubernetes, OpenShift) • Developer Advocate @ Mesosphere • Chief Data Engineer @ MapR • Applied research (IE/AT) • Nowadays mainly Go (Python, Node, Java, C++) • Dev turned ops $ whois mhausenblas
Hit me up on Twitter: @mhausenblas As monolith … M • Two Go routines: • serving static assets and API for Web app • metadata extraction • Using Go stdlb only • Deployed directly as a binary along with static assets (e.g. Terraform on a VM)
Hit me up on Twitter: @mhausenblas As containerised microservices … C • Two containers: • serving static assets and API for Web app • metadata extraction • Using Minio as shared storage • Deployed using Kubernetes primitives
Hit me up on Twitter: @mhausenblas Alternative container-based architectures C • lift and shift (aka: put monolith into a container) • both app containers in one pod, share data via local volume • app containers in different pods, share data via persistent volume
Hit me up on Twitter: @mhausenblas F As functions … • Three functions: • upload an image • list images along with metadata • metadata extraction • Using S3 as shared storage (also: static assets served from bucket) • Deployed using Lambda, API Gateway, and CloudWatch
Hit me up on Twitter: @mhausenblas 25 • From monolith to containers: pretty straight-forward • Functions requires different way of thinking • Both containers & functions increase dev/deploy velocity but also introduce new challenges: • containers: how to build/maintain images, routing • functions: how to debug and orchestrate Lessons learned
Hit me up on Twitter: @mhausenblas 26 • Containers: big advantage is due to Kubernetes you now have portability and avoid lock-in (but also: do containers make sense here?) • Functions: big advantage is devs don’t need to bother with the infra bits but low-level CLI unusable (need CF, SAM, Serverless framework) • Ratio of “code to config” (deployment descriptors, etc.) Lessons learned