日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
軟件架構(gòu)編年史:單體架構(gòu)

本文轉(zhuǎn)載自微信公眾號「逸言」,作者覃宇。轉(zhuǎn)載本文請聯(lián)系逸言公眾號。

混沌初開,單體始現(xiàn)……

默認(rèn)的架構(gòu)風(fēng)格就是構(gòu)建一個單體。我的意思是,最開始應(yīng)用程序就只有一個文件,然后應(yīng)用程序開始由多個文件組成,從 20 世紀(jì) 90 年代開始才出現(xiàn)由其它應(yīng)用程序組成的應(yīng)用(盡管20世紀(jì)80年代就開始了最初的嘗試)。

單體自己也在發(fā)生變化。當(dāng)應(yīng)用程序開始使用多個文件創(chuàng)建時,其實并沒有太多的思考,也沒有太多思考的必要,因為應(yīng)用程序都相當(dāng)簡單。當(dāng)應(yīng)用程序開始膨脹變得越來越復(fù)雜時,才會需要推敲應(yīng)用程序背后有哪些文件需要創(chuàng)建,它們又該如何關(guān)聯(lián)。

模塊化軟件開發(fā)

模塊化編程是 20 世紀(jì) 60 年代末到 70 年代間提出的方案。它是從類到更粗粒度代碼單元的明確定義的進(jìn)化。編程語言使用不同等級的明確性來實現(xiàn)模塊化。

例如,JAVA 在類這個層級的可見性有默認(rèn)級別和 public 級別,默認(rèn)級別意味著類只在它所屬的 package (模塊)內(nèi)可見,而 public 級別意味著這個類在 package (模塊)內(nèi)和 package (模塊)外都可見。

組件化軟件開發(fā)

組件是另一種模塊化風(fēng)格。如我之前一篇文章(譯)所述,組件是按照領(lǐng)域概念劃分的模塊。理想情況下,它們是可以組成應(yīng)用的獨立的“應(yīng)用程序”。老生常談的例子是在 Unix 系統(tǒng)中廣泛使用的管道和過濾器架構(gòu),例如我們可以使用這樣的命令ps -ef | grep php。另外的例子就是 Netflix 將微服務(wù)作為應(yīng)用的組件。

代碼的組織風(fēng)格和模塊化軟件開發(fā)一樣,早在 20 世紀(jì) 60 年代末就已經(jīng)存在了。

現(xiàn)代的單體

現(xiàn)在,單體架構(gòu)風(fēng)格就是簡單地意味著所有應(yīng)用代碼被部署并運行在單一節(jié)點的單一進(jìn)程中。我們認(rèn)為它會用到模塊和組件,盡管事實往往并非如此。

這里有兩個關(guān)鍵詞“部署”和“節(jié)點”要好好地理解。第一個詞“部署”的意思是運行時代碼的組織方式,無論代碼在物理上是存儲在一個還是多個代碼庫之中。而第二個詞“節(jié)點”的意思是即便是在橫向擴展的情況下我們將應(yīng)用部署到了多個服務(wù)器,它依然是一個單體。

在單一節(jié)點的服務(wù)器上,單體的所有模塊都被集中到同一個內(nèi)存映像里,作為單一節(jié)點上的單個進(jìn)程運行。通過標(biāo)準(zhǔn)進(jìn)程調(diào)用在同一個棧和堆內(nèi)進(jìn)行模塊間的通信。單個的內(nèi)存映像讓應(yīng)用變成了單體。如果模塊在不同的進(jìn)程中運行,通信就變成了 IPC (進(jìn)程間調(diào)用)。由于模塊進(jìn)入了不同的進(jìn)程邊界,你將要面臨分布式計算的挑戰(zhàn)。這就進(jìn)入了微服務(wù)的范疇。(感謝dban的反饋)。

盡管這種風(fēng)格聲名狼藉,但它依然可以在大型應(yīng)用中工作得很好。只是下面這些條件下表現(xiàn)得不足夠好:

  • 不同的領(lǐng)域組件需要獨立可伸縮;
  • 不同的組件需要不同的編程語言來編寫;
  • 獨立可部署,因為我們的發(fā)布頻率比一個代碼庫的持續(xù)交付流水線要快,由于需要等待其它發(fā)布的部署導(dǎo)致自身發(fā)布的部署變慢,或者導(dǎo)致部署隊列增長太快無法及時響應(yīng)。

這時,我們需要將單體按照面向服務(wù)的架構(gòu)風(fēng)格(接下來的文章中將詳細(xì)介紹)拆分成不同的應(yīng)用程序。

反模式:大泥球/意大利面架構(gòu)

“大泥球”又稱意大利面架構(gòu),是這種風(fēng)格的反模式。這種反模式中,包結(jié)構(gòu)和關(guān)系十分模糊,結(jié)構(gòu)化的內(nèi)聚和封裝完全沒有或極少,依賴毫無規(guī)則,子系統(tǒng)很難分辨,也很難修改和重構(gòu)。系統(tǒng)晦澀、粘滯、脆弱、僵化:就是一個大泥球!

引用來源

  • 1997 – Brian Foote, Joseph Yoder – Big Ball of Mud
  • 2012 – Len Bass, Paul Clements, Rick Kazman –Software Architecture in Practice
  • 2017 – Herberto Gra?a – Microservices architecture: What the gurus say about it
  • 2017 – Herberto Graca –Software Architecture Premises
  • 2017* – Wikipedia –Modular programming
  • 2017* – Wikipedia –Component-based software engineering

覃宇,Android開發(fā)者/ThoughtWorks技術(shù)教練//譯者,熱衷于探究軟件開發(fā)的方方面面,從端到云,從工具到實踐。喜歡通過翻譯來學(xué)習(xí)和分享知識,譯作有《Kotlin實戰(zhàn)》、《領(lǐng)域驅(qū)動設(shè)計精粹》、《Serverless架構(gòu):無服務(wù)器應(yīng)用與AWS Lambda》和《云原生安全與DevOps保障》。


文章題目:軟件架構(gòu)編年史:單體架構(gòu)
URL分享:http://m.5511xx.com/article/dphjdee.html