系统设计:性能指标、伸缩性、扩展性、可用性、安全性
一、性能
性能指標
1. 響應時間
指某一個請求從發出到接收到響應消耗的時間。
在對響應時間進行測試時,通常采用重復請求方式,然后計算平均響應時間。
2. 吞吐量/吞吐率
指系統在單位時間內可以處理的請求數量,通常使用每秒的請求數來衡量。
3. 并發用戶數
指系統能同時處理的并發用戶請求數量。
在沒有并發存在的系統中,請求被順序執行,此時響應時間為吞吐量的倒數。例如系統支持的吞吐量為 100 req/s,那么平均響應時間應該為 0.01s。
目前的大型系統都支持多線程來處理并發請求,多線程能夠提高吞吐量以及縮短響應時間,主要有兩個原因:
- 多 CPU
- IO 等待時間
使用 IO 多路復用等方式,系統在等待一個 IO 操作完成的這段時間內不需要被阻塞,可以去處理其它請求。通過將這個等待時間利用起來,使得 CPU 利用率大大提高。
并發用戶數不是越高越好,因為如果并發用戶數太高,系統來不及處理這么多的請求,會使得過多的請求需要等待,那么響應時間就會大大提高。
性能優化
1. 集群
將多臺服務器組成集群,使用負載均衡將請求轉發到集群中,避免單一服務器的負載壓力過大導致性能降低。
2. 緩存
緩存能夠提高性能的原因如下:
- 緩存數據通常位于內存等介質中,這種介質對于讀操作特別快;
- 緩存數據可以位于靠近用戶的地理位置上;
- 可以將計算結果進行緩存,從而避免重復計算。
3. 異步
某些流程可以將操作轉換為消息,將消息發送到消息隊列之后立即返回,之后這個操作會被異步處理。
二、伸縮性
指不斷向集群中添加服務器來緩解不斷上升的用戶并發訪問壓力和不斷增長的數據存儲需求。
伸縮性與性能
如果系統存在性能問題,那么單個用戶的請求總是很慢的;
如果系統存在伸縮性問題,那么單個用戶的請求可能會很快,但是在并發數很高的情況下系統會很慢。
實現伸縮性
應用服務器只要不具有狀態,那么就可以很容易地通過負載均衡器向集群中添加新的服務器。
關系型數據庫的伸縮性通過 Sharding 來實現,將數據按一定的規則分布到不同的節點上,從而解決單臺存儲服務器的存儲空間限制。
對于非關系型數據庫,它們天生就是為海量數據而誕生,對伸縮性的支持特別好。
三、擴展性
指的是添加新功能時對現有系統的其它應用無影響,這就要求不同應用具備低耦合的特點。
實現可擴展主要有兩種方式:
- 使用消息隊列進行解耦,應用之間通過消息傳遞進行通信;
- 使用分布式服務將業務和可復用的服務分離開來,業務使用分布式服務框架調用可復用的服務。新增的產品可以通過調用可復用的服務來實現業務邏輯,對其它產品沒有影響。
四、可用性
冗余
保證高可用的主要手段是使用冗余,當某個服務器故障時就請求其它服務器。
? ?大白話:多搞幾臺服務器(或者數據庫服務器),一個宕掉,另一個繼續工作!多個之間數據會重復,因此冗余,但是它保證系統的健壯性(高可用)。即可以理解為空間換時間
應用服務器的冗余比較容易實現,只要保證應用服務器不具有狀態,那么某個應用服務器故障時,負載均衡器將該應用服務器原先的用戶請求轉發到另一個應用服務器上,不會對用戶有任何影響。
存儲服務器的冗余需要使用主從復制來實現,當主服務器故障時,需要提升從服務器為主服務器,這個過程稱為切換。
監控
對 CPU、內存、磁盤、網絡等系統負載信息進行監控,當某個數據達到一定閾值時通知運維人員,從而在系統發生故障之前及時發現問題。
服務降級
服務降級是系統為了應對大量的請求,主動關閉部分功能,從而保證核心功能可用。
五、安全性
要求系統在應對各種攻擊手段時能夠有可靠的應對措施。
總結
以上是生活随笔為你收集整理的系统设计:性能指标、伸缩性、扩展性、可用性、安全性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IO:Reactor和Proactor的
- 下一篇: 系统设计:负载均衡(负载均衡算法、转发实