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