导读 编辑推荐!本文来自知乎的袁昊洋,是我见过的关于如何选择服务器操作系统的最有理有据的文章,而且富有实践基础。小编基本上同意全文观点——当然,这并不是说大家就不应该选择其他的操作系统做服务器——甚至你选择Windows XP做服务器都有你的道理。大家有什么选择,希望也发表你的观点。

首先的首先,我想请各位玩家,你们不要自己最近新玩上什么就觉得什么好,然后大肆的推荐什么好不好!负点责任好不好!人家是服务器,有些时候选错一个发行版本会痛苦死一批人!

是,你现在终于发现有个版本叫 Ubuntu 了,好爽啊,那么多包,随便 apt-get , 3万个包躺在仓库里面不用编译。好爽啊!几乎所有软件都有最新版本用!唉?过两天你发现 Ubuntu 原来是从 Debian 来的,Debian 才叫牛啊,完全社区运作,包的数量一点都不少啊。再过两天发现 Gentoo 啦,哇塞,牛啊!性能的极致优化,编译编译再编译,configure , configure 再 configure ,精简到极致。再过两天 Gentoo 玩腻了,不就是编译么~ 唉? 原来还有 Arch 啊,这个不错啊,想编译的编译,不想编译的也有默认包。然后2个月没 pacman 更新过的系统,更新一下全挂了。

你的意识形态,走在任何一个阶段都认为这个阶段是最好的选择。但事实并不是这样的,这只是你的兴趣而已。

要讨论这个问题,先要知道两大发行版本的区别在哪里。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 。

而其继承者 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”

这就是这几种发行版本在维护上的区别。

再说回 RHEL

你的服务器上有一块 Broadcom 的网卡,CentOS 6(2.6.32-358.el6.x86_64) 用户 modinfo 了一下

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

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

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

你知道 http://kernel.org 的最新的 2.6.32 带的是哪个版本的 tg3 驱动么?

#define DRV_MODULE_VERSION "3.102"
#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 好么?”

再回头看看那时候你们自己吧。

服务器操作系统该选 Debian/Ubuntu 还是 CentOS?相关推荐

  1. 服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS?

    来自 http://www.zhihu.com/question/19599986 服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS? 想选择一个 Linux 发行版作为服务器. ...

  2. debian/ubuntu和centos的系统升级命令

    在安装/配置系统生产环境之前,一般都需要对现有系统进行升级,以确保系统内的包/组件达到最新版本,而debian/ubuntu和centos的升级命令是不同的,详情如下: debian/ubuntu,输 ...

  3. 服务器操作系统版本检查,服务器操作系统版本检查

    服务器操作系统版本检查 内容精选 换一换 服务器安装上架.服务器基础参数配置.安装操作系统等操作请参见<Atlas 800 推理服务器 用户指南(型号 3000)>,安装操作系统完成后,配 ...

  4. 查看当前操作系统是ubuntu还是centos

    查看当前操作系统是ubuntu还是centos cnblog中最新更新地址 1.执行: lsb_release -a 2.命令: cat /etc/redhat-release 3.命令: cat / ...

  5. Debian/Ubuntu/Centos下编译安装RocksDB

    参考:rocksdb/INSTALL.md at master · facebook/rocksdb 注意:gcc版本至少要4.8,安装教程:在CentOS/Debian/Ubuntu上编译安装最新版 ...

  6. 在CentOS/Debian/Ubuntu上编译安装最新版 GCC 8 , cmake 3 和ninja

    CentOS不像Debian/Ubuntu,不能直接从官方库中安装最新版的gcc/g++,只能源码编译安装. gcc下载地址:Index of /gnu/gcc 我选择了最新版本 gcc-8.3.0, ...

  7. Linux操作系统选择:Debian or Ubuntu

    此文首发于我的个人博客:Linux操作系统选择:Debian or Ubuntu - zhang0peter的个人博客 我最开始使用Linux系统的时候选择的是Ubuntu,因为Ubuntu名气大,而 ...

  8. 小程序云服务器选什么系统好,小程序云服务器操作系统选择

    小程序云服务器操作系统选择 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 当您 ...

  9. CentOS/Debian/Ubuntu永久保存iptables配置规则

    CentOS yum -y install iptables-services service iptables save 否则 iptables-save > /etc/sysconfig/i ...

最新文章

  1. admi后台 vue_vue-admin-webapp后台管理系统
  2. px4原生源码学习三--Nuttx实时操作系统的使用
  3. SSL 1760——商店选址问题(最短路)
  4. 微云存照片会变模糊吗_手机自带微云台防抖,VivoX50系列不一般
  5. 基于TCP的Socket网络编程,有图有代码
  6. .net5项目托管到iis无法访问
  7. 华为荣耀9手机通过在Fastboot模式写ramdisk.img来获取ROOT权限 | 华为荣耀9怎么获取ROOT权限 | 华为荣耀9怎么用面具Magisk做ROOT权限
  8. diskgenius创建efi分区_找不到引导分区 启动分区不存在 怎么创建efi系统分区
  9. msyql创建数据库并指定字符集
  10. js禁止中文输入 最简洁的【禁止输入中文】
  11. Java实现数字大写
  12. 修改assets文件内容
  13. JsonMappingException: Problem deserializing 'setterless' property '': get method returned null
  14. windows下qt程序报错“the inferior stopped because it triggered an exception”
  15. 十二星座最怕失去的东西
  16. RN:分包/拆包技术调研
  17. 沭阳学爬虫03爬虫基本原理
  18. android锁屏时间大小,Android 4.4.4 锁屏界面时间大小修改
  19. 通过浏览器打开本地exe应用(支持任意浏览器)
  20. 浅谈高大上的微信小程序中渲染html内容—技术分享

热门文章

  1. 市场调研—2021-2027中国鳍式场效应晶体管(FinFET)市场现状及未来发展趋势
  2. 一年期早过:Windows 10免费升级漏洞仍然敞开着
  3. 最强Dot Net教程资料集合
  4. 【Android】第三方QQ账号登录的实现
  5. 龙芯的全新自主指令集到底强在何处?
  6. c语言打印a-Z字母的方法
  7. Python采集彼岸4K高清壁纸
  8. 不坚持,P都不是--leo看赢在中国第三季(4)
  9. 关于 A/B 测试那些事儿
  10. 2019 美团点评校招 图的遍历