硬件的第二個問題是 , 硬件不是 100% 的可靠 , 它本身也會出問題 。
比如說 , 服務器斷電了 , 網(wǎng)絡電纜被挖斷了 , 甚至是各種自然災害導致機房整體不可用 。尤其是一個大型系統(tǒng) , 服務器規(guī)模很大 , 網(wǎng)絡很復雜 , 一旦某個節(jié)點出問題 , 整個系統(tǒng)都可能受影響 , 所以 , 機器數(shù)量變多 , 也放大了系統(tǒng)出故障的概率 , 導致系統(tǒng)整體的可用性變差 。我們在做技術架構設計時 , 就要充分考慮各種硬件故障的可能性 , 做好應對方案 。比如說針對自然災害 , 系統(tǒng)做異地多機房部署 。
軟件的問題接下來我們說下軟件的問題 , 這里的軟件 , 主要說的是各種中間件和系統(tǒng)級軟件 , 它們配合我們的應用代碼一起工作 。
軟件是硬件的延伸 , 它主要是解決硬件的各種問題 , 軟件通過進一步封裝 , 給系統(tǒng)帶來了兩大好處 。
首先是彌補了硬件的缺陷 。比如 Redis 集群 , 通過數(shù)據(jù)分片 , 解決了單臺服務器內(nèi)存和帶寬的瓶頸問題 , 實現(xiàn)服務器處理能力的水平擴展;通過數(shù)據(jù)多副本和故障節(jié)點轉移 , 解決了單臺服務器故障導致的可用性問題 。其次 , 封裝讓我們可以更高效地訪問系統(tǒng)資源 。比如說 , 數(shù)據(jù)庫是對文件系統(tǒng)的加強 , 使數(shù)據(jù)的存取更高效;緩存是對數(shù)據(jù)庫的加強 , 使熱點數(shù)據(jù)的訪問更高效 。但軟件在填硬件的各種坑的同時 , 也給系統(tǒng)挖了新的坑 。舉個例子 , Redis 集群的多節(jié)點 , 它解決了單節(jié)點處理能力問題 , 但同時也帶來了新的問題 , 比如節(jié)點內(nèi)部的網(wǎng)絡有問題(即網(wǎng)絡分區(qū)現(xiàn)象) , 集群的可用性就有問題;Redis 數(shù)據(jù)的多副本 , 它解決了單臺服務器故障帶來的可用性問題 , 但同時也帶來了數(shù)據(jù)的一致性問題 。
我們知道 , 分布式系統(tǒng)有個典型的 CAP 理論 , C 代表系統(tǒng)內(nèi)部的數(shù)據(jù)一致性 , A 代碼系統(tǒng)的可用性 , P 代表節(jié)點之間的網(wǎng)絡是否允許出問題 , 我們在這三者里面只能選擇兩個 。對于一個分布式系統(tǒng)來說 , 網(wǎng)絡出問題是比較常見的 , 所以我們首先要選擇 P , 這意味著我們在剩下的 C 和 A 之間只能選擇一個 。
CAP 理論只是針對一個小的數(shù)據(jù)型的分布式系統(tǒng) , 如果放大到整個業(yè)務系統(tǒng) , C 和 A 的選擇就更加復雜了 。
比如有時候 , 我們直接對訂單進行寫庫 , 這是傾向于保證數(shù)據(jù)一致性 C , 但如果數(shù)據(jù)庫故障或者流量太大 , 寫入不成功 , 導致當前的業(yè)務功能失敗 , 也就是系統(tǒng)的可用性 A 產(chǎn)生了問題 。如果我們不直接落庫 , 先發(fā)訂單數(shù)據(jù)到消息系統(tǒng) , 再由消費者接收消息進行落庫 , 這樣
即使單量很大或數(shù)據(jù)庫有問題 , 最終訂單還是可以落地 , 不影響當前的下單功能 , 保證了系統(tǒng)的可用性 , 但可能不同地方(比如緩存和數(shù)據(jù)庫)的訂單數(shù)據(jù)就有一致性的問題 。
魚和熊掌不能兼得 , 系統(tǒng)無法同時滿足 CAP 的要求 , 我們就需要結合具體的業(yè)務場景 , 識別最突出的挑戰(zhàn) , 然后選擇合適的組件 , 并以合理的方式去使用它們 , 最終保障系統(tǒng)的穩(wěn)定運行 , 不產(chǎn)生大的業(yè)務問題 。
以上關于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- js中計時器的用法 javascript計時器頻率設置
- 健身項目“方向標”
- 男人健身的7個題目
- 滅火器維護檢查項目
- java獲取checkbox勾選的值 獲取選中的checkbox的值
- 怎樣鍛煉 讓腿部布滿氣力
- 產(chǎn)品推廣計劃方案模板 項目營銷方案
- 簡單的java程序代碼 java大小寫轉換函數(shù)
- 大學團建活動有哪些項目
- java中的對象和類理解 java對象是什么意思
