FreeBSD实际上是传统UNIX平台的替代品,而不是Linux,因为它们的理念和方法差异很大。如果您想运行传统的UNIX服务(例如BIND(DNS),Sendmail / Postfix(SMTP))或使用经过最佳编译的服务(例如Nginx(HTTP)),那么FreeBSD在类似的环境中将更加稳定和安全。配置到在Linux上使用的配置。这在很大程度上要归功于其中一些哲学差异。
FreeBSD是一个单片内核,其主要关注点是稳定性,而安全是次要但重要的考虑因素。 Linux也被归类为单片内核,但是真正认为它更像是混合的方面,它的模块化程度更高。两种方法都各有利弊。 Linux的更改速度更快,并且可以更快地获得对新硬件的支持。在Linux中,声音或图形驱动程序之类的硬件问题将比在FreeBSD中更快地得到解决。另一方面,如果您使用的是相对“固定”硬件的服务器平台,则FreeBSD将只需较少的更新和维护,并且通常会更加稳定地运行,因为可以有力地保证不会将潜在的重大更改纳入发行版中, 等等。
另一个问题是FreeBSD提供了一些从其UNIX兄弟那里继承或选择的特定技术,由于体系结构的差异,这在Linux中是不可能的或劣于Linux的。 ZFS就是一个很好的例子。在几乎每种情况下,ZFS都是您可能会使用的最佳文件系统。有一些特定的东西,例如数据库,不是任何写时复制样式文件系统的理想选择,但是因为如此,ZFS很棒。它对文件管理者特别有用,而且在一般情况下可以发挥很大的作用,以帮助确保更好的数据可靠性和弹性。尽管可以在Linux上运行ZFS,但它要求您使用syscall填充程序才能实现,并且最终会导致相当大的性能损失,而这在真正的UNIX平台和userland工具上根本不存在。倾向于在UNIX上更好地工作。
此类工具的另一个示例可能是DTrace。如果您曾经在Linux上使用STrace对应用程序进行故障排除,那么您将熟悉DTrace所带来的好处的一般概念。最大的不同是这些工具在后端的架构方式以及用户之间的交互方式。我想说DTrace对于未启动的人更难使用,但是因为DTrace本质上是在特定的挂接点将字节码插入内核中,而不是直接捕获进程(STrace包装ptrace,与gdb使用的库相同),因此DTrace允许应用程序被跟踪以全性能运行,在这种情况下,STrace会对性能产生重大影响。根据要尝试解决的问题的类型,这可能是一个重要问题,尤其是对于性能分析之类的东西,这在STrace中确实无法很好地完成。
综上所述,Linux在某些方面是FreeBSD无法做到的。最大的可能是良好的集装箱化。在FreeBSD中,您有一个内核强制执行的,这是一个很好的开始,但是没有资源限制的钩子,并且资源调度有些欠缺。在Linux中,使用cgroups,您可以对容器进行强权控制(这基本上等同于FreeBSD中的牢狱之灾)。 cgroups使像Docker这样的工具成为可能,而只有在Linux上才能使用。另外,钩住SELinux的SVirt之类的东西可以使容器更加安全,而FreeBSD方面则没有类似的东西。
长话短说,每个人都有自己的理由。BSD环境更加可预测,当我采取行动时,我对在那里的发现感到惊讶。这使我能够就如何针对性能或安全性调整系统进行更明智的战略决策。 Linux更像是狂野的西部,但我之所以使用它,是因为有时情况会导致需要最新的新型闪亮玩具,而BSD领域尚无此玩具。我通常在FreeBSD上运行文件管理器,在FreeBSD上运行Web服务器,等等,在Linux上运行数据库服务器,因为如今数据库/数据存储似乎是不断优化的源,只有最新和最强大的优化才可以。
领取专属 10元无门槛券
私享最新 技术干货