Camille Fournier在接受Stefan Tilkov采訪時指出,作為軟件架構師和開發人員,我們生活在一個分布式的世界中,為了簡化分布式系統的構建,我們要形成一種意識,企業的價值在哪里,哪里可以合理地去冒險,哪里不可以。我們應該只處理那些真正需要解決的問題。
Fournier以前曾在Rent the Runway和Goldman Sachs任職,他最喜歡Leslie Lamport的分布式系統定義:
分布式系統是其中一臺你甚至都不知道其存在的計算機出現故障可以導致你自己的計算機不可用的系統。
在Fournier看來,Lamports的定義真正地抓住了分布式系統的本質,那不是一件簡單的事情,它會出問題,而且其復雜性是如此之高,都不可能很容易地推斷出來。
人們常常因為流程中有網絡就將系統看作是分布式的,但一個只有一臺服務器和一個Web瀏覽器構成的系統,或者一個傳統的三層架構,不是Fournier通常所定義的分布式系統。她認為,那只會讓問題不必要地復雜化;我們無需為尚未遇到的問題擔心。即使你構建了一個有一定復雜性的聯網系統,那也并不一定意味著,你要為構建好一個可用的系統而必須考慮整個分布式系統領域的復雜性。
在Fournier看來,只有當你真地要貫穿許多不同的系統時,分布式才開始成為應該處理的問題。使用一種服務架構,尤其是微服務類型的架構,就會開始遇到一些復雜的問題,但未必是可能在大規模分布式系統中出現的所有問題。她指出,分布式系統是一個工程問題,同時也是一個理論問題。也就是說,你必須運用工程問題所需要的理論解決它,但也不需要更多,只要足夠解決問題就可以了。
Fournier認為,在考慮具有一定規模(不需要像Netflix那么龐大)的軟件的時候,服務架構,不管你是否稱之為微服務,是一個非常明智的方式。在有幾十名開發人員的時候,考慮將系統分成可以獨立操作的實體非常有價值。把那些實體放入服務,就可以實現獨立開發和數據所有權。單體架構本身并沒有錯,但她指出,分布式系統數量增加的原因并不只是因為我們真正需要,還是因為云的存在讓構建這樣的系統更加簡單了。
狀態讓一切變得復雜。在Fournier看來,在考慮構建分布式系統時,其中一個重要的方面是哪里關注相干和一致狀態,即在哪些部分你不希望丟失數據或讓人們看到不同的狀態。對于這些部分,她一般喜歡使用事務和傳統的關系型數據庫。一個例子是訂單處理,在這種情況下,你希望確保能夠完成所有的訂單。在其他部分,你可能不那么關心一致性,人們看到稍微有點過期的數據,或者數據丟失,都沒有問題,因為很容易重新創建。這時,Fournier認為完全可以使用NoSQL數據庫。
查看英文原文:Experiences Working with Real World Distributed Systems