Functional requirements:

  • createTopic(topicName)
  • publish(topicName, message)
  • subscribe(topicName, endpoint) Non-functional requirements:
  • Scalable (supports an arbitrarily large number of topics, publishers and subscribers)
  • Highly available (survives hardware/network failures, no single point of failure)
  • Highly performant (keep end-to-end latency as low as possible)
  • Durable (messages must not be lost, every subscriber must receive evert message at least once)

High-Level architecture:

  • All requests hit load balancer
  • Metadata db, metadata service
  • Store messages in temp storage
  • Sender

Frontend Service

  • lightweight web service
  • stateless service deployed across several data centers
  • actions:
    • request validation
    • authentication/authorization
    • TLS (SSL) termination
    • Server-side encryption
    • caching
    • rate limiting
    • request dispatching
    • request deduplication
    • usage data collection
  • request -> reverse-proxy (encryption, compression) -> Frontend service -> may use cache to reduce load