為什么Arch Linux不適合當(dāng)作服務(wù)器操作系統(tǒng)
相信很多用戶都沒見過Arch Linux,為什么很少看到Arch Linux呢?因?yàn)锳rch Linux在服務(wù)方面確實(shí)存在一些劣勢,下面我們來看看Arch Linux不適合當(dāng)作服務(wù)器操作系統(tǒng)的四大原因。
為什么Arch Linux不適合當(dāng)作服務(wù)器操作系統(tǒng)?
1、過分激進(jìn)的滾動更新
滾動更新是Arch Linux最大的優(yōu)勢,但同時(shí)也是最大的劣勢之一。鑒于Linux屬于一類完全開放的項(xiàng)目,技術(shù)人員的能力參差不齊,貢獻(xiàn)的代碼質(zhì)量當(dāng)然也是參差不齊的。對于其它的發(fā)行版來說,軟件包需要經(jīng)過社區(qū)完善的測試才會被發(fā)布至軟件源從而被用戶更新;然而,Arch Linux的滾動更新機(jī)制過分激進(jìn),而Arch社區(qū)對軟件包的測試并非絕對完善(有多少人滾掛過?)。從某種意義上來講,Arch這個(gè)發(fā)行版,相當(dāng)依賴其用戶群體作為測試對象;它的用戶群體就是類似測試人員的存在。Arch社區(qū)鼓勵(lì)用戶向上游反饋Bug,也是這種特殊的體系的表現(xiàn)。下圖是Arch官網(wǎng)時(shí)不時(shí)會發(fā)布的、用以幫助技術(shù)人員手動解決更新問題的“臨時(shí)解決方案”:
假如一臺Arch服務(wù)器在更新時(shí)滾掛了,技術(shù)人員頂著Boss的壓力,不僅要一邊努力恢復(fù)服務(wù)器,還要一邊向Arch社區(qū)的上游反饋Bug、提Issue。這種事情誰都不愿意干的吧。
2、激進(jìn)的內(nèi)核更新機(jī)制
很多Linux桌面用戶不止一次地問過我,為什么他們的桌面Linux在更新的時(shí)候不會像Arch一樣立即刪除舊的內(nèi)核?這樣不是會浪費(fèi)空間嗎?
這種立即刪除舊內(nèi)核的更新機(jī)制也是Arch作為服務(wù)器的劣勢之一。首先,新的內(nèi)核不一定都能正常工作。萬一你的新內(nèi)核造成崩潰,你沒有辦法立即加載舊的內(nèi)核,而必須重新安裝舊的內(nèi)核。這個(gè)過程是非常麻煩的,你不僅需要從安裝介質(zhì)啟動,還必須設(shè)法弄到舊版內(nèi)核的軟件包。對于遠(yuǎn)程服務(wù)器來說,幾乎無解。下面是來自Arch Wiki的解決方案??梢钥吹贸鰜磉@有多么麻煩:
其次,立即刪除舊的內(nèi)核要求系統(tǒng)必須重啟來加載新的內(nèi)核,否則容易發(fā)生詭異的問題。這是因?yàn)長inux所謂的“內(nèi)核”包含有大量的動態(tài)加載模塊,如果在某次啟動后,某個(gè)模塊沒有被加載過,然后系統(tǒng)內(nèi)核更新了,刪除了舊的內(nèi)核,那么這些模塊將永遠(yuǎn)不能被加載了——除非你重啟系統(tǒng)完整切換到新的內(nèi)核——因?yàn)樗鼈冸S著舊內(nèi)核被刪掉了。
如果你手頭有Arch系統(tǒng),你可以嘗試一下在某次啟動之后不插任何USB設(shè)備,然后更新內(nèi)核。你會發(fā)現(xiàn),如果你不重啟系統(tǒng),無論你怎么努力,新插上去的USB設(shè)備總是不會被加載——因?yàn)樾枰患虞d的模塊已經(jīng)隨著舊內(nèi)核刪掉了。重新啟動系統(tǒng)能完整切換到新的內(nèi)核,以使用新版的動態(tài)加載模塊。
但是對于服務(wù)器來說,不可能三天兩頭重啟;然而Arch Linux卻又是一個(gè)一周一小更,一月一大更的快速迭代的操作系統(tǒng)。這就使Arch不適合作為服務(wù)器操作系統(tǒng)。
3、軟件包管理體系
Arch Linux被推崇很大一部分的原因是便于使用的軟件包管理體系。不同于Debian系列的apt/dpkg和Red Hat系列的dnf(yum)/rpm包管理體系,Arch Linux只用了一個(gè)工具pacman就解決了獲取和安裝兩個(gè)功能。這降低了為Arch Linux制作軟件包的門檻,這也是AUR幾乎能涵蓋整個(gè)Linux軟件生態(tài)的主要原因。
既然一個(gè)工具就能完成工作,那為什么另外兩個(gè)主流系列都依然存在兩個(gè)工具來管理軟件包體系?這是因?yàn)?,這種兩個(gè)工具來管理軟件包的體系中,那個(gè)負(fù)責(zé)處理本地依賴和本地包的部分,不僅僅是為了管理依賴、安裝軟件包而存在的。它還有更有用的功能:提供“虛包”支持。提到“虛包”就不得不提到Java這個(gè)平臺,因?yàn)镴ava的開放,常見的Java運(yùn)行時(shí)環(huán)境有兩種:一個(gè)是Oracle官方的JRE,另一個(gè)是開源社區(qū)創(chuàng)建的Open JRE。它們都對Java提供很高程度的支持,但是依然存在微妙的差別。比如Android Studio使用Open JRE運(yùn)行就會偶爾出現(xiàn)奇怪的Bug,而另外有一小部分軟件則不能正常運(yùn)行在Oracle JRE上。它們都提供JRE的支持,但是對于Debian或者Red Hat來說,二者是能共存的:dpkg或者yum可以決定對于哪些應(yīng)用程序選取哪個(gè)JRE為應(yīng)用程序提供JRE依賴。
但是對于pacman來說,虛包支持什么的,不存在的。只能有一個(gè)軟件包提供JRE支持:安裝一個(gè)就必須刪除另一個(gè)。對于服務(wù)器來說這就相當(dāng)尷尬了:并不能保證所有的程序都能找到完美的依賴。
4、打包粒度
雖然最近幾年有所改善,但是Arch Linux的打包粒度對于服務(wù)器來說還是過分大了。我們也許只會用到某軟件包的一部分,但是pacman會把整個(gè)軟件包給你裝上——你還沒得選。對于服務(wù)器來說,為實(shí)現(xiàn)功能所安裝的軟件包越少越好——一來節(jié)省資源,二來可以減少由軟件體系帶來的漏洞。這也是Arch不適合作為服務(wù)器操作系統(tǒng)的原因之一。
補(bǔ)充:服務(wù)器介紹
服務(wù)器,也稱伺服器,是提供計(jì)算服務(wù)的設(shè)備。由于服務(wù)器需要響應(yīng)服務(wù)請求,并進(jìn)行處理,因此一般來說服務(wù)器應(yīng)具備承擔(dān)服務(wù)并且保障服務(wù)的能力。
服務(wù)器的構(gòu)成包括處理器、硬盤、內(nèi)存、系統(tǒng)總線等,和通用的計(jì)算機(jī)架構(gòu)類似,但是由于需要提供高可靠的服務(wù),因此在處理能力、穩(wěn)定性、可靠性、安全性、可擴(kuò)展性、可管理性等方面要求較高。
在網(wǎng)絡(luò)環(huán)境下,根據(jù)服務(wù)器提供的服務(wù)類型不同,分為文件服務(wù)器,數(shù)據(jù)庫服務(wù)器,應(yīng)用程序服務(wù)器,WEB服務(wù)器等。
相關(guān)閱讀:服務(wù)器常見問題有哪些
1.系統(tǒng)藍(lán)屏、頻繁死機(jī)、重啟、反映速度遲鈍
服務(wù)器的與我們平常電腦不論是硬件結(jié)構(gòu)還是運(yùn)行系統(tǒng),都是極其類似的。因此,就如同我們的電腦一樣,一樣可能會感染病毒,同樣會因?yàn)橄到y(tǒng)漏洞、軟件沖突、硬件故障導(dǎo)致死機(jī)、藍(lán)屏、重啟等故障,同樣會因?yàn)槔彺嫘畔⑦^多而導(dǎo)致反應(yīng)遲鈍。
2.遠(yuǎn)程桌面連接超出最大連接數(shù)
由于服務(wù)器默認(rèn)為允許連接數(shù)為2個(gè),如果登陸后忘記注銷,而是直接關(guān)閉遠(yuǎn)程桌面的話,服務(wù)器識別此次登陸還是留在服務(wù)器端的。出現(xiàn)這種情況,最常見的就是重啟服務(wù)器,但是,如果是高峰期,重啟服務(wù)器帶來的損失是顯而易見的。那么此時(shí),就可以利用mstsc/console指令進(jìn)行強(qiáng)行登陸了。打開“運(yùn)行”框,鍵入“mstsc/v:xxx.xxx.xxx.xxx(服務(wù)器IP)/console”,即可強(qiáng)行登陸到遠(yuǎn)程桌面了。
3.無法刪除的文件該怎么清理
遇到這種情況,可能是該文件還在運(yùn)行中,可以重啟刪之,或者運(yùn)行CMD,輸入arrtib-a-s-h-r想要?jiǎng)h除的文件夾名,最后輸入del想要?jiǎng)h除的文件夾名即可刪除,運(yùn)行該命令后無法恢復(fù),請慎用。
4.系統(tǒng)端口隱患
對于服務(wù)器來說,首要保障穩(wěn)定性和安全性。因此,我們僅需保證服務(wù)器最基本的功能即可,就像聲卡都是默認(rèn)禁止的。我們并不需要太多的功能,也不需要太多的端口支持。像一些不必要,而且風(fēng)險(xiǎn)較高的端口大可封掉。而一些必要的,又有風(fēng)險(xiǎn)的端口,比如:3389、80等端口,我們可以通過修改注冊表的方法將其設(shè)置不特殊的秘密端口,這樣服務(wù)器端口的安全隱患就不復(fù)存在了。