forked from CyC2018/CS-Notes
-
Notifications
You must be signed in to change notification settings - Fork 3
/
系統設計基礎.md
120 lines (63 loc) · 5.21 KB
/
系統設計基礎.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<!-- GFM-TOC -->
* [一、性能](#一性能)
* [二、伸縮性](#二伸縮性)
* [三、擴展性](#三擴展性)
* [四、可用性](#四可用性)
* [五、安全性](#五安全性)
* [參考資料](#參考資料)
<!-- GFM-TOC -->
# 一、性能
## 性能指標
### 1. 響應時間
指某個請求從發出到接收到響應消耗的時間。
在對響應時間進行測試時,通常採用重複請求的方式,然後計算平均響應時間。
### 2. 吞吐量
指系統在單位時間內可以處理的請求數量,通常使用每秒的請求數來衡量。
### 3. 併發用戶數
指系統能同時處理的併發用戶請求數量。
在沒有併發存在的系統中,請求被順序執行,此時響應時間為吞吐量的倒數。例如系統支持的吞吐量為 100 req/s,那麼平均響應時間應該為 0.01s。
目前的大型系統都支持多線程來處理併發請求,多線程能夠提高吞吐量以及縮短響應時間,主要有兩個原因:
- 多 CPU
- IO 等待時間
使用 IO 多路複用等方式,系統在等待一個 IO 操作完成的這段時間內不需要被阻塞,可以去處理其它請求。通過將這個等待時間利用起來,使得 CPU 利用率大大提高。
併發用戶數不是越高越好,因為如果併發用戶數太高,系統來不及處理這麼多的請求,會使得過多的請求需要等待,那麼響應時間就會大大提高。
## 性能優化
### 1. 集群
將多臺服務器組成集群,使用負載均衡將請求轉發到集群中,避免單一服務器的負載壓力過大導致性能降低。
### 2. 緩存
緩存能夠提高性能的原因如下:
- 緩存數據通常位於內存等介質中,這種介質對於讀操作特別快;
- 緩存數據可以位於靠近用戶的地理位置上;
- 可以將計算結果進行緩存,從而避免重複計算。
### 3. 異步
某些流程可以將操作轉換為消息,將消息發送到消息隊列之後立即返回,之後這個操作會被異步處理。
# 二、伸縮性
指不斷向集群中添加服務器來緩解不斷上升的用戶併發訪問壓力和不斷增長的數據存儲需求。
## 伸縮性與性能
如果系統存在性能問題,那麼單個用戶的請求總是很慢的;
如果系統存在伸縮性問題,那麼單個用戶的請求可能會很快,但是在併發數很高的情況下系統會很慢。
## 實現伸縮性
應用服務器只要不具有狀態,那麼就可以很容易地通過負載均衡器向集群中添加新的服務器。
關係型數據庫的伸縮性通過 Sharding 來實現,將數據按一定的規則分佈到不同的節點上,從而解決單臺存儲服務器的存儲空間限制。
對於非關係型數據庫,它們天生就是為海量數據而誕生,對伸縮性的支持特別好。
# 三、擴展性
指的是添加新功能時對現有系統的其它應用無影響,這就要求不同應用具備低耦合的特點。
實現可擴展主要有兩種方式:
- 使用消息隊列進行解耦,應用之間通過消息傳遞進行通信;
- 使用分佈式服務將業務和可複用的服務分離開來,業務使用分佈式服務框架調用可複用的服務。新增的產品可以通過調用可複用的服務來實現業務邏輯,對其它產品沒有影響。
# 四、可用性
## 冗餘
保證高可用的主要手段是使用冗餘,當某個服務器故障時就請求其它服務器。
應用服務器的冗餘比較容易實現,只要保證應用服務器不具有狀態,那麼某個應用服務器故障時,負載均衡器將該應用服務器原先的用戶請求轉發到另一個應用服務器上,不會對用戶有任何影響。
存儲服務器的冗餘需要使用主從複製來實現,當主服務器故障時,需要提升從服務器為主服務器,這個過程稱為切換。
## 監控
對 CPU、內存、磁盤、網絡等系統負載信息進行監控,當某個信息達到一定閾值時通知運維人員,從而在系統發生故障之前及時發現問題。
## 服務降級
服務降級是系統為了應對大量的請求,主動關閉部分功能,從而保證核心功能可用。
# 五、安全性
要求系統在應對各種攻擊手段時能夠有可靠的應對措施。
# 參考資料
- 大型網站技術架構:核心原理與案例分析
# 微信公眾號
更多精彩內容將發佈在微信公眾號 CyC2018 上,你也可以在公眾號後臺和我交流學習和求職相關的問題。另外,公眾號提供了該項目的 PDF 等離線閱讀版本,後臺回覆 "下載" 即可領取。公眾號也提供了一份技術面試複習大綱,不僅系統整理了面試知識點,而且標註了各個知識點的重要程度,從而幫你理清多而雜的面試知識點,後臺回覆 "大綱" 即可領取。我基本是按照這個大綱來進行復習的,對我拿到了 BAT 頭條等 Offer 起到很大的幫助。你們完全可以和我一樣根據大綱上列的知識點來進行復習,就不用看很多不重要的內容,也可以知道哪些內容很重要從而多安排一些複習時間。
<br><div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/other/公眾號海報6.png"></img></div>