From the outside building a messaging service seems simple. You accept many small bits of data and deliver them to their recipients.
But packed in that simple description are many underlying assumptions. What happens if a receiving client isn't connected when a message arrives? How will a sending client know its message was received? How do you handle clock skew between clients and the server? A lot can go wrong if you use the wrong tools.
In this talk I'll discuss ways to use Go and Redis in building a highly performant, reliable, and fault-tolerant distributed messaging system.