在Linux操作系统上,可以部署的邮箱服务器种类比较多。如现在比较流行的有Sendmail邮箱服务器、Qmail邮箱服务器、Postfix邮箱服务器等等。不过笔者还是比较倾向于Postfix邮箱服务器。因为这个服务器比其他两个服务器来说,具有更高的性能。笔者对这个邮箱服务器研究的比较深;也曾给多家企业部署过这个邮箱服务器。所以,非常了解这个邮箱服务器高性能背后的技术优势。或许经过笔者的一番介绍之后,大家也会越来越中意Postfix邮箱服务器。
秘密一:利用Deferred对列巧妙应付邮件风暴问题。
在Postfix邮箱服务器中,是通过四个对列来管理邮件的。一是Maildrop对列,主要用来存放本地邮件,同时这个对列中的邮件也会被同步复制到Incoming对列中。二是Incoming对列,主要用来防止正在到达或者队列管理进程未发现的邮件。三是Active对列,这个对列主要用来防止队列管理进程已经打开并准备投递的邮件,这个队列往往具有长度的限制。四是Deferred队列,往往邮箱服务器会把暂时不能够发送的邮件存放在这个队列中。Postfix邮箱服务器就是通过这四个队列来应付邮件风暴的问题。
当有新邮件到达时,Postfix邮箱服务器会先对自身进行初始化,初始化时Postfix邮箱服务器会同时接受两个并发的连接请求(这个数字会随着实际情况的变化而增长)。一般情况下,当邮件发送成功后,可以同时接受的并发连接的数据就会缓慢的增长至一个可以配置的值。不过,如果此时系统的硬件、软件消耗已经达到系统的警戒水平的时候,系统就会停止自动增长。
当邮箱服务器接受到的新邮件数量超过Postix邮箱服务器的处理能力,这就叫做邮件风暴。当出现这个邮件风暴的时候,Postix邮箱服务器会暂时停止去投递Deferred队列中的邮件,而是先去处理新接收到的邮件。因为相对来说,处理新接收的邮件要快的多,邮件的延迟要小于处理Deferred队列中的邮件。当邮件风暴过后,Postix邮箱服务器空闲的时候,再回回去处理Deferred队列中的邮件。如此的话,就可以减少邮件风暴对于接收邮件的影响。让用户在邮件风暴的过程中,仍然可以正常的接收邮件。
秘密二:存储不可到达的邮件地址,提高邮件分发的效率。
有时候由于用户无意中会输错邮件接收方的地址,又或者说,对方的邮件地址已经注销等等原因,某些邮件始终无法发送到对方。这些邮件地址,就叫做邮件不可达。为了防止邮箱服务器多次尝试向这些不可达的地址发送邮件,浪费了不必要的时间与资源。所以,Postix邮箱服务器会在服务器的内存中保存一个有长度限制的当前不可到达的邮件地址列表。
若用户发送的邮件地址在这个列表中,Postix邮箱服务器就会避免对这些地址进行多次的邮件发送尝试,而直接返回邮件不可达的信息,从而大大的提高了系统的性能。
不过,在使用这个功能的时候,需要注意几个问题。
一是这个邮件不可达地址列表是保存在服务器的内存中,而不是像其他配置文件,是存放在服务器的硬盘上。这就导致当服务器因为意外重新启动的时候,内存中的这份邮件地址不可达列表会丢失。所以,所有时,当邮箱服务器重新启动后,会明显感到这个数据库性能有所下降。等到运行一段时间后,性能反而会有所提升。这就使这个“内存中的邮件地址不可达列表”在其作用。
二是这个邮件地址不可达列表有长度限制。具体多少长度,则会根据用户的配置与服务器的资源不同而不同。当达到规定的长度是,则会根据先进先出的原则,把第一个进入这个列表的成员排除出去。这就可以保障,因为对方邮箱服务器一时的故障而造成邮件不可达的问题。