RabbitMQ Retries – The Full Story

RabbitMQ is one of the most widely used message brokers today. A large portion of nanit’s inter-service communication goes through RabbitMQ, which led us on a journey of finding the best way to retry processing a message upon failure. Surprisingly, RabbitMQ itself does not implement any retry mechanism natively. In this blog post I explore 4 different […]

Writing an Elixir Plug Library

Plug is an Elixir specification for composable modules between web application. That’s a very nice way to describe middlewares. For those of you that come from the Ruby world it pretty much takes the role of Rack middlewares. A few weeks ago I searched Google for a Plug library to validate path and query parameters […]

Building a Robust Elixir Dispatcher

  I’m pretty new to Elixir. This language fascinates me as it is based on a paradigm I never experienced before. The ideas of functional programming, processes, message passing and fault tolerance are bundled together into a language and eco system which is fun and productive to work with. Recently during a feature I was […]

How We Monitor Our Kubernetes Cluster

nanit has been using kubernetes on production from its early days and for almost two years now. As with every large and complicated system, we experienced failures on all levels: The Kubernetes level: Node failures, Pod allocation failures etc. The applicative infrastructure level: Redis, RabbitMQ etc. The applicative level: nanit’s web services and video processing mechanisms. […]

StatsD + Graphite Cluster on Kubernetes

<TL;DR> You can find a deployment-ready StatsD & Graphite cluster for Kubernetes 1.5.X here: GitHub – nanit/kubernetes-graphite-cluster: StatsD + Graphite cluster on top of Kubernetes kubernetes-graphite-cluster – StatsD + Graphite cluster on top of Kubernetesgithub.com </TL;DR> Who doesn’t need monitoring? We all do. Today, Graphite is one of the most common picks as a monitoring […]