来源: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。服务器
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 一下:
- grep wheezy changelog.Debian
- linux (3.2.57-3) wheezy; urgency=medium
- linux (3.2.57-2) wheezy; urgency=medium
- linux (3.2.57-1) wheezy; urgency=medium
- linux (3.2.54-2) wheezy; urgency=high
- linux (3.2.54-1) wheezy; urgency=high
- linux (3.2.53-2) wheezy; urgency=high
- linux (3.2.53-1) wheezy; urgency=medium
- linux (3.2.51-1) wheezy; urgency=low
- linux (3.2.46-1+deb7u1) wheezy-security; urgency=low
- linux (3.2.46-1) wheezy; urgency=low
- linux (3.2.41-2+deb7u2) wheezy-security; urgency=high
- 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
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 。
09年发布的 lenny 也就是 5.0 ,根本已经连信息都很难找了。若是谁能找到 lenny 麻烦给一个 kernel 的 changelog
----- 补充结束 -------
而其继承者 Ubuntu,他是有 release 概念的,好比 9.04 ,10.06 等等,当他肯定了 release 以后,他也不会在这个版本中作太大的版本变化。
可是问题是,他学到了 CentOS 的形,没有学到 CentOS 的精华。为何?由于他又想追求新(一年两个版本),又想学人家吃服务器市场。这是彻底相互矛盾的一件事情。
新,好办,只要跟着 Debian 走,experimental 仓库里面永远是最新的东西。拿过来,测试测试,重打包,发布!
稳定?(Ubuntu-Server) 这就难了,这须要不断的人力投入,Debian 天然不会帮你作这件事。本身作?Ubuntu 尝试了几回,目前我没看到成功。几乎都是草草放弃。
大家知道什么叫维护一个服务器用的发行版本么?
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”
这就是这几种发行版本在维护上的区别。
你的服务器上有一块 Broadcom 的网卡,CentOS 6(2.6.32-358.el6.x86_64) 用户 modinfo 了一下
Debian testing(3.12-1) 用户 modinfo 了一下
你知道 http://kernel.org 的最新的 2.6.32 带的是哪一个版本的 tg3 驱动么?
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 好么?”
再回头看看那时候大家本身吧。