成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

說說操作系統(tǒng)微內核和Dubbo微內核?

系統(tǒng)
這篇文章借著 Dubbo 來說說微內核這種設計思想,不會扯到 Dubbo 某個具體細節(jié)實現(xiàn)上,和 Dubbo 強相關的內容會在之后的文章寫到。

[[360406]]

本文轉載自微信公眾號「yes的練級攻略」,作者是Yes呀。轉載本文請聯(lián)系yes的練級攻略公眾號。  

你好,我是 yes。

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

這篇文章借著 Dubbo 來說說微內核這種設計思想,不會扯到 Dubbo 某個具體細節(jié)實現(xiàn)上,和 Dubbo 強相關的內容會在之后的文章寫到。

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

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

這么說你肯定不清楚,別急,聽我慢慢道來。

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

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

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

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

這個詞條歸類在操作系統(tǒng)技術下,所以這里的微內核指的就是操作系統(tǒng)的內核設計,與之對應的是宏內核架構。

Linux 就是宏內核架構。

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

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

像 Linux 這樣的宏內核設計是把這些功能都作為內核來實現(xiàn),而微內核則僅保留最基礎的功能。

比如就留下進程的管理、內存管理等,把文件管理等功能剝離出去,變成用戶空間的獨立進程來提供服務。

來看下這個維基百科上的這個圖應該就很清晰了。

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

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

系統(tǒng)也就更加穩(wěn)定,不易奔潰,因為那些服務從內核中移除,在用戶空間運行著,如果出了故障,內核重啟這個服務就好了,不會像之前那樣整個內核 GG。

拿顯卡驅動來說,出問題就藍屏,這要是微內核設計就可以重啟顯卡驅動。

聽起來好像微內核很好啊?并不是,接下來就說說微內核的缺點。

首先是性能問題。

因為很多功能作為獨立進程放到用戶空間運行了,所以宏內核時的函數(shù)調用就變成了進程間調用,涉及進程間的通信,還會伴隨著內核態(tài)和用戶態(tài)的來回切換,我們知道這種上下文切換時比較耗時的。

這性能的問題就有點大了。

然后微內核設計沒那么簡單,想要靈巧、減少耦合、提高可移植性就需要好好的設計,按照林納斯的話來說:“如果 GNU 內核(微內核架構)早在去年春天完成了,我壓根不會開始我的項目(Lniux)。”

GNU Hurd 采用微內核架構,設計過于精巧,研發(fā)速度緩慢,性能長期無法提升。

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

我們來回顧一下那段歷史,挺有意思的。

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

[[360407]]

安德魯

當時的學術風潮是微內核架構,把核心功能模塊化,劃分為幾個獨立的進程,運行在不同的地址空間提高了代碼的可移植和系統(tǒng)的安全性。

所以 Minix 就是按微內核架構編寫的,當然還有上述提到的 GNU Hurd。

而林納斯那時候讀大學,他祖父送了他一臺 Intel 80386,林納斯也看到了安德魯?shù)慕炭茣鶕?jù)書上的內容寫出了 Linux。

[[360408]]

林納斯

不過沒有按照微內核的設計,而是跟 Unix 一樣采用了宏內核架構。

安德魯教授看到了 Linux ,然后在 comp.os.Minix 上批評道:宏內核的設計是有害的。

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

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

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

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

而且 Linux 本來就是為我自己做的,所以契合 80386,如果要移植到別的平臺,代碼都是開源的(Minix 源碼當時得買),想要的人自己做咯。

安德魯也做了一波回應:Minix 有局限性是因為我是教授,因為大部分學生都只能在低配的機器上使用,所以系統(tǒng)的硬件需求得足夠低,雖然你 Linux 是免費的,但是需要的硬件貴呀。

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

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

微內核市面上設計成功的有 QNX,黑莓手機就是用這個操作系統(tǒng),車用市場也幾乎都用 QNX 系統(tǒng)。

[[360409]]

黑莓手機

這手機很多年前我用過,當時覺得有點東西的。

宏內核的話就提個 Linux ,足夠了。

兩個架構都有成功的產(chǎn)品,所以還是取舍的問題,也沒有誰完全壓著誰。

再具體的就不深入了,今天的主角其實是廣義上的微內核。

Dubbo 中的微內核

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

這個微內核說白了就是把不變的功能抽象出來稱為核心,把變動的功能作為插件來擴展,符合開閉原則,更容易擴展、維護。

小霸王游戲機大家都應該玩過,就長這樣的,它的設計就可以認為是個微內核設計。

[[360411]]

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

我們想玩哪個游戲就插哪個游戲片,簡單便捷,不影響機體本身。

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

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

這就是微內核架構的精髓。

這里再扣個細節(jié),較個真(就是我個人的一點想法)。

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

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

從字面意義來看,Mark 認為核心系統(tǒng)指的是可以獨立運行且提供基本功能的最小模塊。

例如 vscode、idea、chrome 等設計就符合 Mark 認為的核心設計,核心系統(tǒng)提供基礎必備的功能,可以獨立運行。

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

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

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

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

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

但是小霸王這種難道就不算微內核了嘛?

就我個人而言,把變與不變區(qū)分出來,把變化封裝成插件就稱為微內核設計。

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

這樣的內核就像膠水,把各個插件結合起來最終提供服務,沒有插件這個系統(tǒng)就沒什么意義。

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

因此我覺得 Mark 說的不太準確,容易產(chǎn)生誤導。

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

微內核設計的好處

這里的微內核指的是廣義的微內核。

作為一個框架或者軟件,擴展性非常的重要。

因為一個框架、一個軟件的使用者千千萬,不同的人有不同的需求。

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

做夢,不存在的。

有些 idea 你想都想不到。

比如我之前看到的 vscode 里面有個「坤坤鼓勵師」插件,默認你代碼寫一小時之后蔡徐坤來給你跳雞你太美,讓你休息休息......

來感受一下?

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

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

當然也不是什么都要微內核

微內核看起來是很方便,但是設計起來就不方便了。

需要精心的設計,抽象出各種擴展點。

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

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

一般微內核適合用在框架的設計上,或者一些規(guī)則引擎的設計,只有復雜的會有很多變化的需求場景才需要用到微內核。

像一般簡單的項目,本來就一條直道走到底的那種就算了,不要瞎操作,等下秀折了腿。

最后

微內核其實就是一種架構思想,可以是框架層面的,也可以細化到某個模塊的設計。

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

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

至于 Dubbo 的微內核就離不開它的 SPI,之后文章會深入寫一波,等我哈。

 

責任編輯:武曉燕 來源: yes的練級攻略
相關推薦

2024-12-27 09:46:10

2009-09-01 09:14:42

2011-01-14 16:23:46

Linux內核

2009-06-19 20:32:00

Linux

2010-04-14 09:40:05

2011-01-04 18:15:21

2009-12-17 18:19:12

Linux操作系統(tǒng)

2021-11-01 11:27:26

宏內核微內核Linux

2009-02-17 16:07:29

Linux操作系統(tǒng)內核啟動參數(shù)

2017-08-24 11:00:56

Linux用戶空間內核空間

2023-12-08 13:20:00

DDDSOA微服務

2021-05-10 08:30:59

CentosUbutun運維

2023-06-12 00:22:50

操作系統(tǒng)應用程序內核鎖

2009-12-23 09:34:51

Fedora VMne

2020-12-30 09:05:24

架構微內核系統(tǒng)

2020-12-08 11:17:41

微內核架構設計

2018-11-01 14:12:03

前端架構Javascript

2019-06-28 08:31:01

微內核安卓系統(tǒng)

2011-01-14 16:01:27

2021-06-17 08:19:37

操作系統(tǒng)OS Kernel
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕视频在线观看 | 国产一级在线观看 | 久久久久国产一区二区三区四区 | 欧美h视频 | 激情网站在线 | cao在线| 日韩中文一区 | 香蕉久久久久久 | 亚洲免费三级 | 黄色a三级| www.亚洲精品 | 午夜码电影 | 天天干亚洲 | 精品一区二区三区在线观看 | 天天色天天射天天干 | 懂色中文一区二区在线播放 | 女同久久另类99精品国产 | 97在线超碰| 国产欧美精品区一区二区三区 | 欧美另类视频 | 黄色av网站在线免费观看 | 91精品亚洲 | 日韩欧美久久精品 | 免费成年网站 | 熟女毛片| 欧美日韩高清一区 | 国产成人99久久亚洲综合精品 | 亚洲国产精品一区二区三区 | 欧美日韩国产精品激情在线播放 | 精品www | 91精品久久久久久久久 | 毛片免费看的 | 久久久综合精品 | 日本精品一区二区三区视频 | 激情毛片 | 超碰精品在线 | 人人精品 | 久久er精品 | 久久国产精品亚洲 | 国产激情一区二区三区 | 亚洲欧美日韩一区 |