系統設計和架構之基礎

性能

性能指標

響應時間

指某個請求從發出到收到響應消耗的時間。

在對響應時間進行測試時,通常採用重複請求的方式,然後計算平均響應時間。

吞吐量

指單位時間內系統處理的請求數量。

  • TPS:每秒事務數
  • QPS:每秒查詢數
  • HPS:每秒HTTP請求數

併發用戶數

指系統能同時處理的併發用戶請求數量。

性能優化

Web 前端性能優化

瀏覽器訪問優化

  • 減少 http 請求
  • 使用瀏覽器緩存
  • 啓用壓縮
  • CSS 放在頁面最上面、JavaScript 放在頁面最下面
  • 減少 Cookie 傳輸

CDN 加速

CDN(內容分發網絡)的本質仍然是一個緩存,而且將數據緩存在離用戶最近的地方,使用戶以最快速度獲取數據,即所謂網絡第一跳。

CDN 能夠緩存的一般是靜態資源,如圖片、文件、CSS、Script腳本、靜態網頁等,但是這些文件訪問頻率很高,將其緩存在CDN可極大改善網頁的打開速度。

反向代理

反向代理除了安全功能,也可以通過配置緩存功能加速Web請求。

應用服務器性能優化

緩存

網站性能優化第一定律:優先考慮使用緩存優化性能。

緩存能夠提高性能的原因:

  • 緩存數據通常位於內存等介質中,訪問速度特別快;
  • 緩存數據通常是通過計算處理得到的,可以起到減少計算時間的作用;
  • 緩存數據可以位於靠近用戶的地理位置上(CDN);

異步

某些流程可以將操作轉換爲消息,將消息發送到消息隊列之後立即返回,之後這個操作會被異步處理。

集羣

在網站高併發場景下,使用負載均衡技術爲一個應用構建一個由多臺服務器組成的服務器集羣,將併發訪問請求分發到多臺服務器上處理,避免單一服務器因負載壓力過大而響應緩慢,使用戶請求具有更好的響應延遲特性。

代碼優化

存儲性能優化

  1. 機械硬盤 vs 固態硬盤
  2. B+ 樹 vs LSM 樹
  3. RAID vs HDFS

可用性

冗餘

保證高可用的主要手段是使用冗餘,當某個服務器故障時就請求其它服務器。

應用服務器的冗餘比較容易實現,只要保證應用服務器不具有狀態,那麼某個應用服務器故障時,負載均衡器將該應用服務器原先的用戶請求轉發到另一個應用服務器上,不會對用戶有任何影響。

存儲服務器的冗餘需要使用主從複製來實現,當主服務器故障時,需要提升從服務器爲主服務器,這個過程稱爲切換。

監控

對 CPU、內存、磁盤、網絡等系統負載信息進行監控,當某個信息達到一定閾值時通知運維人員,從而在系統發生故障之前及時發現問題。

伸縮性

指不斷向集羣中添加服務器來緩解不斷上升的用戶併發訪問壓力和不斷增長的數據存儲需求。

伸縮性與性能

如果系統存在性能問題,那麼單個用戶的請求總是很慢的;

如果系統存在伸縮性問題,那麼單個用戶的請求可能會很快,但是在併發數很高的情況下系統會很慢。

實現伸縮性

應用服務器只要不具有狀態,那麼就可以很容易地通過負載均衡器向集羣中添加新的服務器。

關係型數據庫的伸縮性通過 Sharding 來實現,將數據按一定的規則分佈到不同的節點上,從而解決單臺存儲服務器的存儲空間限制。

對於非關係型數據庫,它們天生就是爲海量數據而誕生,對伸縮性的支持特別好。

擴展性

指的是添加新功能時對現有系統的其它應用無影響,這就要求不同應用具備低耦合的特點。

實現可擴展主要有兩種方式:

  • 使用消息隊列進行解耦,應用之間通過消息傳遞進行通信;
  • 使用分佈式服務將業務和可複用的服務分離開來,業務使用分佈式服務框架調用可複用的服務。新增的產品可以通過調用可複用的服務來實現業務邏輯,對其它產品沒有影響。

安全性

要求系統在應對各種攻擊手段時能夠有可靠的應對措施。

參考資料

  • 《大型網站技術架構:核心原理與案例分析》

歡迎關注我的公衆號:荒古傳說

本文作者: 荒古
本文鏈接: https://haxianhe.com/2019/09/23/系統設計和架構之基礎/
版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 許可協議。轉載請註明出處!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章