Nowadays, cloud providers offer many managed software solutions — from Redis to Kubernetes, object storage to machine learning, and everything in between. The appeal of managed services is clear — no complex installation and configuration, very little maintenance, lower cost, increased resiliency, etc; everywhere except your host machine. So, how can developers easily build applications which utilise a cloud provider’s services outside of their environment?
Often, the answer to this question is something along the lines of “create a
docker-compose.yml file containing the required services”. …
Debugging a program can often be frustrating. Particularly so when your program is compiled and running inside a Docker container — it can seem like you spend more time compiling than actually fixing the bug! Using a debugger can alleviate some of the pain points associated with debugging.
Delve is a debugging tool for the Go programming language. It’s designed to be simple and not get in the way.
In this post we’ll discuss how you could use Delve and Visual Studio Code to debug a Go application running inside a Docker container.
Observability of production workloads can often be a challenge — particularly so when you run a microservice based architecture. When each service performs one or more operations (such as database queries, file operations, publishing messages, etc) and one user request could invoke any amount of services, how do you debug issues and identify potential bottlenecks?
That’s where distributed tracing comes in.
Distributed tracing is a concept in which requests are tracked as they traverse services for the purpose of debugging and root cause analysis. Typically, a unique request identifier is assigned to the incoming request at the point of ingress…
Serverless has always been a bit of a buzzword and seems to be the trend at the moment — probably justifiably. In this post we’ll discuss building serverless Go functions, testing, configuration and deployment to AWS.
Serverless is essentially an on-demand execution model for computing workloads, which is supported by many cloud providers — such as AWS, Azure and Google Cloud.
Serverless doesn’t mean that there are no servers involved.
Serverless functions are exactly what they sound like — functions which run on-demand on a cloud provider’s platform.
Typically an interface is provided for developers to upload their code and…
If you’ve ever used Docker to compile software during development you’ll quickly find that often your images become large. In this post we’ll discuss how the builder pattern can be used to create leaner images containing only runtime dependencies, and touch on a few Docker best practices.
Often one of the most challenging aspects of building applications packaged with Docker is the resulting image size. In production you want only your compiled application and runtime dependencies present inside your image — there’s no need for development dependencies; such as a compiler, tooling, test files, artifacts, vendor code, etc.
Go software engineer interested in all things devops. I write about Go, containers and tooling.