原博客地址:https://blog.csdn.net/taotoxht/article/details/46931045數據庫
客戶端頁面緩存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客戶端能夠繼續用cache,減小流量),ETag)數組
反向代理緩存緩存
應用端的緩存(memcache)網絡
內存數據庫數據結構
Buffer、cache機制(數據庫,中間件等)多線程
哈希、B樹、倒排、bitmap架構
哈希索引適合綜合數組的尋址和鏈表的插入特性,能夠實現數據的快速存取。併發
B樹索引適合於查詢爲主導的場景,避免屢次的IO,提升查詢的效率。oracle
倒排索引實現單詞到文檔映射關係的最佳實現方式和最有效的索引結構,普遍用在搜索領域。負載均衡
Bitmap是一種很是簡潔快速的數據結構,他能同時使存儲空間和速度最優化(而沒必要空間換時間),適合於海量數據的計算場景。
在大規模的數據中,數據存在必定的局部性的特徵,利用局部性的原理將海量數據計算的問題分而治之。
MR模型是無共享的架構,數據集分佈至各個節點。處理時,每一個節點就近讀取本地存儲的數據處理(map),將處理後的數據進行合併(combine)、排序(shuffle and sort)後再分發(至reduce節點),避免了大量數據的傳輸,提升了處理效率。
並行計算(Parallel Computing)是指同時使用多種計算資源解決計算問題的過程,是提升計算機系統計算速度和處理能力的一種有效手段。它的基本思想是用多個處理器/進程/線程來協同求解同一問題,即將被求解的問題分解成若干個部分,各部分均由一個獨立的處理機來並行計算。
和MR的區別在於,它是基於問題分解的,而不是基於數據分解。
隨着平臺併發量的增大,須要擴容節點進行集羣,利用負載均衡設備進行請求的分發;負載均衡設備一般在提供負載均衡的同時,也提供失效檢測功能;同時爲了提升可用性,須要有容災備份,以防止節點宕機失效帶來的不可用問題;備份有在線的和離線備份,能夠根據失效性要求的不一樣,進行選擇不一樣的備份策略。
讀寫分離是對數據庫來說的,隨着系統併發量的增大,提升數據訪問可用性的一個重要手段就是寫數據和讀數據進行分離;固然在讀寫分離的同時,須要關注數據的一致性問題;對於一致性的問題,在分佈式的系統CAP定量中,更多的關注於可用性。
平臺中各個模塊之間的關係儘可能是低耦合的,能夠經過相關的消息組件進行交互,能異步則異步,分清楚數據流轉的主流程和副流程,主副是異步的,好比記錄日誌能夠是異步操做的,增長整個系統的可用性。
固然在異步處理中,爲了確保數據獲得接收或者處理,每每須要確認機制(confirm、ack)。
可是有些場景中,雖然請求已經獲得處理,可是因其餘緣由(好比網絡不穩定),確認消息沒有返回,那麼這種狀況下須要進行請求的重發,對請求的處理設計因重發因素須要考慮冪等性。
監控也是提升整個平臺可用性的一個重要手段,多平臺進行多個維度的監控;模塊在運行時候是透明的,以達到運行期白盒化
拆分包括對業務的拆分和對數據庫的拆分。
系統的資源老是有限的,一段比較長的業務執行若是是一竿子執行的方式,在大量併發的操做下,這種阻塞的方式,沒法有效的及時釋放資源給其餘進程執行,這樣系統的吞吐量不高。
須要把業務進行邏輯的分段,採用異步非阻塞的方式,提升系統的吞吐量。
隨着數據量和併發量的增長,讀寫分離不能知足系統併發性能的要求,須要對數據進行切分,包括對數據進行分庫和分表。這種分庫分表的方式,須要增長對數據的路由邏輯支持。
對於系統的伸縮性而言,模塊最好是無狀態的,經過增長節點就能夠提升整個的吞吐量。
系統的容量是有限的,承受的併發量也是有限的,在架構設計時,必定須要考慮流量的控制,防止因意外攻擊或者瞬時併發量的衝擊致使系統崩潰。在設計時增長流控的措施,可考慮對請求進行排隊,超出預期的範圍,能夠進行告警或者丟棄。
對於共享資源的訪問,爲了防止衝突,須要進行併發的控制,同時有些交易須要有事務性來保證交易的一致性,因此在交易系統的設計時,需考慮原子操做和併發控制。
保證併發控制一些經常使用高性能手段有,樂觀鎖、Latch、mutex、寫時複製、CAS等;多版本的併發控制MVCC一般是保證一致性的重要手段,這個在數據庫的設計中常常會用到。
平臺中業務邏輯存在不一樣的類型,有計算複雜型的,有消耗IO型的,同時就同一種類型而言,不一樣的業務邏輯消耗的資源數量也是不同的,這就須要針對不一樣的邏輯採起不一樣的策略。
針對IO型的,能夠採起基於事件驅動的異步非阻塞的方式,單線程方式能夠減小線程的切換引發的開銷,或者在多線程的狀況下采起自旋spin的方式,減小對線程的切換(好比oracle latch設計);對於計算型的,充分利用多線程進行操做。
同一類型的調用方式,不一樣的業務進行合適的資源分配,設置不一樣的計算節點數量或者線程數量,對業務進行分流,優先執行優先級別高的業務。
系統的有些業務模塊在出現錯誤時,爲了減小併發下對正常請求的處理的影響,有時候須要考慮對這些異常狀態的請求進行單獨渠道的處理,甚至暫時自動禁止這些異常的業務模塊。
有些請求的失敗多是偶然的暫時的失敗(好比網絡不穩定),須要進行請求重試的考慮。
系統的資源是有限的,在使用資源時,必定要在最後釋放資源,不管是請求走的是正常路徑仍是異常的路徑,以便於資源的及時回收,供其餘請求使用。
在設計通訊的架構時,每每須要考慮超時的控制。