Design a chat messaging system where one sender can select multiple recipients at send time, but the message is not a group chat message. Instead, the system creates separate recipient-specific deliveries.
Core requirements:
-
A sender can send the same message to many recipients at once.
-
Each recipient should only be able to view the message one time.
-
After a recipient reads the message, that recipient's copy must be deleted or made permanently unavailable.
-
One recipient reading a message must not affect another recipient's copy.
-
The system should support online delivery, offline recipients, retries, and large-scale traffic.
Please describe:
-
APIs
-
data model
-
high-level architecture
-
message fan-out strategy
-
read-once enforcement
-
deletion and retention behavior
-
scaling, load balancing, and partitioning choices
-
failure handling and consistency tradeoffs