Category Archives: Distributed

reliability & availability

在系統設計中,有時會關注reliability, availability這兩個特性。reliability 是可靠度而availability是可用度。 這是兩個完全不同的概念(但要看定義)。在可靠度工程裡有比較嚴謹的數學定義,這邊只做qualitative概念性的描述。 Dependability, or reliability, describes the ability of a system or component to function under stated conditions for a specified period of time (節錄 https://en.wikipedia.org/wiki/Reliability_engineering) reliability 指的是系統在一段時間內是否正常運作,而availability指的是在一段時間內系統可以使用的時間比例 (這邊在不同的context下可能會有不同的定義方式,例如CAP裡論證的availability是以response time來定義availability) a measure of the degree of a system … Continue reading

Posted in Distributed | Leave a comment

2PC – an interesting analogy

interesting analogy主要是後面提到的marriage vows描述,2PC (two phase commit 兩階段提交) 是在transaction processing裡的一種protocol,主要是為了要保證atomic operation,在transaction或database裡的atomic指的是 all occur, or nothing occurs. 在transaction裡一系列的操作生效 或是 當作沒發生過。2PC是在分布式系統中,需要transaction時的基本做法,有一些算法也是基於2PC所遇到的問題進行改良(如3PC) 2PC主要是提供在分布式環境多節點的atomic演算法,這邊的節點有可能是不同主機或process 舉例來說,銀行的轉帳,A帳戶的錢轉到B帳戶所需要的操作是 1. A扣掉轉的錢(&手續費) 2. B帳戶的錢增加 (這兩個操作可能是發生在不同地方的主機) 這兩個操作應當是視為一整體,也就是當使用者按下確認轉帳後 因為某些原因如網路或設備故障造成交易無法完成時,系統必須回復到交易前的狀態(就如同沒發生過),否則可能會造成A帳戶的錢扣了,而B帳戶的錢沒增加。 因為假設操作節點有可能故障,這樣的設計必須是可以failure recovery的,當失敗時可以回復狀態(無論是多節點中其他節點的失敗或是自己本身的故障如斷電),要能夠進行這樣的recovery 必須要有durability來紀錄操作歷史以便復原。所以一般會用redo log, undo log紀錄操作在非揮發性的儲存上面。 另外因為牽涉多節點的協調,所以很自然會有一個協調者的角色。這個協調者通知與蒐集所有節點的回報來確認操作是否成功或失敗。(commit or abort) 這個演算法分成兩階段 1. commit-request phase … Continue reading

Posted in Distributed | Leave a comment