如果你是Airbnb的系統架構師,你會怎么進行系統設計?
首先,您必須理解業務性質的功能和非功能要求。Airbnb是一個在線平臺,將希望出租房屋的個人與尋找短期住宿和房間的人連接起來。
功能性要求
1.房東
平臺上的酒店經理會向系統輸入有關酒店及其可用性以及想要預訂酒店房間的客戶的數據。這里的酒店經理指的是房東,他們希望在短期內出租房間。
- 能夠在平臺上注冊酒店
- 添加/更新/刪除酒店的房間類型
- 添加/更新/刪除給定房間類型的房間
- 每天定義房間類型的價格和庫存
2. 用戶/顧客
- 能夠按城市、入住日期和退房日期搜索可用酒店
- 能夠選擇酒店,查看所有可用的酒店類型和其價格
- 能夠選擇所需的房間類型并繼續預訂
- 預訂完成后接收有關預訂詳情的通知
非功能性要求
- 處理與酒店經理和預訂流程相關的操作的系統必須高度一致
- 向顧客展示酒店的發現平臺應該高度可用
- 系統應具有低延遲
- 系統應具有高度可擴展性,以處理酒店數量的增加和新顧客數量的增加
- 系統應能夠處理并發請求,以確保沒有兩名顧客能夠在同一天預訂同一間房間
我們可以準備一個高級別的圖表和數據庫模式或實體設計。
讓我們確定將用于此系統的核心REST API:
1.注冊酒店POST /hotel/Register
2.在酒店中添加房間類型POST /hotel/{hotel_id}/room-type
3.在酒店中添加房間POST /hotel/{hotel_id}/room-type/{room_type_id}/room
4.返回附近酒店的列表GET /hotels/location/{location_id}
5.根據酒店返回其詳細信息GET /hotel/{hotel_id}
6.預訂酒店房間POST /booking
7.返回用戶的預訂GET /user/{user_id}/bookings
8.返回酒店的預訂GET /hotel/{hotel_id}/bookings
9.辦理入住手續PUT /booking/{booking_id}/check-in
10.辦理退房手續PUT /booking/{booking_id}/check-out
API 1、2、3將是酒店管理服務的一部分。
API 4、5將是發現平臺的一部分。
API 6、9、10將是預訂服務的一部分。
API 7、8將是預訂歷史服務的一部分。
酒店經理API
- 酒店經理將管理有關酒店、房間類型和價格的詳細信息。
- 酒店經理將發布詳細信息并更新系統以獲取酒店的可用性,這將向異步隊列發送事件,然后由用于搜索目的的AWS Lambda函數消耗。
- 用戶/顧客可以搜索酒店并選擇首選的房間類型。
- 用戶可以通過此帳戶檢查自己的預訂歷史。