1. 程式人生 > >後端設計,系統設計常識

後端設計,系統設計常識

系統設計第一次課聽課筆記

面向web後端,

實習生不會考到系統設計。

tradeoff

soa

pull model

push model

資料儲存系統

非同步任務,訊息佇列

6

面試形式:

設計某系統,設計微博,設計Facebook,看看你能夠撩到多深,多好,面向非常後端的工程師,

設計某個系統中的某某功能。比如,登入密碼不能錯誤多少次,刪除一個微博功能。標記郵件為已讀功能,某個小功能。

說清楚的話還是要求對系統設計有基本概念和認知。

7

系統設計SD和麵向物件設計OOD區別

哪種面試需要寫程式碼?

系統設計屬於吹牛扯淡的話題,一般不考程式碼。面向物件需要寫程式碼,寫出各種繼承關係。

知識點:

OOD考class,object, method,interface,inheritance,考察電梯設計,遊戲設計。角色,操作

SD考察:資料庫,網址系統設計,新鮮事系統設計。

9

課程有配套階梯訓練的。刷題消化課程內容。

10

面試問題:請設計Twitter。

第一句給面試官的話是?單向關注限制的部落格系統,限制140個單詞。微信是雙向朋友關係,微博是單向關係,你關心別人,別人不一定關注你。

什麼功能,場景,使用者規模,

系統設計沒有提到任何語言,需要資料庫SQL語句。刷題用什麼語言隨意。沒有和程式語言相關的東西。演算法也和程式語言沒關係。

系統設計評分標準:

有沒有可行解。

特定問題,小功能設計能夠答出來。

分析能力,根據設定的難點,解決掉

權衡能力,多種選擇怎麼選擇最好的路線。沒有標準答案。

知識儲備。如何。

問題4S分析法:scenario,service, storage, scale

scenario設計場景,哪些功能,設計多牛逼

service服務把大系統拆分小問題

storage儲存,資料如何儲存與訪問。

最重要,最難的部分。

Scale升級:解決缺陷,資料非常大,處理特殊問題。

對於Twitter,場景是:使用者量,需要承擔多大訪問量,日活躍使用者,月活量。這兩個指標看看網站,APP的活躍量,Facebook日活:14億。還要問有哪些功能需要設計。面試官肯定會告訴你。

使用者量的影響主要是併發使用者數。日活次數*每個使用者平均請求次數/一天多少秒 = 150M * 60/ 86400 平均每秒10萬次

一般每天60次網路請求。峰值和平均值的比例,合理值,2-9之間都可以。

30萬次併發的讀請求,寫請求。重要的是計算過程,不是結果。

QPS用處,=100,用筆記本做web伺服器就行。

1k,用好的web伺服器就行。

QPS = 1萬,需要建設1000臺web伺服器叢集。如何維護,每一臺掛了怎麼辦。

qps和伺服器,資料庫的關係。

一臺伺服器承受1000很牛了。一臺SQL Database承受1千

nosql資料庫cassandra承受1萬的QPS,設計時候就是這樣設計的。

300 I/O per second,每秒只有30次

service服務把大任務分解為小任務。只是設計某個功能,可以跳過這步。使用者服務,註冊,登入。tweet service: post a tweet news feed timeline. ; media service: upload image upload video; friendship service:follow unfollow

按照儲存方式表單分類。

router:

flask:Python的web framwork,最快速搭建一個網站,裡面最基本的概念都懂了。

儲存方式:資料庫,檔案,快取系統。

資料庫:關係,非關係資料庫

檔案系統和資料庫系統之間的關係:資料庫構建在檔案系統之上的。資料庫無法脫離檔案系統獨立存在。如果學過作業系統,裡面分為檔案系統和記憶體系統,快取系統就是記憶體系統了。

最開始肯定沒有資料庫,如果直接最檔案系統操作,會非常痛苦,因為需求非常豐富。因為需求可以是查詢年齡區間的男人,如果在檔案系統中做,需要在所有使用者資訊中查詢,太慢了,不太好查詢,增刪查改太難。

什麼樣的資料適合資料庫和檔案系統中?

結構化資料例如姓名,性別,年齡等就適合資料庫中。圖片視訊非結構化資料適合檔案系統。

快取系統cache不支援持久化。持久化:斷電就消失了。通常用來運算結果(花很長時間計算出來的),頻繁訪問的適合放在快取中。

Redis是個非關係資料庫。

27

非關係資料庫:tweet service

關係資料庫:user service

media service:file system

friendship service: sql/ nosql

系統= 服務+資料儲存

程式=演算法+資料結構

28

考察表單內容,儲存什麼東西?

休息5分鐘

news feed新鮮事系統。

新鮮事:登入朋友圈,看到的資訊流,朋友釋出資訊的集合。

典型新鮮事情繫統:Facebook,Twitter,朋友圈,RSS Reader(絕跡了,屬於部落格和微博之間的過度產品)。

系統核心因素:

關注,被關注。每個人看到的新鮮事不同。

C++寫網站找抽。Java都比較少了。更多用PHP,Python,C++更適合底層開發。

新鮮事是偉大的發明。以前的部落格是必須看看別人是否更新了,後來Facebook這種新鮮事情,這個就很輕鬆了,只要關注了,自動就推送給自己,不需要每天去刷他的部落格。

資訊流怎麼存取,就是核心點。讓大家回覆,根據學生反饋,有針對性回覆。從檔案系統讀資料庫,

32

儲存pull model,演算法

在使用者檢視朋友圈時候,獲取每個好友前100條tweets,合併前100條news feed。k路歸併演算法。

不關心時間複雜度,關心資料庫讀取次數和讀取方式。

儲存原理:

pull模型缺陷:非常慢

非同步執行:建立記錄,然後不管了,其他進行得到這個任務,慢慢執行。發帖後告訴使用者,發帖成功,但是粉絲收到新帖子還要一段時間。

storage ;pull vs push模型朋友圈用push模型,因為大V問題。當我是大V,pull很慢,所以不可以用pull。所以會限制朋友圈人數最多5000,以前最多2000.

facebook為啥用pull模型,太複雜了,有群資訊,也可以單向關注,如果用push,太麻煩了。

scale擴充套件,解決pull缺陷,最慢的部分發生在使用者讀請求時候。在DB訪問前加入cache,cache每個使用者的timeline,cache每個使用者的news feed。

浪費更多儲存空間disk:

push結合pull模型:普通使用者仍然push。明星不用push到使用者的新聞裡,

沒有很大流量,push最好。資源少,偷懶,使用者發帖少,實時性要求不高用push。

用pull:資源充足,實時性要求高,使用者發帖多,單向好友關係,有明星問題。

54頁結束。

總結:4S是一個套路:問清楚再動手。

分析比答案重要,關注這個過程是否和諧,有道理。系統設計沒有標準答案,通過分析過程展現自己的知識儲備。最後一期系統設計課程。

63頁PPT結束

認識你是我們的緣分,同學,等等,記得關注我。

微信掃一掃 關注該公眾號