我正在进行一个项目,我们将在我们拥有的 Linux 服务器上托管一个 Ruby on Rails 应用程序。所有版本的 Linux 是否都能够同样地托管 Rails 应用程序?如果不是,那么哪些功能在某些 Linux 发行版中存在,而在其他发行版中不存在,这些功能对于托管 Rails 应用程序至关重要?
答案1
您应该使用您最熟悉的发行版。
我能想到的唯一真正重要的问题是如果你计划使用操作系统提供的 Ruby、rails 等版本,哪个发行版会“更好”。没有什么可以阻止你在任何发行版上构建自己的版本,但这可能会给你带来更多的麻烦。
RHEL / CentOS 不会在发布版本时持续更新。这可能是件好事,因为它应该可以消除升级操作系统时的兼容性问题。这可能是件坏事,因为您可能需要在更高版本中添加的功能。您可以通过添加具有较新版本的附加存储库来避免此问题。
我不是 Debian 的粉丝,所以我不能透露任何细节,但我认为 Debian 通常会提供较新的版本。这可能是一件好事,因为您不必四处寻找最近添加的功能。这可能是一件坏事,因为您可能会安装更新并破坏您的应用程序。
但实际上最好的答案是使用您最舒服的方式。
答案2
所有 Unix 变体都“同样有能力”承载 Ruby/Rails —— 至少从 Ruby、Rails 框架和大量 gem 都可以在它们上运行的角度来看是这样。因此从这个意义上来说,“使用您和您的团队最熟悉的操作系统”是正确的答案。
一些东西我亲自在操作系统中寻找——
Ruby 是否随操作系统一起提供(或者在端口等中可用)并且是相当新的?
如今,所有新事物都需要 Ruby 1.9.x,因此,如果操作系统只提供 Ruby 1.8,我就会将其弃之不用。是的,我可以手动安装它,但是我已经有足够多的工作来构建一个稳定的环境了——为什么我要接受更多的工作来维护我自己的 Ruby 包?Ruby 支持包 (
rvm
、gems 等) 是否合理新?
与 (1) 的逻辑相同——我希望能够尽可能多地使用操作系统的包管理,但如果我必须覆盖包管理器并手动安装我要用到的每一颗宝石- 好吧,我可以接受,但这让事情变得更加困难。操作系统本身是否适合我的目标?
这是一个模糊的问题——确定操作系统是否“合适”的最佳方法是在工作负载测试/基准测试中击败它。
在这里你会发现 FooOS 有可怕多线程性能,而 BarOS 有一个磁盘子系统,它要求系统上的所有其他操作在线程想要写出数据时停止,所以 BazOS(在这两方面表现平平)实际上具有更好的性能,因为你的应用程序是多线程的和写入密集型。
如果您只查看“Linux”,则此处的差异可以忽略不计(或通过转动sysctl
旋钮“可修复”)。如果您将操作系统搜索范围扩大到包括其他系统(BSD、OS X、Solaris、AIX、HP-UX、Windows),您可能会开始看到性能特征或负载能力的一些实际变化。这里也有一些非技术方面的考虑。如果你有两个假设系统可供选择,一个是免费的操作系统,另一个是付费许可系统,后者速度快两倍,但每个 CPU 核心的许可费用为 5000 美元,那么就选择免费的。你的双处理器四核服务器将花费你 40,000 美元的许可费,即使我们在硬件方面犯了错误,运行免费操作系统的服务器也会多得多。即使你为电力和冷却付费,从单位成本性能指标来看,谁赢谁赢也是一目了然的……
我们可以管理操作系统吗?
该操作系统是否有工具可供您管理(或者它是否能与您已经使用/知道如何使用/想要使用的工具(如 Puppet 和 Chef)很好地配合使用)?
您的团队是否足够熟悉该操作系统以管理它?您是否能够处理下一次主要版本升级,还是会惊慌失措,只是停滞在部署当天安装的任何内容上,当您想要的新功能缺失时,您会永远感到沮丧?