架構思考:不靠譜的元件與可靠的系統

danny_2018發表於2023-10-31

我們應該把精力放到單個元件的精益求精上還是整體流程和架構上?構建一個大規模卻依然可靠的軟體系統是否可行?

對於架構和元件的關係,曾經閱讀過一本書,關於如何構建一個大型分散式系統的,被幾個觸及靈魂的問題吸引,略加整理,供大家參考。

一、我們應該把精力放到單個元件的精益求精上還是整體流程和架構上?

這個問題說實話很不好回答,要麼得罪程式設計師要麼得罪架構師,按照中國傳統的中庸哲學,肯定是走中間路線,誰也不得罪。所以我們會說,都要重要。重視元件主要是編碼能力和編碼質量,很多時候由技術人員個體水平決定,重視架構則是軟體工程和軟體架構的規劃和設計,更多是技術管理和管控層的水平決定。重視單個元件的精益演進是“術”層面的事情,重視架構是“道”層面的事情。

另外,從工程實踐層面講,單個元件的迭代和最佳化屬於具象化的,是可見可控的。流程和架構的持續迭代是抽象的,根據情況的不同和幹係人的不同會有不同的辦法和演進思路。

二、構建一個大規模卻依然可靠的軟體系統是否可行?

這個問題乍一聽,覺得有點不可理喻,要是不靠譜,我們這一大幫人整天瞎忙活什麼啊,散了算了。

其實,這個問題要從墨菲定律談起。

“墨菲定律”很複雜,簡而言之,其根本內容是“凡是可能出錯的事有很大機率會出錯”,指的是任何一個事件,只要具有大於零的機率,就不能夠假設它不會發生。通俗來講,事情往往會朝化的一面演進和發展。

回到我們的問題上。有了“墨菲定律”這樣一個神論斷,加上“大規模”這樣一個嚇人的前提,我們會發現在軟體開發和執行過程中,程式碼質量、硬體穩定性、網路可靠性等因素,其負面影響會形成疊加效應,會被不斷放到,直到成為制約軟體成敗的關鍵因素。所以我們可以得出這樣的結論,如果一項工作要經過多個“不靠譜”環節和過程的協同作用,其誤差和負面影響會疊加,最終導致結果不能收斂不可控。

這樣來看,我們好像得出了一個相反的結論,其實不然。我們可以用一個生命體來類比。

不可靠的部件可以理解成構成生命體的基本細胞和分子,在熱力學擾動、生物學複製差錯的影響下,這些細胞和分子是不可靠的,是不靠譜的。但是我們的生命體卻是鮮活的,恰恰是因為使用了不可靠的部件完成遺傳進化,這裡面的關鍵是我們的生命體承認細胞和分子的不可靠,會靠生命體本身的代償機制和進化機制,實現細胞和分子的新舊交替,不可靠的細胞和分子一定會消亡,也終究會在靠譜的系統組織下重生。

回到我們的話題上,那就是架構在起作用,有人把這種架構稱之為“鳳凰架構”,俗稱“不死鳥”。

三、演進的架構是系統永葆青春的秘籍

從單體應用、SOA、微服務、服務網格、無服務等架構的興起,我們的系統架構其實一種呈現一種有規律的演進,從集中到分散、從大到小、從宏觀到微觀。但是,我們也應該看到,“分久必合合久必分”的天下大勢,迴歸到我們的系統架構上,集中與分散都是因勢而為。每一種架構的優點都是讓系統活得更好,但是系統架構的關鍵問題是如何讓系統持續穩定的執行,至於用什麼架構去實現,那是術層面的問題,切不可本末倒置。

流水不腐戶樞不蠹,有老朽,有消亡,有重生,有更替,這才是一個生態應該有的正常秩序。哪怕系統採用了十分不靠譜的元件,只要整體架構設計了恰當熔斷和服務淘汰和重建機制,從系統外部觀察,架構依然會表現出整體的穩定性和持續的服務能力。

以上很多觀點都來自於那本書和網上的內容,又加了一些本人的淺見。

來自 “ twt社群 ”, 原文作者:鄭金輝;原文連結:https://mp.weixin.qq.com/s/RUJOe42GHGwDkrOdkdmIiw,如有侵權,請聯絡管理員刪除。

相關文章