架构师速成8.3-架构师必须要了解的规则(转)
作為一個架構師,有些規則是必須要掌握的,這就想軟件的公理,如果你學物理不知道牛頓定律,那就不要學了。在軟件行業也有類似的東西,我稱之為軟件定律。例如:
ACID,CAP,BASE
ACID
傳統數據庫系統中,事務具有ACID 4個屬性
(1)原子性(Atomicity):事務是一個原子操作單元,其對數據的修改,要么全都執行,要么全都不執行。
(2)一致性(Consistent):在事務開始和完成時,數據都必須保持一致狀態。這意味著所有相關的數據規則都必須應用于事務的修改,以保持數據的完整性;事務結束時,所有的內部數據結構(如B樹索引或雙向鏈表)也都必須是正確的。
(3)隔離性(Isolation):數據庫系統提供一定的隔離機制,保證事務在不受外部并發操作影響的“獨立”環境執行。這意味著事務處理過程中的中間狀態對外部是不可見的,反之亦然。
(4)持久性(Durable):事務完成之后,它對于數據的修改是永久性的,即使出現系統故障也能夠保持。
可以說,數據庫系統是伴隨著金融業的需求而快速發展起來。對于金融業,可用性和性能都不是最重要的,而一致性是最重要的,用戶可以容忍系統故障而停止服務,但絕不能容忍帳戶上的錢無故減少,而強一致性的事務是這一切的根本保證。
CAP
在2000的PODC(Principles of Distributed Computing)會議上,Brewer提出了著名的CAP理論。CAP指的是:Consistency、Availability和Partition?Tolerance。
(1)Consistency(一致性):一致性是說數據的原子性,這種原子性在經典的數據庫中是通過事務來保證的,當事務完成時,無論其是成功還是回滾,數據都會處于一致的狀態。在分布式環境中,一致性是說多個節點的數據是否一致。
(2)Availability(可用性):可用性是說服務能一直保證是可用的狀態,當用戶發出一個請求,服務能在有限時間內返回結果。
(3)Partition?Tolerance(分區容錯性):Partition是指網絡的分區。可以這樣理解,一般來說,關鍵的數據和服務都會位于不同的IDC。
CAP理論告訴我們,一個分布式系統不可能同時滿足一致性,可用性和分區容錯性這三個需求,三個要素中最多只能同時滿足兩點。三者不可兼顧,此所謂魚與熊掌不可兼得也!而對于分布式數據系統而言,分區容錯性是基本要求,否則就不稱其為分布式系統了。因此架構設計師不要把精力浪費在設計如何能同時滿足三者的完美分布式系統上,而是應該進行權衡取舍。這也意味著分布式系統的設計過程,也就是根據業務特點在C(一致性)和A(可用性)之間尋求平衡的過程,要求架構師真正理解系統需求,把握業務特點。
后來:CAP理論的作者終于給了我長久以來想要的答案:CAP理論并非嚴格的三選二,大多數情況下,A和C是可以兼得的,因為大多數情況下,P都不存在。
P只有在結點之間通信延遲大于可接受的范圍時才出現(結點之間開始近似隔離,狀態開始不一致),即P一旦出現,我們選擇繼續提供服務那么狀態就肯定不一致,也就等于放棄了C;我們選擇不提供服務,那么就等于放棄了A。通俗一點,P并不是目標,也不是手段,它是伴隨著“多結點,網絡,數據,共享”的要求而必然出現的,出現的原因是因為網絡的不可靠性及結點通信延遲(延遲的原因可能是由于硬件,網絡,或者壓力太大而無法及時響應)。
弄清楚了CAP的P,也就弄清楚了CAP理論的實質,戴在頭頂的緊箍咒便永久摘掉了。
CAP理論并不是要求我們悲觀地放棄A和C任何一方,相反,它可以樂觀地指導我們將C和A最大化;ACID和BASE分別處于CAP理論的兩個極端,ACID強調強一致性,BASE強調高可用性,兩者把重點都放在A和C上,淡化了P也可變的事實;通過對P的出現檢測,發現P之后的限制和約束,P結束之后的補償和恢復,通過采用千差萬別的策略,我們可以避免P帶來的C和A的嚴重損失,實現A和C的最大化來提高整個系統的正確性和可用性。ACID和BASE并非水火不容,我們可以在同一個系統中,既使用ACID,又使用BASE。
?
?
BASE
BASE來自于互聯網的電子商務領域的實踐,它是基于CAP理論逐步演化而來,核心思想是即便不能達到強一致性(Strong consistency),但可以根據應用特點采用適當的方式來達到最終一致性(Eventual consistency)的效果。BASE是Basically Available、Soft state、Eventually consistent三個詞組的簡寫,是對CAP中C & A的延伸。BASE的含義:
(1)Basically Available:基本可用;
(2)Soft-state:軟狀態/柔性事務,即狀態可以有一段時間的不同步;
(3)Eventual consistency:最終一致性;
BASE是反ACID的,它完全不同于ACID模型,犧牲強一致性,獲得基本可用性和柔性可靠性并要求達到最終一致性。
后面我會不斷充實這本軟件定律。
作者:arrowcat
出處:http://www.cnblogs.com/hustcat/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
本文為Gleasy原創文章,轉載請指明引自Gleasy團隊博客
轉載于:https://www.cnblogs.com/top100j/p/4712606.html
總結
以上是生活随笔為你收集整理的架构师速成8.3-架构师必须要了解的规则(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新秀nginx源代码分析数据结构篇(四)
- 下一篇: 【转】实战 SSH 端口转发