T-shaped Pipelines in Go - io.TeeReader and io.MultiWriter
Explains how to use Go's io.TeeReader and io.MultiWriter to create T-shaped data pipelines for inspecting I/O streams without restructuring code.
Ivan Velichko — Experienced software engineer and educator focused on server-side, infrastructure, and Cloud Native technologies, known for making complex systems approachable through clear explanations and hands-on learning.
81 articles from this blog
Explains how to use Go's io.TeeReader and io.MultiWriter to create T-shaped data pipelines for inspecting I/O streams without restructuring code.
A guide to understanding and using the core Go modules (k8s.io/api and k8s.io/apimachinery) for interacting with the Kubernetes API before diving into client-go.
A guide to calling the Kubernetes API directly using HTTP clients like curl, covering authentication, server discovery, and CRUD operations.
Explains fundamental Kubernetes API concepts like resources, kinds, and objects, focusing on structure and terminology for developers.
An introduction to OpenFaaS, a platform for deploying and managing serverless functions on your own infrastructure using Kubernetes or containerd.
A guide to understanding container technology from its Linux foundations, covering namespaces, cgroups, and moving up to Docker and Kubernetes.
A deep dive into the technical differences between Docker containers and Kubernetes Pods, exploring their underlying Linux namespaces and isolation.
A curated list of interactive, hands-on learning platforms for mastering cloud native technologies like Kubernetes, Docker, and Linux.
Explains how HTTP Keep-Alive timeouts between reverse proxies and upstream servers can cause sporadic HTTP 502 errors, detailing the underlying TCP race condition.
A tutorial on using the containerd command-line client (ctr) for managing container images and operations directly.
Explains the OCI Runtime Specification, defining what a standard container is and how it differs from common misconceptions.
Explains how to expose multiple Docker/Podman containers on the same host port without using Kubernetes or reverse proxies.
A technical guide on how to access and set low-level socket options (like SO_REUSEPORT) for HTTP servers and clients in Go's net/http package.
A guide to creating isolated, disposable development environments using Vagrant, Docker, and arkade for reproducible, clean, and efficient workflows.
A developer's perspective on the differences and practical realities of DevOps, SRE, and Platform Engineering roles in web service companies.
A developer shares their pragmatic approach to choosing programming languages based on task suitability, focusing on Python and Go for server-side and infrastructure work.
A cheat sheet covering fundamental Prometheus concepts including metrics, labels, time series, and the scraping process.
A guide to learning PromQL by setting up a controlled Prometheus playground environment to test queries and understand core concepts.
Explains why Prometheus is fundamentally a monitoring system, not just a time-series database, and clarifies its design and query behavior.
A developer shares their experience using the nom parser combinator framework in Rust to build a query language parser for a log analysis tool.