Welcome to the system design interview channel. Today we design a notification service. Let's start with the problem statement. In the world of web services there are many scenarios when messages need to be sent in a reaction to some event. For example, when credit card transaction amount exceeded a limit and card holder needs to be notified. Or service monitoring system encountered a large number of faults produced by API and on-call engineer needs to be notified. In more general terms, let's say there is a component called Publisher which produces messages that need to be delivered to a group of other components, called Subscribers. We could have setup a synchronous communication between Publisher and Subscribers, when Publisher calls each Subscriber in some order and waits for the response. But this introduces many different challenges: hard to scale such system when number of subscribers and messages grow and hard to extend such solution to support different types of subscribers.