Design a Distributed Messaging System — Hard System Design Problem