您好,登錄后才能下訂單哦!
這篇文章主要講解了“什么是單體架構”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“什么是單體架構”吧!
模塊化編程是 20 世紀 60 年代末到 70 年代間提出的方案。它是從類到更粗粒度代碼單元的明確定義的進化。編程語言使用不同等級的明確性來實現模塊化。
例如,JAVA 在類這個層級的可見性有默認級別和 public 級別,默認級別意味著類只在它所屬的 package (模塊)內可見,而 public 級別意味著這個類在 package (模塊)內和 package (模塊)外都可見。
組件是另一種模塊化風格。如我之前一篇文章(譯)所述,組件是按照領域概念劃分的模塊。理想情況下,它們是可以組成應用的獨立的“應用程序”。老生常談的例子是在 Unix 系統中廣泛使用的管道和過濾器架構,例如我們可以使用這樣的命令ps -ef | grep php。另外的例子就是 Netflix 將微服務作為應用的組件。
代碼的組織風格和模塊化軟件開發一樣,早在 20 世紀 60 年代末就已經存在了。
現在,單體架構風格就是簡單地意味著所有應用代碼被部署并運行在單一節點的單一進程中。我們認為它會用到模塊和組件,盡管事實往往并非如此。
這里有兩個關鍵詞“部署”和“節點”要好好地理解。第一個詞“部署”的意思是運行時代碼的組織方式,無論代碼在物理上是存儲在一個還是多個代碼庫之中。而第二個詞“節點”的意思是即便是在橫向擴展的情況下我們將應用部署到了多個服務器,它依然是一個單體。
在單一節點的服務器上,單體的所有模塊都被集中到同一個內存映像里,作為單一節點上的單個進程運行。通過標準進程調用在同一個棧和堆內進行模塊間的通信。單個的內存映像讓應用變成了單體。如果模塊在不同的進程中運行,通信就變成了 IPC (進程間調用)。由于模塊進入了不同的進程邊界,你將要面臨分布式計算的挑戰。這就進入了微服務的范疇。(感謝dban的反饋)。
盡管這種風格聲名狼藉,但它依然可以在大型應用中工作得很好。只是下面這些條件下表現得不足夠好:
不同的領域組件需要獨立可伸縮;
不同的組件需要不同的編程語言來編寫;
獨立可部署,因為我們的發布頻率比一個代碼庫的持續交付流水線要快,由于需要等待其它發布的部署導致自身發布的部署變慢,或者導致部署隊列增長太快無法及時響應。
這時,我們需要將單體按照面向服務的架構風格(接下來的文章中將詳細介紹)拆分成不同的應用程序。
“大泥球”又稱意大利面架構,是這種風格的反模式。這種反模式中,包結構和關系十分模糊,結構化的內聚和封裝完全沒有或極少,依賴毫無規則,子系統很難分辨,也很難修改和重構。系統晦澀、粘滯、脆弱、僵化:就是一個大泥球!
感謝各位的閱讀,以上就是“什么是單體架構”的內容了,經過本文的學習后,相信大家對什么是單體架構這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。