數據系統基礎
互聯網作得太出色了,以致於不少人把它看做某種太平洋同樣的天然資源,而非人造。你還記得上一個達到如此規模而又這樣健壯的技術是什麼?web
------------Alan Kay,Dr.Dobb雜誌採訪(2012)數據庫
何謂數據密集型系統?
對一個應用系統,若是‘數據’是其成敗決定性因素,包括數據的規模,數據的複雜度或者數據產品與變化的速率等,咱們就能夠稱爲‘數據密集型應用系統’;與之對應的是計算密集型,cpu主頻每每是後者最大的制約瓶頸。緩存
可靠性
對於軟件的可靠性,能夠從如下幾個方面描述:服務器
- 應用程序執行用戶所指望的功能。用戶可以經過使用你的產品得到最基本的知足,好比經過微信能聊天,支付,經過京東能購物等,符合最初的預期。
- 能夠容忍用戶出現錯誤或者不正確的軟件使用方法。對於錯誤的方法不至於致使軟件的崩潰,可以經過指引繼續或者通知用戶因爲什麼緣由不能繼續。
- 性能能夠應對典型場景,合理負載壓力和數據量。對於突增的用戶流量能作到降級,限流,擴容,不影響大部分用戶的體驗。
- 系統可防止任何未經受權的訪問和濫用。作好軟件的鑑權措施,保護用戶的隱私,防止黑客的攻擊
保證系統的可靠性,提升總體可用性,減小硬件,軟件認爲致使的故障,能夠從如下幾個點考慮:微信
- 增長冗餘。能夠經過數據備份,多地部署,以10倍流量部署機器等方式,當問題發生時,能及時恢復,減小故障時間。
- 熔斷開關。當下游出現問題時,能對部分業務熔斷處理,不影響總體系統的可用性。
- 限頻。限頻開關可以防止業務請求的突增致使業務的奔潰,特別是對於不能自動擴容的系統。即便是對於一些請求量穩定的業務系統,有時候也可能由於請求重試的放大致使系統奔潰,限頻是對系統很好的一種保護
- 關鍵路徑與非關鍵路徑梳理並隔離部署,對於非關鍵路徑能夠進行降級處理。
- 解耦。對於一些能夠異步處理的操做,好比消息通知等,經過mq異步處理,下降系統的響應時間防止被拖垮。
- 對於一些人爲因素致使的系統不可用,能夠經過充分的測試,好比對核心代碼編寫gtest單元測試,自動化測試等,完善有效的監控,增強風險意識的培訓。
可擴展性
可擴展性是用來描述系統應對負載增長能力的術語。能夠理解爲當用戶從1w/smin增加到100w/min時,系統是否還能正常運行。負載能夠用稱爲負載參數的若干數字來描述。參加的最佳選擇取決於系統的結構,它多是web服務器的每秒請求處理次數,數據庫中寫入的比例,聊天室的同時活動用戶數量,緩存命中率等。異步
當負載增長時,會關注系統的響應時間以及最終失敗量。對於應對負載能夠從垂直擴展和水平擴展兩個方面考慮:分佈式
- 垂直擴展就是提升單機的性能,操做簡單,不過成本很高。
- 水平擴展就是增長機器,優勢是通常對機器要求不高,可是技術實現負載。分佈式的系統一般都支持水平的擴展,在無狀態的狀況下能夠支持自動擴容,可以很好的應對負載升高的狀況。
可維護性
可維護性性能
方便運營團隊來保持系統平穩運行單元測試
簡單性測試
簡化系統複雜性,使新工程師可以輕鬆理解系統。注意這與用戶界面的簡單性並不同
可演化性
後續工程師可以輕鬆地對系統進行改進,並根據需求變化將其適配到非典型場景,也稱爲可延伸性,易修改性或可塑性