Workshops

Web Services in Go

Bill Kennedy

Summary

The Ultimate Service is a class for any Go developer who wishes to learn how to build production ready and well tested web services in Go. This class provides an intensive, comprehensive and idiomatic view of building web services using community accepted idioms and practices.

Details

The class goes beyond just the use of the http package and focuses on building CRUD based services with logging, observability and debugging. We believe this class is perfect for anyone wishing to build production ready, scalable, fast, and highly concurrent web services in Go.

Start/Stop

Logging/Configuration

Web Framework Design

Database Support

Testing Support with Docker

Metrics/Tracing

Prerequisites

Having a background in software development. Experience writing services in any other language is a bonus.

What a student is expected to learn

Everyone is going to be mentally exhausted by the end of the day. We will be challenging every student to think about what they are doing and why. If you want to be a better Go developer, code reviewer, designer and architect, this is the class you want to take.

Bio

William Kennedy is a managing partner at Ardan Labs in Miami, Florida, a mobile, web, and systems development company. He is also a co-author of the book Go in Action, the author of the blog GoingGo.Net, and a founding member of GoBridge which is working to increase Go adoption through diversity.

Social Links

Twitter: https://twitter.com/goinggodotnet

Github: https://github.com/ardanlabs/gotraining


Go & Kubernetes In The Real World

L Körbes and Verónica López

Prerequisites

Previous software development experience is expected (familiarity with Git, Bash, IDEs, and so on), and also a basic understanding of the underpinnings of cloud computing, e.g. what are containers, Kubernetes, monoliths, Dockerfiles, and the like. Think of it as “good to great” training—we won’t go into details on fundamentals.

Workshop summary

Kubernetes solved a lot of problems, but it created a clumsy development workflow. In this workshop, you’ll learn your way past that, and how to work effectively with Kubernetes as a developer.

Workshop description

Kubernetes solved a lot of problems, but it created a clumsy development workflow: Every code change requires fiddling with containers, registries, and manifests. Managing config files isn't trivial. Distributed debugging; a mystery. Dev clusters are tricky to set up, and sharing cluster state among team-members is mostly fiction.

Details

In this workshop we’ll learn how to work effectively with Kubernetes as developers.

First, we'll break a simple monolith into separate services, and use a very basic setup to deploy these to Kubernetes.

Next, we'll wire up some tooling to create a smooth development workflow, and start implementing best practices—some Go-specific, some general to microservices.

Lastly, we'll discuss some lessons from the trenches: managing hordes of config files, debugging, tracing, CI/CD, and so on.

What you'll learn

Come learn how to make your Kubernetes dev workflow not only seamless, but amazing to use!

Outline

Part I: The Cheapskate Microservice Setup

  • Split a monolith into separate programs that talk via HTTP/JSON
  • Wire them up with simple Dockerfiles and toss it all into Kubernetes

Part II: Microservice Development The Right Way

  • Dev cluster setup (options, and laptop vs. cloud discussion)
  • All the dev tooling required for a smooth experience
  • Fixing the implementation
    • Go modules & contexts
    • Microservices “design for failure” mindset (implementing timeouts, exponential backoff, health & readiness checks, etc.)

Part III: Lessons From The Trenches

  • Managing hordes of config files
  • Witchcraft to make the time from code change to code running as small as possible
  • Implementing gRPC
  • An overview of debugging, tracing, and CI/CD

Bios

L Körbes does developer relations at Tilt. Having worked at both Garden and Tilt—two of the very few companies 100% focused on the development experience side of Kubernetes—L is immersed in developer-facing issues, and constantly working to solve them. They first got acquainted with Kubernetes while writing code for kubectl, in a SIG CLI internship. They've spoken about Kubernetes and Go at world-famous events, and at countless local meet-ups. L is a proud recipient of a 'Best Hair' award.

Social Links

https://twitter.com/l_korbes
https://www.linkedin.com/in/l-k%C3%B6rbes/


Verónica is a Software Engineer at DigitalOcean, who finds joy solving distributed systems problems with Go and Elixir. In her spare time, she contributes to Kubernetes as part of the Release Team.

Social Links

https://twitter.com/maria_fibonacci
https://github.com/Verolop


Introduction to gRPC

Tim Raymond

Description

Building distributed systems can be extremely complex, but it doesn’t have to be. gRPC was created as a high performance RPC framework that makes it easy for to build client/server applications. Using protocol buffers, you can define both data messages and procedure calls that turn into easy to consume structures and services in Go.

What a student is expected to learn

Students will learn how to define Protocol Buffers, as well as how to properly modify them for future revisions to be backwards compatible. They will also learn how to define and consume simple requests via RPC (known as unary calls), as well as more advanced client, server, and bi-directional streaming services. Finally, the students will learn how to create the boilerplate client and server applications, as well as how to create middleware, secure their services, and if time permits, to monitor and track their rpc calls across their distributed application structure.

Prerequisites

A basic understanding of the Go programming language. Beginners are highly encouraged to attend this training. While not necessary, it will be helpful if you have completed the Go tour (https://tour.golang.org).

Presenter’s Bio

Tim Raymond is a full-stack developer with over six years of experience writing Go for companies such as USA Today, InfluxData, and Mattel. He's worked on everything from publishing pipelines, gRPC APIs, IoT backends, and interactive React frontends powered by Go backends. Prior to his involvement in the Go community, Tim served as an organizer for the Boston Ruby Group. His professional interests range across web applications, compilers, networking, performance, and cryptography.

Social Links

Github - https://github.com/timraymond

Twitter - https://twitter.com/tim_raymond

LinkedIn - https://www.linkedin.com/in/timothyjraymond/