Go is, without doubt, a great language for writing massively concurrent programs. Nevertheless, our experience running Go under extreme load shows that there comes a point where assumptions and decisions made in Go runtime bite back on its users and lead to inferior performance, especially in high-throughput & high-load applications. This talk covers main reasons for this to happen and explores an interesting way to work around this issue: automatic local sharding with Docker.
Using Docker, local load-balancer and creativity, we can automatically shard & pin our apps in such a way so that the external observer (client, another microservice) would never see any difference. The result is that apps run faster, resource utilization is better, engineers are not frustrated when their Go suddenly breaks down and runs slow because they have a solution!