What is CoWIN

It's a website developed by the Indian goverment for booking the vaccine dose

https://www.cowin.gov.in/

Requirements

  • Functional
    • User should be able to book vaccine slots
    • User Should be able to see his status and days remaining in next dose
    • User Should be able download certificate from the site
    • User Should be able to see all available slots in his/her city
  • Non Functional
    • System should be reliable (no data loss should happen)
    • System has to be consistent

Schema

image

Capacity Estimation

  • Assumptions
    • There are around 1Billion + people eligible for vaccine doses
    • Around 10 M people booked slots for vaccine daily
    • There is only one type of vaccine
    • It means there will be = 120 request/ s
    • Total space needed for one row of User table = 6 B (User ID) + 32 B (name) + 10 B (Phone) + 12 B (SSN ) + 2 B (status) + 64 B(certificate link) = 126 B
    • Total space needed by UserDose Table = 6 Byte + 6 Byte + 6 Byte + 2 Byte + 2Byte = 22 Byte
    • Total space needed by Dose table = 6 Byte + 6 Byte + 8 Byte = 20 Byte
    • Total storage needed by 1 record in vaccination centre table = 6 Byte + 32 Byte + 128 Byte + + 8 Byte + 8 Byte = 158 Byte
    • Let's say we have 10 K vaccine centre, then storage needed in an year = 158 * 365 * 10 K = 580 MB
    • Storage needed for User table =. 126 Byte * 1B = 126 GB
    • Storage needed for UserDose = 22 * 1B = 22 GB
    • Storage needed for Dose table = 20 * 2 * 1B (2 dose at least) = 40 GB
    • We can safely assume total storage need will be around = 200 GB
  • We can opt for RDMS as data size is not that huge or we can go with hybrid approach
  • We know Vaccination table needs strong consistency so we can save it in RDMS and rest in NoSQL.
  • We can have 120 hit on DB per sec , for Vaccination table (RDMS), it's bit concerning
  • We can reduced it further by sharding the DB based on city , assuming we have almost 240 city in india , we can reduced it to 1 hit per 2 sec

Network Estimation

  • There will be 120 req /s
  • Considering all the able data to be fetched each time, we need bandwidth around = 128 + 22+20 + 158 = 350 Byte * 120 = 42 Mb/s

Architecture Diagram

image

Comments (10)