總算有篇文章把【微服務(wù)】的來(lái)龍去脈講透了

面向過程(函數(shù))、面向?qū)ο?、面向接口、面向組件、面向服務(wù)、面向微服務(wù),這幾個(gè)詞,好多人傻傻分不清楚。讓俺來(lái)回歸原教旨主義,給大家析辨析辨。正好這些階段咱都親身經(jīng)歷過,沒有從90年代初期開始編程的人,可能沒啥切膚體會(huì)到。

一、面向過程(函數(shù))

我們發(fā)現(xiàn),一個(gè)函數(shù)的輸入輸出變化了,很多關(guān)聯(lián)調(diào)用都要修改。所以我們提出面向過程(函數(shù)),好好的設(shè)計(jì)函數(shù)的輸入輸出。

二、面向?qū)ο?/b>

我們發(fā)現(xiàn),不少函數(shù)其實(shí)是有一定組織關(guān)系的,但是在面向過程(函數(shù))編程過程中,這些函數(shù)都是平行排列的,沒有顯性化組織。

所以我們發(fā)明面向?qū)ο?,同一個(gè)對(duì)象關(guān)聯(lián)的函數(shù)組織在一起,并且哪些函數(shù)是私有的,哪些是公有的,哪些是親兄弟才能半公開調(diào)用的。

三、面向接口

我們發(fā)現(xiàn)有以下變化:

1、架構(gòu)師這一個(gè)崗位被提出來(lái)了,專門用于框架性代碼的設(shè)計(jì)。架構(gòu)師和程序員是兩個(gè)崗位了。架構(gòu)師他們不關(guān)心具體實(shí)現(xiàn),他們特別關(guān)心對(duì)象和對(duì)象之間的關(guān)系、層與層之間的關(guān)系。這樣,定義和實(shí)現(xiàn)要求分離。

2、我們也發(fā)現(xiàn),我和你不是一個(gè)項(xiàng)目組的,你想調(diào)用我的類,但是我不想給你這個(gè)類的源代碼實(shí)現(xiàn),因?yàn)槲业倪@個(gè)類的源代碼的所有權(quán)歸我,我可能需要隨時(shí)變化它,但我和你商定好的調(diào)用接口,我們保持穩(wěn)定,我只需要給你合規(guī)的輸入輸出,你別管我內(nèi)部代碼怎么改。

因而,面向接口編程出現(xiàn)了。它既是類特征,又做到了定義和實(shí)現(xiàn)的分離。

四、面向組件

組件比對(duì)象更進(jìn)一步。這里面關(guān)鍵的差異就是:組件是有容器的,對(duì)象和類是沒有容器的。組件的生命周期是由容器來(lái)決定的,而對(duì)象,需要程序員自己管理對(duì)象的生死創(chuàng)建與回收。

顯然,組件更讓程序員省心。因?yàn)閮?nèi)存管理,對(duì)于大量的程序員都是個(gè)挑戰(zhàn)。這又把編程難度拉下一個(gè)門檻。

小結(jié):這里出現(xiàn)了組件容器中間件服務(wù)器

五、面向服務(wù)

服務(wù)比接口更進(jìn)一步。

雖然組件編程已經(jīng)具備了容器化,雖然面向接口編程已經(jīng)做到了定義和具體實(shí)現(xiàn)的分離。

但我們還差一步,就是接口應(yīng)該和開發(fā)語(yǔ)言無(wú)關(guān)。所謂的接口,不外乎就是參數(shù)的輸入輸出。但輸入輸出是有類型的。比如說,有的語(yǔ)言是面向?qū)ο蟮?,你定義了一個(gè)輸出參數(shù)是個(gè)對(duì)象的,當(dāng)然這沒問題。但如果調(diào)用方是不面向?qū)ο蟮恼Z(yǔ)言,你咋辦?

這就是面向接口編程當(dāng)年留下的后遺癥,和開發(fā)語(yǔ)言強(qiáng)相關(guān)。

如何和開發(fā)語(yǔ)言不強(qiáng)相關(guān),這就是面向服務(wù)要解決的。

所以,面向服務(wù)在輸入輸出參數(shù)方面利用了結(jié)構(gòu)化文本這一東西,在參數(shù)傳遞方面利用了文本傳輸協(xié)議。比如說:XML/JSON、HTTP REST/WebService。當(dāng)然,怎么傳數(shù)據(jù)也可以隨便,可以用消息隊(duì)列(同步異步皆可),也可以用TCP等等。只不過協(xié)議需要定義好怎么建立握手、怎么響應(yīng)、怎么處理容錯(cuò)、怎么處理安全等等,這都是需要協(xié)議定義好的。

現(xiàn)在有企業(yè)服務(wù)總線,你想用啥輸入輸出表示格式都行,你想用啥傳輸協(xié)議都行,根據(jù)你組件的質(zhì)量保證要求就OK。當(dāng)然,你說你的代碼簡(jiǎn)單,不需要企業(yè)服務(wù)總線,兩個(gè)組件之間通過服務(wù)直接調(diào)用了,那也OK,那就不需要企業(yè)服務(wù)總線了。

小結(jié):這里出現(xiàn)了企業(yè)服務(wù)總線中間件。

六、面向微服務(wù)

我們解決了接口與開發(fā)語(yǔ)言的無(wú)關(guān)性,我們的組件就可以由不同語(yǔ)言來(lái)實(shí)現(xiàn),而且之間能通暢調(diào)用,通過各種近程遠(yuǎn)程協(xié)議我們還能實(shí)現(xiàn)跨進(jìn)程跨服務(wù)器之間的調(diào)用。

當(dāng)時(shí)我們這時(shí)又遇到了一個(gè)棘手問題,就是各個(gè)語(yǔ)言實(shí)現(xiàn)的組件,需要依賴的框架和庫(kù)越來(lái)越多,而且這些框架和庫(kù)的版本還有時(shí)候打架。你經(jīng)常會(huì)發(fā)現(xiàn),你用的這個(gè)框架要依賴2.3版本,另外一個(gè)東西非要依賴2.2版本(可能作者懶了不更新了)。而如果2.3和2.2之間的函數(shù)接口不一致了,而且作者也沒保證平滑升級(jí),那就不能升級(jí)統(tǒng)一版本。

咋辦?為了防止版本打架,只能把這些組件隔離開。幸好現(xiàn)在出現(xiàn)了Docker技術(shù),可以在一臺(tái)物理機(jī)上不用安裝N個(gè)笨重的虛擬機(jī)(虛擬機(jī)要操作系統(tǒng)一堆東西),只需要安裝好Docker,組件以及組件關(guān)聯(lián)的各種框架類庫(kù)就被隔離開了。

小結(jié):這里出現(xiàn)了Docker容器中間件。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,638評(píng)論 18 399
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評(píng)論 25 709
  • 夜幕悄悄地降臨,今夜的夜色卻是格外的好。皎潔的月光從窗口悄悄地溜了進(jìn)來(lái),照在我的臉龐上,本已是睡意朦朧的我更加...
    聆聽的路人閱讀 421評(píng)論 0 0
  • 跑馬溜溜的山上,一朵溜溜的云喲端端溜溜的照在,康定溜溜的城喲 倘若你看到上面的兩行歌詞,不自覺的唱起來(lái) 。那么恭喜...
    伴奐爾游矣閱讀 951評(píng)論 5 7

友情鏈接更多精彩內(nèi)容