Skip to content

Calendar / Reminder Service — Detailed#

flowchart TB
  subgraph Apps
    APP[Calendar app]
  end

  subgraph Edge
    GW
  end

  subgraph Cal[Calendar]
    CAL[Calendar Service]
    EVT[(Events DB)]
    RECUR[Recurrence expander - RFC 5545 RRULE]
    INV[Invitees + RSVPs]
    FREEBUSY[Free/busy lookup]
    OOO[Out-of-office]
  end

  subgraph Sched[Reminder scheduler]
    DELAYQ[[Delayed queue<br/>per-time bucket]]
    WHEEL[Hierarchical timing wheel]
    LEASE[Per-bucket lease]
    DEDUP[Idempotency keys]
  end

  subgraph Notif
    NS[Notification Service]
    PUSH((APNS / FCM))
    EMAIL
    SMS
  end

  subgraph Sync
    CALDAV[CalDAV / Google Calendar API]
    PUSH_CHN[Realtime change channel]
  end

  Apps --> Edge --> Cal
  Cal --> Sched --> Notif
  Sync --- Cal

    classDef client fill:#dbeafe,stroke:#1e40af,stroke-width:1px,color:#0f172a;
    classDef edge fill:#cffafe,stroke:#0e7490,stroke-width:1px,color:#0f172a;
    classDef service fill:#fef3c7,stroke:#92400e,stroke-width:1px,color:#0f172a;
    classDef datastore fill:#fee2e2,stroke:#991b1b,stroke-width:1px,color:#0f172a;
    classDef cache fill:#fed7aa,stroke:#9a3412,stroke-width:1px,color:#0f172a;
    classDef queue fill:#ede9fe,stroke:#5b21b6,stroke-width:1px,color:#0f172a;
    classDef compute fill:#d1fae5,stroke:#065f46,stroke-width:1px,color:#0f172a;
    classDef storage fill:#e5e7eb,stroke:#374151,stroke-width:1px,color:#0f172a;
    classDef external fill:#fce7f3,stroke:#9d174d,stroke-width:1px,color:#0f172a;
    classDef obs fill:#f3e8ff,stroke:#6b21a8,stroke-width:1px,color:#0f172a;
    class APP,CAL,RECUR,INV,FREEBUSY,OOO,WHEEL,DEDUP,NS,CALDAV,PUSH_CHN service;
    class EVT datastore;
    class DELAYQ queue;
    class LEASE storage;
    class PUSH external;

Recurrence#

  • RFC 5545 RRULEs (e.g., FREQ=WEEKLY;BYDAY=MO,WE).
  • Expand on read or schedule per-occurrence ahead.
  • Exceptions (deletes / modifications) stored separately.

Scheduler at scale#

  • Time-bucketed queue: per-minute buckets.
  • Workers lease a bucket at minute boundary; dispatch.
  • For high-volume reminders, timing wheel with O(1) ops.

Glossary & fundamentals#

Concepts referenced in this design. Each row links to its canonical page; the tag column shows whether it is a high-level (HLD) or low-level (LLD) concept.

Tag Concept What it is Page
HLD Idempotency & retries safe re-execution, backoff + jitter idempotency-retries
LLD REST API design verbs, statuses, pagination, errors rest-api-design
LLD Async models futures / async-await / coroutines / actors async-models
LLD Error handling exceptions vs Result, error boundaries error-handling