合理使用FreeBSD降低你的服务器成本

合理使用FreeBSD降低你的服务器成本

  BSD 和 SYSV 是世上最正统的 UNIX 操作系统,在 LINUX 出现之前,他们统治了整个 UNIX 世界。也正因为此,这两个最正统的 UNIX 核心流派都在实践中积累丰富的经验。

  SYSV 偏向于商业,BSD 更偏向于自由和实用。

  现在,本文只讨论 BSD 流派最活跃的发行版 FreeBSD。FreeBSD 作为最重要的一个 BSD 发行版,它保持了 BSD 自由和实用的原则。但亦因为此而忽略很多商业的考虑的相应的功能。凭藉我自己多年 UNIX 的使用经验,列出一些 BSD 的优势与不足,希望以此作为读者的参考。

  不足之处:

  文件系统:
  FreeBSD 的文件系统属于中上水平,但未达至企业级的应用需求。主要体现于文件系统本身存在的脆弱性。在高负载的情况下,文件系统存在有崩溃的可能性。需要注意的是,导致这样的结果,也有可能由于磁盘控制器(SCSI, RAID 等等)驱动程序本身导致的。没有原厂设备驱动程序是个比较大的问题。

  网络:
  FreeBSD 的网络性能是无用置疑的!但是网卡驱动(是的,设备驱动是个很重要的因素)不完善会导致性能和稳定性大打节扣。虽然这与 FreeBSD 的核心没有关系,但对于一个可提供服务的整体来说,驱动程序却是一个很重要的组成部份。

  另外,由于一个网卡接口上的线的松动,有可能导致网络中断。而一些商业化的 UNIX 操作系统可以在当主网卡不可用时将该网卡上的 IP 转移至可提供正确连接的网卡上。

  多处理器(超线程)支持:
  在 6.0 出版之前,FreeBSD 对多处理器支持是不尽人意的。INTEL CPU 提供有 HT(超线程)功能。FreeBSD 在 HT 开启的状态下会比在关闭的状态下差。我忘记了超线程的原理,只记得拥有超线程功能的 CPU 在过多的切换情况下性能就会降低,不过在什么时候切换和切换些什么我忘记了。FreeBSD 在开启 HT 后性能会变差,可能与这个有关。

  出众之处:

  网络:
  FreeBSD 的网络性能非常好,可以同时处理海量的网络请求,这使 BSD 非常适合作为防火墙的环境。另外,在网络聊天服务器,如 IM 这种应用上,FreeBSD 也是很合适的选择。网易的 POPO 聊天软件服务器端就是在 FreeBSD 下开发并投入到实际环境中使用的,通过对内核的修改,可以轻松支持数以万计的用户连接,要注意,是永久性的连接,除非用户点击注销按钮。

  内存:
  你会发现你服务器上的内存会被 FreeBSD 很好地利用,以使你的服务达至最佳的状态。FreeBSD 不会因为将过多的内存用于磁盘 CACHE 而使更重要的程序获取不到物理内存而让系统使用 SWAP。在实际的环境中,我就遇到过 LINUX 为保持磁盘的 CACHE,而让新任务使用 SWAP,导致新任务执行时间大大拉长。在执行 swapoff -a 操作后,运行同样的新任务只需要原来时间的一半。而系统并没有因为关闭 SWAP 而停机,表示物理内存并没有因为新任务而被耗尽。

  一个例子:
  Memcached 是一个非常出众的基于内存的缓存服务器。它可以为被其支持的程序语言提供串行化数据保存的功能,这样可以让同一份数据被多台服务器共享,而更重要的是,它的速度非常快。

  我可以利用 PHP 或 JAVA 从数据库中获取数据结果集,然后将结果集的内容保存进 Memcached,其他服务器上的程序同样可以相应的 key 从 Memcached 中获得相同的拷贝。在分布式的环境,这种需求非常明显。我自己也尝试当 SESSION 数据保存至 Memcached 而无需为共享 SESSION 数据而专门架设一台 MYSQL 数据库。

  在利用 Memcached 作为数据的中心点,网络的流量会非常大,内存的使用会非常频繁,基本上不与磁盘打交道,而且整个系统的稳健性要求非常高。在这种应用需求下,FreeBSD 自然地成为首选。因为它为高效的网络性能,更合理的内存利用率,和稳健的系统基础。

  展望:
  由于 JAVA 在 FreeBSD 上并不是太优秀,因此我正在考虑和尝试在 FreeBSD 的系统上布署基于 python 的应用。

  大致是:FreeBSD + Python + Memcached + PostgreSQL

  题外话:MySQL 在中小量的应用中非常快速,但在大并发的情况下会所不足。数据表存在被死锁的情况,而我正在研究 PostgreSQL 是否存在相同的问题。我的想法是:慢点不要紧,但不要死掉不响应。
呵呵,楼主的经验积累呀!向楼主学习!