自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

軟件架構(gòu)編年史:單體架構(gòu)

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

 [[389692]]

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

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

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

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

模塊化軟件開發(fā)

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

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

組件化軟件開發(fā)

組件是另一種模塊化風(fēng)格。如我之前一篇文章(譯)所述,組件是按照領(lǐng)域概念劃分的模塊。理想情況下,它們是可以組成應(yīng)用的獨(dú)立的“應(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)用代碼被部署并運(yùn)行在單一節(jié)點(diǎn)的單一進(jìn)程中。我們認(rèn)為它會用到模塊和組件,盡管事實(shí)往往并非如此。

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

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

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

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

這時(shí),我們需要將單體按照面向服務(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)晦澀、粘滯、脆弱、僵化:就是一個(gè)大泥球!

引用來源

  • 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

[[389693]]

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

 

責(zé)任編輯:武曉燕 來源: 逸言
相關(guān)推薦

2021-06-09 08:09:05

架構(gòu)軟件整潔

2021-04-12 09:48:50

MVCHTMLCSS

2021-04-30 09:16:08

軟件架構(gòu)命名

2012-06-11 15:29:14

OpenStack

2015-07-17 13:27:06

2019-01-23 17:37:58

華為

2011-07-20 09:19:47

SQL Server

2012-12-21 15:32:32

Linux Deepi

2014-12-12 14:55:42

移動(dòng)惡意代碼移動(dòng)安全

2014-05-20 17:26:06

2014-10-29 14:43:05

2012-03-30 11:34:52

Linux Deepi

2011-08-08 09:25:55

2013-10-31 14:31:09

2023-09-06 06:46:40

顯卡接口RTX 4060

2015-12-16 10:11:14

2020-08-21 13:54:24

瀏覽器程序員內(nèi)核

2025-01-23 09:07:51

2009-09-22 08:14:23

2014-05-09 11:19:38

iOS移動(dòng)互聯(lián)網(wǎng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號