1.什麼是Instagram?
Instagram是一項社交網絡服務,它允許使用者上傳照片和視訊,并與其他使用者共享。Instagram使用者可以選擇公開或私下共享資訊。任何公開共享的内容都可以被任何其他使用者看到,而私人共享的内容隻能由指定的一組人通路。Instagram還允許其使用者通過許多其他社交網絡平台進行共享,如Facebook、Twitter、Flickr和Tumblr。
我們計劃設計一個更簡單的Instagram版本,使用者可以共享照片,也可以關注其他使用者。每個使用者的“新聞提要”将包含使用者關注的所有人的頭像。
2.系統的要求和目标
在設計Instagram時,我們将重點關注以下一系列要求:
功能要求
1.使用者應該能夠上傳/下載下傳/檢視照片。
2.使用者可以根據照片/視訊标題執行搜尋。
3.使用者可以關注其他使用者。
4.該系統應該能夠生成和顯示使用者的新聞飼料組成的頂級照片從使用者跟蹤的所有人中。
非功能性需求
1.我們的服務需要高可用。
2.系統可接受的新聞提要生成延遲為200ms,低延遲。
3.如果使用者在一段時間内看不到照片,一緻性可能會受到影響(為了可用性)
4.系統應高度可靠;任何上傳的照片或視訊都不應丢失,資料的可靠性。不在範圍内:向照片添加标簽、在标簽上搜尋照片、對照片進行評論、将使用者标記到照片、跟蹤誰等。
3.一些設計注意事項
該系統的閱讀量會很大,是以我們将重點建構一個能夠快速檢索照片的系統。
1.實際上,使用者可以上傳任意數量的照片。在設計該系統時,有效的存儲管理應該是一個關鍵因素。
2.檢視照片時,預期延遲較低。
3.資料應100%可靠。如果使用者上傳照片,系統将保證它會永遠不要丢失。
4.容量估計和限制
•假設我們有5億總使用者,每天有100萬活躍使用者。
•每天200萬張新照片,每秒23張新照片。
•平均照片檔案大小=>200KB
•1天照片所需的總空間 2M * 200KB => 400 GB
10年需要的總共空間為 400GB 365 (days a year) 10 (years) ~= 1425TB
5.高層系統設計
在高層,我們需要支援兩種場景,一種是上傳照片,另一種是檢視/搜尋照片。我們的服務需要一些對象存儲伺服器來存儲照片,還需要一些資料庫伺服器來存儲關于照片的中繼資料資訊。