[轉帖]服務器操做系統應該選擇 Debian/Ubuntu 仍是 CentOS?

來源:https://www.zhihu.com/question/19599986html

 做者: https://www.zhihu.com/people/yuan-hao-yang/answerslinux

IT運維人員的視角比較好一些.nginx

首先的首先,我想請各位玩家,大家不要本身最近新玩上什麼就以爲什麼好,而後大肆的推薦什麼好很差!負點責任好很差!人家是服務器,有些時候選錯一個發行版本會痛苦死一批人!apache

是,你如今終於發現有個版本叫 Ubuntu 了,好爽啊,那麼多包,隨便 apt-get , 3萬個包躺在倉庫裏面不用編譯。好爽啊!幾乎全部軟件都有最新版本用!唉?過兩天你發現 Ubuntu 原來是從 Debian 來的,Debian 才叫牛啊,徹底社區運做,包的數量一點都很多啊。再過兩天發現 Gentoo 啦,哇塞,牛啊!性能的極致優化,編譯編譯再編譯,configure , configure 再 configure ,精簡到極致。再過兩天 Gentoo 玩膩了,不就是編譯麼~ 唉? 原來還有 Arch 啊,這個不錯啊,想編譯的編譯,不想編譯的也有默認包。而後2個月沒 pacman 更新過的系統,更新一下全掛了。ubuntu

你的意識形態,走在任何一個階段都認爲這個階段是最好的選擇。但事實並非這樣的,這只是你的興趣而已。安全

要討論這個問題,先要知道兩大發行版本的區別在哪裏。RedHat 和 Debian。服務器

1、版本定義

RedHat 是由紅帽公司維護的發行版本。其 RedHat 9 是最後一個以 RedHat 爲名的發行版本。在 RH9 以後,版本開始分爲社區維護的 Fedora 和 企業使用的 EL。而咱們所說的 CentOS X 就是從 RHEL X 編譯過來的。因此本質上,CentOS 的目標用戶,就是企業的服務器。運維

CentOS 是有 release 概念的,何爲 release 概念?當某個版本定下時,其絕大多數軟件包,包括 Kernel 在內,都已經肯定了版本。在該 release 下,沒有特殊狀況,大版本號不發生變化。性能

舉例,CentOS 6 某個 Kernel 版本:測試

2.6.32-358.el6.x86_64 

2.6.32 爲 kernel 版本號,358 爲打包版本號,打包版本表示該包第幾回打包。對於 RHEL 來講,一個 kernel 打包個 500 700 次是很正常的事情。

再好比一些軟件,1.1.3 是版本,若是該軟件自身的定義,最後一位是 bugfix 版本,倒數第二位是功能版本,那麼你在 RHEL 裏面,不多會看到功能更新!一般只會看到 bugfix 更新!也就是隻會看到小版本號更新。

Debian 是由社區維護、貢獻的發行版本,其從選包、打包、都是由社區組織,分散行動的。

Debian 是沒有真正意義的 release 概念的。Debian 有衆多倉庫,stable,testing,unstable ,experimental. Debian 組織系統的方式是,一個軟件先進入 experimental, 放一段時間,有 bug 修 bug,沒 bug 了,過段時間挪入 unstable ,如此循環最終挪到 stable 裏面。因此在這種狀況下,Debian 的系統中,是沒有一個穩定版本的概念。今天你用 kernel 3.2.1-87 ,明天就給你更新到 kernel 3.3.2-5 。

-------- 補充內容 -------

我以爲我已經把我所謂的 release 概念解釋的很清楚了,可是評論裏面還有人在和我說 Debian 是有 release。我說的 release 不是那種本身劃個時間線,叫個名字的概念。而是版本維護的概念。

@劉世偉 說 Debian 也是這樣的,那好吧,我證實給你看一下。

你從這裏 Debian -- 在 wheezy 中的 linux-image-3.2.0-4-amd64 軟件包詳細信息 能夠拿到如今 Debian stable 的 Linux kernel 打包,下載下來,解壓縮,在

usr/share/doc/linux-image-3.2.0-4-amd64 目錄下面有一個 changelog.Debian ,grep 一下:

  1. grep wheezy changelog.Debian
  2. linux (3.2.57-3) wheezy; urgency=medium
  3. linux (3.2.57-2) wheezy; urgency=medium
  4. linux (3.2.57-1) wheezy; urgency=medium
  5. linux (3.2.54-2) wheezy; urgency=high
  6. linux (3.2.54-1) wheezy; urgency=high
  7. linux (3.2.53-2) wheezy; urgency=high
  8. linux (3.2.53-1) wheezy; urgency=medium
  9. linux (3.2.51-1) wheezy; urgency=low
  10. linux (3.2.46-1+deb7u1) wheezy-security; urgency=low
  11. linux (3.2.46-1) wheezy; urgency=low
  12. linux (3.2.41-2+deb7u2) wheezy-security; urgency=high
  13. linux (3.2.41-2+deb7u1) wheezy-security; urgency=high

起碼在 wheezy 裏面(stable) 裏面,他從 3.2.41 走到了 3.2.57 , 同時…… 大家能夠看到 每一個版本也就打包 1-2 次,1-2次啊!並且 Debian 的 unstable 走到 stable 真的就是隨便走走的。

linux (3.2.41-2+deb7u1) 是第一個 stable 版本,他的上一個版本是

linux (3.2.41-2) unstable ,好,3.2.41 第二次打包,加了一次 patch 就變成 stable 了

linux (3.2.41-1) unstable , 得,41 就打了一次

linux (3.2.39-2) unstable , 39 也就打兩次。

從這個過程,你能夠看出,Debian 整體上,仍是在跟着 Kernel Source 的,爲啥?沒人啊!靠零散的人打 patch 還不如依賴 Kernel 自己的小版本更新。

RedHat 呢?

放一個 RHEL 6.4 的 Release Note

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/6.4_Technical_Notes/kernel.html

RHEL , 是不跟 kernel source 的小版本號的,本身整合 bugfix ,主要是安全相關的補丁。

爲何不跟 kernel source 呢?

主要仍是目標用戶的不一樣,就像我下面驅動這塊要解釋的。RHEL 的目標用戶,是企業的 Server 的,他的 Kernel 裏面,已經太多的東西被替換掉了。磁盤、網卡、各類各樣的驅動。而 Kernel source 儘管只走小版本號,仍是不太靠譜的。頻繁的拿過來風險也大。

kernel 其實走到 2.6 之後,就沒有一個真正穩定的概念了。反正就是一路往前走。固然 2.6.32.xx 的確是以 bugfix 爲主的。可是這個量太大了,各類各樣雞毛蒜皮,RHEL 不是全都拿進來的。

大家必定要和我爭論版本的問題,行,我不和大家爭,Debian Stable 是有版本的~ 大家滿意了?這種一個 kernel 打包 2次的狀態,大家愛用就用好了。無所謂的。

可是有 版本的也只是 stable,testing 我可歷來沒見過。

說實話,我真的花了心思想多找一點 Debian 的信息,

11年進入 stable 的 6.0 , 最近確實還有一個更新,在 08 Apr 2014 。

http://metadata.ftp-master.debian.org/changelogs//main/l/linux-2.6/linux-2.6_2.6.32-48squeeze5_changelog

09年發佈的 lenny 也就是 5.0 ,根本已經連信息都很難找了。若是誰能找到 lenny 麻煩給一個 kernel 的 changelog

----- 補充結束 -------

而其繼承者 Ubuntu,他是有 release 概念的,好比 9.04 ,10.06 等等,當他肯定了 release 以後,他也不會在這個版本中作太大的版本變化。

可是問題是,他學到了 CentOS 的形,沒有學到 CentOS 的精華。爲何?由於他又想追求新(一年兩個版本),又想學人家吃服務器市場。這是徹底相互矛盾的一件事情。
新,好辦,只要跟着 Debian 走,experimental 倉庫裏面永遠是最新的東西。拿過來,測試測試,重打包,發佈!

穩定?(Ubuntu-Server) 這就難了,這須要不斷的人力投入,Debian 天然不會幫你作這件事。本身作?Ubuntu 嘗試了幾回,目前我沒看到成功。幾乎都是草草放棄。

2、維護的力量

大家知道什麼叫維護一個服務器用的發行版本麼?

CentOS 4.0 2005-03-09

CentOS 4.9 2011-03-02

6年

Ubuntu 8.04 LTS April 24, 2008

Ubuntu 8.04.4 LTS January 28, 2010

1年9個月

你說好的 LTS 呢???

Ubuntu 10.04 LTS April 29, 2010

Ubuntu 10.04.4 LTS February 16, 2012

說好的 LTS 呢?

說 End of the Date 是3年整就是一個笑話,只要下個 release 一出,上個 release 收到的更新數量就可憐。

這纔是 RedHat 的實力!你只要用個人發行版本,你不用有後顧之憂!Ubuntu 呢?開玩笑,即便是 LTS,在新版本出來之後 LTS 幾乎不更新好麼。補丁?歷來沒見過!也就是 LTS 的真正壽命也就 6個月-1年。你敢用?你敢給大家公司用?

某天某個軟件爆出相似最近 openssl 的漏洞,用 CentOS 5 的用戶次日拿到了升級的 rpm。用 Debian 的用戶收到了一個大版本更新,同時因爲依賴關係必須更新 glibc, kernel 等等包。用 Ubuntu 的用戶收到官方回覆:「apt-get dist-upgrade」

這就是這幾種發行版本在維護上的區別。

咱們再說回 RHEL,不少人不懂,覺得 Ubuntu 「新」,RHEL 「老」 。

你的服務器上有一塊 Broadcom 的網卡,CentOS 6(2.6.32-358.el6.x86_64) 用戶 modinfo 了一下

  1. filename: /lib/modules/2.6.32-358.6.1.el6.x86_64/kernel/drivers/net/tg3.ko
  2. firmware: tigon/tg3_tso5.bin
  3. firmware: tigon/tg3_tso.bin
  4. firmware: tigon/tg3.bin
  5. version: 3.124

Debian testing(3.12-1) 用戶 modinfo 了一下

  1. filename: /lib/modules/3.12-1-amd64/kernel/drivers/net/ethernet/broadcom/tg3.ko
  2. firmware: tigon/tg3_tso5.bin
  3. firmware: tigon/tg3_tso.bin
  4. firmware: tigon/tg3.bin
  5. version: 3.133

你知道 http://kernel.org 的最新的 2.6.32 帶的是哪一個版本的 tg3 驅動麼?

  1. #define DRV_MODULE_VERSION "3.102"
  2. #define DRV_MODULE_RELDATE "September 1, 2009"

CentOS 「老」麼?誰在將最新的驅動打入老的 kernel?誰在測試新驅動與老 kernel 的兼容性?RH啊!!這些都是人力啊,這些都是財力啊。

RH 在保證穩定、兼容的同時,儘量的給服務器用戶最全的設備匹配,最新的驅動支持。而這一切!你都不用擔憂穩定性、兼容性,由於 RH 沒有更新大版本,沒有帶來 龐大 feature 的更新。

還有一個例子:

google RFS patch in linux kernel Linux 2.6.35 中的 RPS 功能。

這簡直就是 Linux 服務器用戶求之不得的功能好很差,你不用再擔憂多核CPU被浪費,你不用花不少錢買昂貴的多 irq 網卡。可是要 2.6.35 纔有哦~

可是你不用擔憂,CentOS 6 (2.6.32) 已經將RPS整合進 2.6.32 的內核中了。

你看到Ubuntu作這種事情了?Ubuntu 在忙什麼?在忙着今年再發一個版本啊!

RHEL 爲何作?由於他的用戶是服務器!RPS 這種事情PC根本就用不到好很差。

我回到最開頭。我也用 Ubuntu 作過產品,雖然不是服務器。可是最後的結果並很差。我據說過一個同事的上家公司用 Ubuntu 作服務器,千級別的量。聊了一下發現和我預測的差很少,痛苦不堪。

基本的痛苦流程是這樣的

遇到一個問題->發現只有更新軟件版本才能解決->這個本身當前的版本已經不提供該軟件版本->發現本身編譯不過,依賴過重->決定 dist-upgrade -> 發現須要跨度N個 release -> 測試 dist-upgrade -> 10臺機器,2臺成功,8臺失敗,失敗的現象不一樣 -> 痛苦的解決各類問題-> 成功 dist-upgrade -> 發現公司業務程序須要從新編譯->與開發人員溝通 解釋升級的重要性 -> 開發人員從新調試、測試一些列用到的庫的新版本->交付新版本

CentOS 用戶基本是這樣的:如下是最近真實對話

「xxx,新聞你看到了麼 openssl 爆漏洞了」

「啊?不知道啊,我看看去」

----

puppet 操做一下 10分鐘之後

「老闆,補丁已經出來了,更新了,有 ssl 的 apache 都已經自動重啓過了」

結束~

 

最後再解釋一下,我以前的評論

「不會用就別怪系統很差。推薦 Debian/Ubuntu 跑 Server 是一件很不負責的事情。」

任何 Linux 發行版本,在理論上都是同樣的。只不過操做有的方便,有的麻煩!是,yum 是比 apt 弱(這就是企業維護和社區維護的區別,企業本身維護不須要這麼多功能)可是任何能在 A 發行版本上實現的效果,必定是能在 B 上實現的。你甚至能夠按照玩 Gentoo 的思路玩 CentOS,編譯麼!你本身打 RPM 啊,你本身縮減依賴關係啊,你能夠說麻煩,可是你不可能說不能實現。

因此,我仍是要重說一遍:「不會用就別怪系統很差」!這不是歧視,這不是嘲諷,這是讓你認清事實以後能把時間花在更加有用的地方!

第二句!「推薦 Debian/Ubuntu 跑 Server 是一件很不負責的事情。」 這是血和淚的教訓!你不想聽無所謂,可是總有一些人冒着要被戴「不友善」的帽子,也要告訴你這個事實!

我再來補充一句,沒有不尊敬的意思。可是大多數圈內用 Gentoo -- 相似豆瓣仍是 VeryCD 這樣的公司,大家當時作出這個決策的人基本上都是把本身的 興趣 > 公司 利益了。潛在的,這實際上是一種不負責任的行爲,會直接的致使公司的維護成本的增長。

你真的覺得你用 Gentoo 作到的性能,CentOS 作不到麼?

你真的覺得大家一個小 team 打包的質量會必定比 RH 一家公司的工做人員要牛麼?

若是你當時真的這麼覺得,只能證實你當時還不會用罷了。

若是我今天告訴你們,我要作一個 http 的服務器,我不用 apache 不用 nginx,爲了性能我要用 xxx 爲基礎重寫一套出來。我相信絕大多數人會問一樣的問題,「你以爲你寫的能比 ng 好麼?」

再回頭看看那時候大家本身吧。

相關文章
相關標籤/搜索