flowchart TD
USER[USER] --> LB{LOAD BALANCER}
LB --> API_GATEWAY[API GATEWAY]
API_GATEWAY --> USER_SERVICE[USER SERVICE]
API_GATEWAY --> TICKET_SERVICE[TICKET SERVICE]
USER_SERVICE -- CREATE USER --> MASTER_DB[(MASTER DB)]
USER_SERVICE -- LOGIN --> READ_REPLICA_DB
MASTER_DB --> READ_REPLICA_DB[(READ REPLICA DB)]
TICKET_SERVICE --> TICKET_CACHE[CACHE]
TICKET_CACHE -- VIEW TICKETS/VENUES/EVENTS --> READ_REPLICA_DB
TICKET_CACHE -- ADD/SELL TICKETS/VENUES/EVENTS --> MASTER_DB
TICKET_SERVICE -- BUY TICKET --> PAYMENT_SERVICE[PAYMENT SERVICE]
PAYMENT_SERVICE ----> EXTERNAL_PAYMENT_SERVICE[EXTERNAL PAYMENT SERVICE]
PAYMENT_SERVICE --> MASTER_DB
Explain how the request flows from end to end in your high level design. Also you could draw a sequence diagram using the diagramming tool to enhance your explanation...
Dig deeper into 2-3 components and explain in detail how they work. For example, how well does each component scale? Any relevant algorithm or data structure you like to use for a component? Also you could draw a diagram using the diagramming tool to enhance your design...
Explain any trade offs you have made and why you made certain tech choices...
Try to discuss as many failure scenarios/bottlenecks as possible.
What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?