當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]這篇文章借著 Dubbo來(lái)說(shuō)說(shuō)微內(nèi)核這種設(shè)計(jì)思想,不會(huì)扯到 Dubbo 某個(gè)具體細(xì)節(jié)實(shí)現(xiàn)上,和 Dubbo 強(qiáng)相關(guān)的內(nèi)容會(huì)在之后的文章寫(xiě)到。

你好,我是 yes。

在之前的文章已經(jīng)提到了 RPC 的核心,想必一個(gè) RPC 通信大致的流程和基本原理已經(jīng)清晰了。

這篇文章借著 Dubbo 來(lái)說(shuō)說(shuō)微內(nèi)核這種設(shè)計(jì)思想,不會(huì)扯到 Dubbo 某個(gè)具體細(xì)節(jié)實(shí)現(xiàn)上,和 Dubbo 強(qiáng)相關(guān)的內(nèi)容會(huì)在之后的文章寫(xiě)到。

所以今天的重點(diǎn)在微內(nèi)核,而這個(gè)概念我最早是從操作系統(tǒng)那里得知,不過(guò)操作系統(tǒng)的微內(nèi)核和 Dubbo 相關(guān)的微內(nèi)核又不太一樣。

Dubbo 的微內(nèi)核廣義上的微內(nèi)核,而操作系統(tǒng)只是針對(duì)內(nèi)核實(shí)現(xiàn)。

這么說(shuō)你肯定不清楚,別急,聽(tīng)我慢慢道來(lái)。

我們先看看操作系統(tǒng)的微內(nèi)核。

面試官:說(shuō)說(shuō)操作系統(tǒng)微內(nèi)核和Dubbo微內(nèi)核?

操作系統(tǒng)中的微內(nèi)核

在維基百科上搜索微內(nèi)核出現(xiàn)的就是:

在計(jì)算機(jī)科學(xué)中,微內(nèi)核(英語(yǔ):Microkernel,μ-kernel),是一種內(nèi)核的設(shè)計(jì)架構(gòu),由盡可能精簡(jiǎn)的程序所組成,以實(shí)現(xiàn)一個(gè)操作系統(tǒng)所需要的最基本功能,包括了底層的尋址空間管理、線程管理、與進(jìn)程間通信。

這個(gè)詞條歸類(lèi)在操作系統(tǒng)技術(shù)下,所以這里的微內(nèi)核指的就是操作系統(tǒng)的內(nèi)核設(shè)計(jì),與之對(duì)應(yīng)的是宏內(nèi)核架構(gòu)。

Linux 就是宏內(nèi)核架構(gòu)。

操作系統(tǒng)我們都知道它是一個(gè)中間層,為我們管理底層的硬件資源,為上層服務(wù)提供接口。

提供進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、進(jìn)程通信等功能。

像 Linux 這樣的宏內(nèi)核設(shè)計(jì)是把這些功能都作為內(nèi)核來(lái)實(shí)現(xiàn),而微內(nèi)核則僅保留最基礎(chǔ)的功能。

比如就留下進(jìn)程的管理、內(nèi)存管理等,把文件管理等功能剝離出去,變成用戶空間的獨(dú)立進(jìn)程來(lái)提供服務(wù)。

來(lái)看下這個(gè)維基百科上的這個(gè)圖應(yīng)該就很清晰了。

面試官:說(shuō)說(shuō)操作系統(tǒng)微內(nèi)核和Dubbo微內(nèi)核?

宏內(nèi)核中的一些功能在微內(nèi)核架構(gòu)上都被獨(dú)立到用戶態(tài)中,這樣內(nèi)核代碼量就少了。

代碼少了潛在的 bug 就少,出了問(wèn)題也更容易排查。

系統(tǒng)也就更加穩(wěn)定,不易奔潰,因?yàn)槟切┓?wù)從內(nèi)核中移除,在用戶空間運(yùn)行著,如果出了故障,內(nèi)核重啟這個(gè)服務(wù)就好了,不會(huì)像之前那樣整個(gè)內(nèi)核 GG。

拿顯卡驅(qū)動(dòng)來(lái)說(shuō),出問(wèn)題就藍(lán)屏,這要是微內(nèi)核設(shè)計(jì)就可以重啟顯卡驅(qū)動(dòng)。

聽(tīng)起來(lái)好像微內(nèi)核很好???并不是,接下來(lái)就說(shuō)說(shuō)微內(nèi)核的缺點(diǎn)。

首先是性能問(wèn)題。

因?yàn)楹芏喙δ茏鳛楠?dú)立進(jìn)程放到用戶空間運(yùn)行了,所以宏內(nèi)核時(shí)的函數(shù)調(diào)用就變成了進(jìn)程間調(diào)用,涉及進(jìn)程間的通信,還會(huì)伴隨著內(nèi)核態(tài)和用戶態(tài)的來(lái)回切換,我們知道這種上下文切換時(shí)比較耗時(shí)的。

這性能的問(wèn)題就有點(diǎn)大了。

然后微內(nèi)核設(shè)計(jì)沒(méi)那么簡(jiǎn)單,想要靈巧、減少耦合、提高可移植性就需要好好的設(shè)計(jì),按照林納斯的話來(lái)說(shuō):“如果 GNU 內(nèi)核(微內(nèi)核架構(gòu))早在去年春天完成了,我壓根不會(huì)開(kāi)始我的項(xiàng)目(Lniux)?!?

GNU Hurd 采用微內(nèi)核架構(gòu),設(shè)計(jì)過(guò)于精巧,研發(fā)速度緩慢,性能長(zhǎng)期無(wú)法提升。

當(dāng)年林納斯還和 Minix 的作者安德魯,對(duì)操作系統(tǒng)的宏內(nèi)核和微內(nèi)核的好壞進(jìn)行了一波網(wǎng)絡(luò)口水戰(zhàn)。

我們來(lái)回顧一下那段歷史,挺有意思的。

因?yàn)?AT&T 把 Unix 商業(yè)化了,大學(xué)不能免費(fèi)使用 Unix,身為大學(xué)教授的安德魯為了教學(xué)自己搞了個(gè)操作系統(tǒng),即 Minix。

面試官:說(shuō)說(shuō)操作系統(tǒng)微內(nèi)核和Dubbo微內(nèi)核? 安德魯

當(dāng)時(shí)的學(xué)術(shù)風(fēng)潮是微內(nèi)核架構(gòu),把核心功能模塊化,劃分為幾個(gè)獨(dú)立的進(jìn)程,運(yùn)行在不同的地址空間提高了代碼的可移植和系統(tǒng)的安全性。

所以 Minix 就是按微內(nèi)核架構(gòu)編寫(xiě)的,當(dāng)然還有上述提到的 GNU Hurd。

而林納斯那時(shí)候讀大學(xué),他祖父送了他一臺(tái) Intel 80386,林納斯也看到了安德魯?shù)慕炭茣?shū),根據(jù)書(shū)上的內(nèi)容寫(xiě)出了 Linux。

面試官:說(shuō)說(shuō)操作系統(tǒng)微內(nèi)核和Dubbo微內(nèi)核? 林納斯

不過(guò)沒(méi)有按照微內(nèi)核的設(shè)計(jì),而是跟 Unix 一樣采用了宏內(nèi)核架構(gòu)。

安德魯教授看到了 Linux ,然后在 comp.os.Minix 上批評(píng)道:宏內(nèi)核的設(shè)計(jì)是有害的。

Linux 內(nèi)核耦合度太高,完全是為了 Intel 80386 而設(shè)計(jì)的,處理器架構(gòu)進(jìn)化很快的,操作系統(tǒng)應(yīng)該都具備可移植性。

安德魯還提到:都1991年了還用宏內(nèi)核來(lái)設(shè)計(jì)操作系統(tǒng),這是一種巨大的退步。

林納斯在一天之后進(jìn)行了反擊,他說(shuō) Minix 設(shè)計(jì)上有缺陷,從哲學(xué)和美學(xué)角度來(lái)看微內(nèi)核確實(shí)好,但是你看 GUN Hurd 到現(xiàn)在還沒(méi)開(kāi)發(fā)出來(lái)。

然后操作系統(tǒng)本來(lái)就依靠硬件的特性,所以內(nèi)核本身不需要過(guò)度具備可移植性,應(yīng)用程序的可移植性才重要,Linux 比 Minix 好移植多了。

而且 Linux 本來(lái)就是為我自己做的,所以契合 80386,如果要移植到別的平臺(tái),代碼都是開(kāi)源的(Minix 源碼當(dāng)時(shí)得買(mǎi)),想要的人自己做咯。

安德魯也做了一波回應(yīng):Minix 有局限性是因?yàn)槲沂墙淌冢驗(yàn)榇蟛糠謱W(xué)生都只能在低配的機(jī)器上使用,所以系統(tǒng)的硬件需求得足夠低,雖然你 Linux 是免費(fèi)的,但是需要的硬件貴呀。

其實(shí)可以看到,兩者并沒(méi)有對(duì)宏內(nèi)核和微內(nèi)核的技術(shù)細(xì)節(jié)的進(jìn)行深入探討,而是抓住對(duì)方的:你這 Minix 代碼還要收費(fèi),你這 Linux 需要的硬件這么貴來(lái)進(jìn)行“攻擊”,所以稱(chēng)之為口水戰(zhàn)。

反正口水戰(zhàn)之后雙方都沒(méi)有改變各自的設(shè)計(jì),不過(guò)林納斯有引進(jìn)微內(nèi)核的思想來(lái)改進(jìn)代碼,也改善了可移植性。

微內(nèi)核市面上設(shè)計(jì)成功的有 QNX,黑莓手機(jī)就是用這個(gè)操作系統(tǒng),車(chē)用市場(chǎng)也幾乎都用 QNX 系統(tǒng)。

面試官:說(shuō)說(shuō)操作系統(tǒng)微內(nèi)核和Dubbo微內(nèi)核? 黑莓手機(jī)

這手機(jī)很多年前我用過(guò),當(dāng)時(shí)覺(jué)得有點(diǎn)東西的。

宏內(nèi)核的話就提個(gè) Linux ,足夠了。

兩個(gè)架構(gòu)都有成功的產(chǎn)品,所以還是取舍的問(wèn)題,也沒(méi)有誰(shuí)完全壓著誰(shuí)。

再具體的就不深入了,今天的主角其實(shí)是廣義上的微內(nèi)核。

Dubbo 中的微內(nèi)核

Dubbo 的微內(nèi)核是廣義上的,它的思想是:核心系統(tǒng)+插件。

面試官:說(shuō)說(shuō)操作系統(tǒng)微內(nèi)核和Dubbo微內(nèi)核?

這個(gè)微內(nèi)核說(shuō)白了就是把不變的功能抽象出來(lái)稱(chēng)為核心,把變動(dòng)的功能作為插件來(lái)擴(kuò)展,符合開(kāi)閉原則,更容易擴(kuò)展、維護(hù)。

小霸王游戲機(jī)大家都應(yīng)該玩過(guò),就長(zhǎng)這樣的,它的設(shè)計(jì)就可以認(rèn)為是個(gè)微內(nèi)核設(shè)計(jì)。

面試官:說(shuō)說(shuō)操作系統(tǒng)微內(nèi)核和Dubbo微內(nèi)核?

機(jī)體本身作為核心系統(tǒng),游戲片就是插件。

我們想玩哪個(gè)游戲就插哪個(gè)游戲片,簡(jiǎn)單便捷,不影響機(jī)體本身。

假設(shè)不把游戲片抽象成插件式,那是不是就難搞了?換個(gè)游戲就成為難題了。

所以微內(nèi)核架構(gòu)的本質(zhì)就是將變化的部分抽象成插件,使得可以快速簡(jiǎn)便地滿足各種需求又不影響整體的穩(wěn)定性。

這就是微內(nèi)核架構(gòu)的精髓。

這里再扣個(gè)細(xì)節(jié),較個(gè)真(就是我個(gè)人的一點(diǎn)想法)。

Mark Richards 在 《Software Architecture Patterns》的微內(nèi)核章節(jié)里面提到

The core system of the microkernel architecture pattern traditionally contains only the minimal functionality required to make the system operational.

從字面意義來(lái)看,Mark 認(rèn)為核心系統(tǒng)指的是可以獨(dú)立運(yùn)行且提供基本功能的最小模塊

例如 vscode、idea、chrome 等設(shè)計(jì)就符合 Mark 認(rèn)為的核心設(shè)計(jì),核心系統(tǒng)提供基礎(chǔ)必備的功能,可以獨(dú)立運(yùn)行。

像 vscode 核心就是編輯器,沒(méi)有插件也可以獨(dú)立運(yùn)行,然后又有豐富的插件,來(lái)滿足一些特殊需求,擴(kuò)展核心系統(tǒng)的功能。

這里可能會(huì)讓人產(chǎn)生誤導(dǎo),認(rèn)為核心必須是能讓系統(tǒng)運(yùn)行的最小功能模塊。

我認(rèn)為核心不一定需要獨(dú)立運(yùn)行且提供基礎(chǔ)功能,能讓系統(tǒng)運(yùn)行的最小組織模塊也是核心。

兩個(gè)說(shuō)法的差別在于:只有核心的話系統(tǒng)能否正常的運(yùn)行。

vscode 沒(méi)有插件照樣能運(yùn)行,能提供基本功能,而小霸王游戲機(jī)沒(méi)有游戲片那運(yùn)行個(gè)寂寞,玩?zhèn)€球。

但是小霸王這種難道就不算微內(nèi)核了嘛?

就我個(gè)人而言,把變與不變區(qū)分出來(lái),把變化封裝成插件就稱(chēng)為微內(nèi)核設(shè)計(jì)。

像 Dubbo 能支持很多協(xié)議、各種負(fù)載均衡的擴(kuò)展、集群的擴(kuò)展等等,它自身的一些功能也是通過(guò)擴(kuò)展點(diǎn)實(shí)現(xiàn)的,沒(méi)有插件也跑不了。

這樣的內(nèi)核就像膠水,把各個(gè)插件結(jié)合起來(lái)最終提供服務(wù),沒(méi)有插件這個(gè)系統(tǒng)就沒(méi)什么意義。

所以我認(rèn)為核心系統(tǒng)不一定需要能獨(dú)立運(yùn)行,能讓系統(tǒng)運(yùn)行的最小組織模塊也是核心。。

因此我覺(jué)得 Mark 說(shuō)的不太準(zhǔn)確,容易產(chǎn)生誤導(dǎo)。

當(dāng)然這是文字上面的摳細(xì)節(jié),核心概念都是一致的:抽象出核心,剝離變化為插件。

微內(nèi)核設(shè)計(jì)的好處

這里的微內(nèi)核指的是廣義的微內(nèi)核。

作為一個(gè)框架或者軟件,擴(kuò)展性非常的重要。

因?yàn)橐粋€(gè)框架、一個(gè)軟件的使用者千千萬(wàn),不同的人有不同的需求。

身為框架的維護(hù)者、軟件的開(kāi)發(fā)者你有精力和能力滿足所有用戶的需求?

做夢(mèng),不存在的。

有些 idea 你想都想不到。

比如我之前看到的 vscode 里面有個(gè)「坤坤鼓勵(lì)師」插件,默認(rèn)你代碼寫(xiě)一小時(shí)之后蔡徐坤來(lái)給你跳雞你太美,讓你休息休息......

面試官:說(shuō)說(shuō)操作系統(tǒng)微內(nèi)核和Dubbo微內(nèi)核?

來(lái)感受一下?

面試官:說(shuō)說(shuō)操作系統(tǒng)微內(nèi)核和Dubbo微內(nèi)核?

所以做一個(gè)框架或者軟件,想要讓更多人使用,不僅自身提供的功能要全、性能要好、使用要簡(jiǎn)單,讓用戶 DIY,做各種定制化也非常的關(guān)鍵!

Dubbo 的成功其實(shí)就離不開(kāi)它的微內(nèi)核設(shè)計(jì),定制化開(kāi)發(fā)在很多場(chǎng)景都要用到,畢竟都得稍加改造一番來(lái)滿足自己公司的一些特殊需求。

當(dāng)然也不是什么都要微內(nèi)核

微內(nèi)核看起來(lái)是很方便,但是設(shè)計(jì)起來(lái)就不方便了。

需要精心的設(shè)計(jì),抽象出各種擴(kuò)展點(diǎn)。

除了本身的功能還需要管理插件的生命周期、插件如何連接、如何通信等。

有些還需要做沙箱隔離,防止插件污染整個(gè)系統(tǒng)等等,本來(lái)的內(nèi)部函數(shù)調(diào)用變成了插件間的通信,反正設(shè)計(jì)起來(lái)是復(fù)雜了。

一般微內(nèi)核適合用在框架的設(shè)計(jì)上,或者一些規(guī)則引擎的設(shè)計(jì),只有復(fù)雜的會(huì)有很多變化的需求場(chǎng)景才需要用到微內(nèi)核。

像一般簡(jiǎn)單的項(xiàng)目,本來(lái)就一條直道走到底的那種就算了,不要瞎操作,等下秀折了腿。

最后

微內(nèi)核其實(shí)就是一種架構(gòu)思想,可以是框架層面的,也可以細(xì)化到某個(gè)模塊的設(shè)計(jì)。

歸根結(jié)底就是把變化封裝成插件,可插拔,擁抱變化。

當(dāng)然今天也提到了操作系統(tǒng)的微內(nèi)核,這個(gè)和廣義上的微內(nèi)核還是不太一樣的。

巨人的肩膀

https://en.wikipedia.org/wiki/Microkernel

https://en.wikipedia.org/wiki/Tanenbaum%E2%80%93Torvalds_debate

《Software Architecture Patterns》


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉