Define the APIs expected from the system. This is your chance to analyze and define the read and write paths so that you can come up with the high-level design...
Room's data structure
Meeting data structure
API root: api/v1/
This API will have GraphQL supportsfor better query experience. Authentication is enabled by integrating with external identity provider.
Room availability
Create meeting
Room management
Describe the overall system architecture. Identify the main components needed to solve the problem end-to-end. Use the diagramming tool to create a block diagram.
Deep dive into 2-3 key components. Explain how they work, how they scale, discuss tradeoffs, capacity, and any relevant algorithms or data structures.
To apply domain driven design, the room booking service manage "meeting aggregates" (data structured is mentioned in API design). the domain microservices with handlers design allow it to scale based on traffic. meeting operation will be put onto message queue so it can be managed across microservice instances. When a meeting handler is processing a room booking request. It will first create the meeting object in the database. Once the meeting object is created, the database (as an event source) will emit meeting created event back to the queue. Then room booking service will reserve the room async then trigger the required notification downstream.
For database writing strategy, writer will gain an aggregate's latest version when write a new record. If the version on an operation isn't the latest one, the operation will fail and we expect the caller to retry again.
Separating meeting creation from room booking as async operations will allow better system throughput.