資料密集型應用設計讀書筆記第一章。
現在的資料密集型應用,趨勢是元件化。
乙個系統裡,快取,資料庫,索引,和訊息佇列等都解耦開來,每個部分再針對需求選擇對應的元件。
而應用業務**則負責維護元件之間的一致性。
而乙個資料系統,非功能性需求的基礎目標有三個,可靠性,可伸縮性,可維護性。
可靠性(reliability)
系統在困境(adversity)(硬體故障、軟體故障、人為錯誤)中仍可正常工作(正確完成功能,並能達到期望的效能水準)。
可伸縮性(scalability)
有合理的辦法應對系統的增長(資料量、流量、複雜性)(參閱「可伸縮性
」)可維護性(maintainability)
許多不同的人(工程師、運維)在不同的生命週期,都能高效地在系統上工作(使系統保持現有行為,並適應新的應用場景)。
可靠性(reliability)意味著即使發生故障,系統也能正常工作。故障可能發生在硬體(通常是隨機的和不相關的),軟體(通常是系統性的bug,很難處理),和人類(不可避免地時不時出錯)。容錯技術可以對終端使用者隱藏某些型別的故障。
這裡需要注意容錯與預防的區別。容錯意味著出錯了並自動化地修復。而預防則是在設計實現時就防止出錯的可能,往往代價和難度更大,畢竟許多錯誤無法**。
在設計系統的容錯能力時,要定義容忍什麼樣的錯誤,能力邊界。不存在能容忍所有錯誤的系統。
可伸縮性(scalability)意味著即使在負載增加的情況下也有保持效能的策略。為了討論可伸縮性,我們首先需要定量描述負載和效能的方法。我們簡要了解了推特主頁時間線的例子,介紹描述負載的方法,並將響應時間百分位點作為衡量效能的一種方式。在可伸縮的系統中可以新增處理容量(processing capacity)以在高負載下保持可靠。
關鍵:描述負載,描述效能。
負載:每秒一千次1kb的請求,還是每秒1次1mb的請求?訪問流量的特徵如何?
效能:吞吐量和響應時間(響應時間要用百分位點,更有意義。以及,對百分位點取平均值沒有意義)
可維護性(maintainability)有許多方面,但實質上是關於工程師和運維團隊的生活質量的。良好的抽象可以幫助降低複雜度,並使系統易於修改和適應新的應用場景。良好的可操作性意味著對系統的健康狀態具有良好的可見性,並擁有有效的管理手段。
可操作性:有利於運維團隊的工作,有監控,跟蹤問題的工具,易讀的文件,詳細的日誌等等。
可演化性:修改資料系統並使其適應不斷變化需求的容易程度,與系統的簡單性和抽象性密切相關。敏捷(agile)工作模式為適應變化提供了乙個框架。敏捷社群還開發了對在頻繁變化的環境中開發軟體很有幫助的技術工具和模式,如測試驅動開發(tdd, test-driven development)和重構(refactoring)。
tdd ,是一種不同於傳統軟體開發流程的新型的開發方法。 它要求在編寫某個功能的**之前先編寫測試**,然後只編寫使測試通過的功能**,通過測試來推動整個開發的進行。 這有助於編寫簡潔可用和高質量的**,並加速開發過程
可伸縮性搜尋框 Duration
最近在設計班級 的首頁,模仿別人部落格裡使用到的可伸縮的搜尋框,剛開始想想覺得挺奇妙的,後來發現這其實不難,利用之前 css 學過的 duration 就可以實現了。下面是我從班級首頁中抽出來的搜尋框製作成的 demo,跟大家分享下。我們先看看 css box assistive searchare...
什麼是可伸縮性測試
提到效能測試,大家馬上腦海裡馬上會出現負載測試 壓力測試 容量測試等概念,那麼大家知不知道還有可伸縮性測試。可伸縮性測試可以看成效能測試的乙個擴充套件,關注系統本身的可伸縮性,下面給大家具體介紹。系統的可伸縮性可以從硬體和軟體兩個方面來理解 1 硬體的可伸縮性 是不是可以通過硬體裝置的增加來支援更多...
什麼是可伸縮性測試
提到效能測試,大家馬上腦海裡馬上會出現負載測試 壓力測試 容量測試等概念,那麼大家知不知道還有可伸縮性測試。可伸縮性測試可以看成效能測試的乙個擴充套件,關注系統本身的可伸縮性,下面給大家具體介紹。系統的可伸縮性可以從硬體和軟體 兩個方面來理解 1 硬體的可伸縮性 是不是可以通過硬體裝置的增加來支援更...