大家好,我是你們的擊劍老師。 在上一課中,我們主要解釋了什麼是系統設計,在本課中,我們將解釋一些常見的例程和一些系統設計方法。
現在這是乙個系統設計的整體過程,主要分為這些步驟,下面我們一步一步來拆解一下。
首先,第一步稱為澄清。 正如我們在上一課中所說,澄清是系統設計中非常重要的一點,所以在這一步中,我們將主要向面試官詢問一些基本問題。 對於某些主題也是如此。
比如設計Twitter或者設計Youtube,這種話題是很有問題的,所以我們非常有必要縮小我們需要設計的整體範圍。 還有一些其他的常見問題,我們可以稍後總結一下,比如,我們可以問面試官這個專案範圍到底是什麼,比如這個設計範圍是多少。 如果我們只是設計乙個非常小的系統,比如乙個學校專案,那與設計乙個行業就緒的專案是完全不同的方法。
那麼我們也可以問,比如說,這個專案主要是針對乙個使用者的,是針對終端使用者,還是針對公司內部的團隊,然後不涉及UI,然後不涉及CLI,也就是命令列介面,然後涉及到一些其他的元件。 像這樣的問題其實是很有用的,我們後面會重點介紹,在這個階段的澄清中,我們可以問哪些問題,我們需要強調的是,澄清,其實貫穿於每一步,比如我們在做api設計的時候。
在進行資料庫設計和成本估算時,可以進行澄清。 所以我們澄清的第一步就是給你乙個時間去了解這個系統,澄清之後我們應該對我們想要設計的東西有乙個模糊的概念。
下一步稱為需求,這意味著我們去找面試官,了解具體需求是什麼。 從這個階段開始,我們開始在 Google Doc 或我們的特定繪圖軟體上寫下一些真正的需求。 需求有兩種型別,一種稱為功能需求,另一種稱為非功能需求。
這個有趣的功能需求就是說,我們的系統真的提供了這個功能,它真正提供了這個功能,比如乙個設計youtube的問題,那麼它的工作流程可以分為普通使用者上傳、普通使用者**這個視訊。 那其實是兩個不同的工作流程,那麼這個要求就是至少會有兩個不同的工作流程,或者例如,乙個酒店預訂系統,乙個酒店預訂系統,這個工作流程可能涉及普通使用者預訂酒店的功能,以及管理員。 就是這個酒店經理,他可能會修改一些酒店資訊,這是兩個不同的工人,我們必須弄清楚我們到底需要設計什麼,這是功能要求。
非功能性需求等同於隱藏在系統設計背後的指標或特徵。 通常是一些特徵特徵來確保我們的系統能夠正常執行。 常見的指標是可操作性、可擴充套件性、一致性和其他一些指標,例如安全性或某些可靠性,或某些指標。 我們將在以下課程中討論這些指標之間的一些差異,因此我們不會在這裡解釋它們。
在需求之後,我們的下一步稱為成本估算。 在這一步中,實際上,最主要的是說我們根據一些面試官提供的一些資訊,對一些具體的測量和一些資料進行一些計算。 我比較常用的兩個資料之一叫做QPS,它是每秒核心數,這意味著在一秒鐘內可以有多少請求進入我們的系統,這是為了衡量我們系統的整體壓力,看看它的壓力是否高,以及我們將來如何擴充套件系統。 然後還有一種叫做儲存,就是看看我們的系統儲存了多少資料,比如說,如果我們做乙個設計youtube,如果我們的系統要執行十年,這個youtube中儲存的視訊數量可能是巨大的。 如果他需要儲存更多的資料,也會影響到我們後面對整個資料庫的選擇。
這裡有個誤區,很多同學都會對這個地方挑毛病,他會很仔細地計算。 作為面試官,我真的不在乎數字,我在乎什麼? 我關心的是乙個數值層面,也就是說,如果要儲存資料,就要儲存PB級的資料和兆級的資料,而你選擇的資料庫是完全不同的,其結果是整個系統的設計可能完全不同。 乙個設計完成後,要對整個系統有乙個大致的了解,它要我們設計什麼系統,以及它各個方面的一些需求。
讓我們暫停片刻,回顧一下系統設計過程中的前三個步驟。 第一步是澄清,這需要我們與面試官進行初步溝通,然後大致了解我們需要設計什麼樣的系統。
第二步是需求分析,這需要我們和面試官進一步溝通,了解系統需要什麼樣的特性和功能。 然後下一步是成本分析或成本估算,也就是推導出一些數字來幫助我們了解系統。
在下一課中,我將教你如何詳細繪製以及如何進行一些 API 或資料庫設計,敬請期待!