一).大型軟體系統的特點

1.高並發

2.高可用

3.海量數據

4.用戶分佈廣泛,網路情況複雜

5.安全環境惡劣

6.需求快速變更,發布頻繁

二).大型網站架構發展歷程

1.應用服務和數據服務分離

2.大量使用緩存改善網站性能(CDN加速、反向代理)

3.使用伺服器集羣改善網站並發能力

4.資料庫讀寫分離

5.分散式文件(資料庫)系統

6.NoSql與非數據查詢技術(搜索引擎)

7.業務拆分(橫向、縱向)

三).大型網站架構的價值觀

1.核心價值: 漸進式

2.主要動力: 業務發展

3.設計誤區:

1).一味追求大公司的解決方案

2).為了技術而技術(不管是否適用,追求時髦,什麼新用什麼)

3).企圖用技術解決所有問題(有時候好的業務架構要比技術架構更加重要)

四).技術架構要實現的目標(核心要素):

1.高性能

1).性能問題是網站優化升級的觸發器

2).前端常用優化方法:瀏覽器緩存 頁面壓縮 合理佈局 減少cookie傳輸 CDN 反向代理

3).後臺常用優化方法: 伺服器本地緩存 分散式緩存 消息隊列 集羣 資料庫優化手段(索引、緩存、sql優化) NoSql

2.可用性

1).主要問題: 伺服器宕機

2).解決手段: 冗餘備份

3.伸縮性

1).大型網站面臨的問題: 高並發訪問、海量數據存儲

2).解決手段:

構建集羣: 應用伺服器集羣、緩存伺服器集羣、資料庫伺服器集羣

4.擴展性

1).事件驅動架構

消息隊列(觀察者模式)

2).分散式服務

業務與可復用服務相分離(模塊化)

5.安全性

1).防範各種攻擊竊密手段

2).網站架構主要的幾種模式:分層,分割 分散式 集羣 緩存 非同步 冗餘 自動化 安全

一.

1.開發人員和用戶看待性能的角度不同

2.性能測試指標

1).響應時間

送發出請求到收到響應所經過的時間

2).並發數

單位時間同時處理請求數

3).吞吐量

單位時間處理請求數

4).性能計數器

描述伺服器或操作系統性能的一系列數據指標

3.性能測試方法

1).性能測試

處理能力與並發數成正比

2).負載測試

處理能力增長緩慢,達到最大負載點

3).壓力測試

處理能力反而下降,達到崩潰點

4).穩定性測試

長時間不均勻地對系統施加壓力

4.前端性能優化

1).減少http請求

2).使用瀏覽器緩存

3).啟用壓縮

4).使用正確的文件載入方式

5).減少cookie傳輸

6).CDN加速(緩存)

部署在網路運營商機房(網路第一跳)

7).反向代理(緩存)

5.應用伺服器性能優化

1).分散式緩存(網站性能優化第一定律:優先考慮使用緩存)

緩存的基本原理:

1.將數據存儲在較高訪問速度的存儲介質中

2.本質是一個 內存(讀取速度快嗎不是)Hash表(查詢速度快嗎不是)

合理使用緩存:

1.不要緩存頻繁修改的數據

2.要遵循二八定律,不要緩存低命中的數據

3.要注意 緩存的時效性 引起的問題

緩存可用性:

1.通過將緩存數據分佈在集羣中,當一臺緩存伺服器宕機時,從而防止全面更新緩存引起的性能消耗

2.對於已知的熱點數據直接載入好(緩存預熱),而不需使用LRU不斷篩選預熱

3.預防緩存穿透(攻擊者不斷請求某個不存在的數據,從而穿透緩存伺服器,對資料庫伺服器造成極大的壓力)

分散式緩存架構(分為兩類):

1.數據相同,同步更新(JBoss Cache)

2.Memcached:

簡單的通訊協議(緩存客戶端與緩存伺服器)

豐富的客服端(支持多種語言)

高性能網路通信(支持事件觸發)

高效內存管理(固定空間分配)

互不通信的伺服器集羣架構(客戶端路由演算法: 一致性Hash演算法)(無限制線性伸縮)

2).非同步操作

使用 消息隊列 將 調用 非同步化

1.用戶的數據在發送給消息隊列伺服器後 立即返回

2.消息隊列伺服器 中的消費者進程從消協隊列中獲取數據非同步寫入資料庫

3.達到了削峯作用(削平高峯時期的並發任務)

4.無法在返回時告知用戶成功信息

3).使用集羣

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

4).代碼優化

多線程

1.利用多線程io阻塞與執行,可最大限度地利用cpu資源

注意:

1.將對象設計為無狀態對象

2.使用局部對象

3.並發訪問資源時使用鎖

資源復用

1.單例模式

2.對象池(減少對象創建刪除引起的資源消耗)

3.合適的數據結構

4.合理的GC

6.存儲性能優化

硬體技術

存儲結構技術

磁碟讀寫技術

那麼高性能架構具體該學習什麼技術呢,以下是我整理出來的思維導圖:

最後送福利了,現在私信我高性能即可 看到會立即回復

還有Java工程化 、高性能及分散式、高性能、高架構、性能調優、Spring、MyBatis、 Netty源碼分析等多個知識點高級進階乾貨的相關視頻資料,還有spring和 虛擬機等書籍掃描版,也有更多面試題等你來拿。


推薦閱讀:
相關文章