科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网服务器频道Postfix邮箱服务器高性能背后的秘密

Postfix邮箱服务器高性能背后的秘密

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

邮箱服务器是企业应用的最广泛的信息化应用之一。现在企业中,十有八九都有邮箱服务器,而其中大部分企业邮件服务器又都是部署在Linux系统上的。因为基于Liunx的邮箱服务器系统,可以提供比较高的稳定性,而且又是免费的。所以,这两个组合,就比较受企业的欢迎。

来源:IT专家网 2008年11月24日

关键字: 操作系统 Linux 高性能 邮件服务器 Postfix

  • 评论
  • 分享微博
  • 分享邮件

  邮箱服务器是企业应用的最广泛的信息化应用之一。现在企业中,十有八九都有邮箱服务器,而其中大部分企业邮件服务器又都是部署在Linux系统上的。因为基于Liunx的邮箱服务器系统,可以提供比较高的稳定性,而且又是免费的。所以,这两个组合,就比较受企业的欢迎。

  在Linux操作系统上,可以部署的邮箱服务器种类比较多。如现在比较流行的有Sendmail邮箱服务器、Qmail邮箱服务器、Postfix邮箱服务器等等。不过笔者还是比较倾向于Postfix邮箱服务器。因为这个服务器比其他两个服务器来说,具有更高的性能。笔者对这个邮箱服务器研究的比较深;也曾给多家企业部署过这个邮箱服务器。所以,非常了解这个邮箱服务器高性能背后的技术优势。或许经过笔者的一番介绍之后,大家也会越来越中意Postfix邮箱服务器。

  秘密一:利用Deferred对列巧妙应付邮件风暴问题。

  在Postfix邮箱服务器中,是通过四个对列来管理邮件的。一是Maildrop对列,主要用来存放本地邮件,同时这个对列中的邮件也会被同步复制到Incoming对列中。二是Incoming对列,主要用来防止正在到达或者队列管理进程未发现的邮件。三是Active对列,这个对列主要用来防止队列管理进程已经打开并准备投递的邮件,这个队列往往具有长度的限制。四是Deferred队列,往往邮箱服务器会把暂时不能够发送的邮件存放在这个队列中。Postfix邮箱服务器就是通过这四个队列来应付邮件风暴的问题。

  当有新邮件到达时,Postfix邮箱服务器会先对自身进行初始化,初始化时Postfix邮箱服务器会同时接受两个并发的连接请求(这个数字会随着实际情况的变化而增长)。一般情况下,当邮件发送成功后,可以同时接受的并发连接的数据就会缓慢的增长至一个可以配置的值。不过,如果此时系统的硬件、软件消耗已经达到系统的警戒水平的时候,系统就会停止自动增长。

  当邮箱服务器接受到的新邮件数量超过Postix邮箱服务器的处理能力,这就叫做邮件风暴。当出现这个邮件风暴的时候,Postix邮箱服务器会暂时停止去投递Deferred队列中的邮件,而是先去处理新接收到的邮件。因为相对来说,处理新接收的邮件要快的多,邮件的延迟要小于处理Deferred队列中的邮件。当邮件风暴过后,Postix邮箱服务器空闲的时候,再回回去处理Deferred队列中的邮件。如此的话,就可以减少邮件风暴对于接收邮件的影响。让用户在邮件风暴的过程中,仍然可以正常的接收邮件。

  秘密二:存储不可到达的邮件地址,提高邮件分发的效率。

  有时候由于用户无意中会输错邮件接收方的地址,又或者说,对方的邮件地址已经注销等等原因,某些邮件始终无法发送到对方。这些邮件地址,就叫做邮件不可达。为了防止邮箱服务器多次尝试向这些不可达的地址发送邮件,浪费了不必要的时间与资源。所以,Postix邮箱服务器会在服务器的内存中保存一个有长度限制的当前不可到达的邮件地址列表。

  若用户发送的邮件地址在这个列表中,Postix邮箱服务器就会避免对这些地址进行多次的邮件发送尝试,而直接返回邮件不可达的信息,从而大大的提高了系统的性能。

  不过,在使用这个功能的时候,需要注意几个问题。

  一是这个邮件不可达地址列表是保存在服务器的内存中,而不是像其他配置文件,是存放在服务器的硬盘上。这就导致当服务器因为意外重新启动的时候,内存中的这份邮件地址不可达列表会丢失。所以,所有时,当邮箱服务器重新启动后,会明显感到这个数据库性能有所下降。等到运行一段时间后,性能反而会有所提升。这就使这个“内存中的邮件地址不可达列表”在其作用。

  二是这个邮件地址不可达列表有长度限制。具体多少长度,则会根据用户的配置与服务器的资源不同而不同。当达到规定的长度是,则会根据先进先出的原则,把第一个进入这个列表的成员排除出去。这就可以保障,因为对方邮箱服务器一时的故障而造成邮件不可达的问题。

  秘密三:延迟暂时无法投递的邮件,把资源用在刀刃上。

  在邮件发送的过程中,各种原因都会造成邮件暂时无法投递。如对方邮箱已经满了,或者对方的邮箱服务器出现了通信故障等等,都可能导致邮件的暂时不可达。若能够合理的处理这个状况,则对提高邮箱服务器的性能也具有一定的帮助。

  而Postix邮箱服务器,则是通过“时间邮票”的形式来处理这种暂时不可达的情况。当一封邮件第一次不能成功投递给对方时,Postix邮箱服务器会给这封邮件贴上一个表示将来的时间邮票。而邮件队列管理程序在处理的时候,发现一封邮件被贴有“时间邮票”,则会忽略它的存在。如此的目的,就是为了最快的处理那些可以达到的邮件,把资源用来刀刃上。

  当这个时间邮票到期的时候,Postix邮箱服务器会尝试对这封邮件再次进行一次发送。若此时成功了,邮件就发出去了。相反,若不成功的话,则Postix邮箱服务器会再次给这封邮件贴上“时间邮票”。只是,此时这个邮票的过期时间要比第一次的过期时间长整整的两倍以上。等到这个时间到后,原来的时间邮票就会作废,Postix邮箱服务器会重新发送这封邮件。

  最后的结果只有两个。一是邮件成功发送了,二是尝过了若干次的机会之后,邮件还是不能够发送出去,邮箱服务器就会放弃发送这封邮件。并把这封邮件的接收者地处存入到上面所讲的内存中的邮件地址不可达列表;并会返还一个错误信息给发件人。当下次用户再次发送这个邮件给用户时,邮箱服务器可能就直接拒绝了,以提高邮箱服务器的整体性能。

  秘密四:本地邮件与外来邮件不同进程分工合作。

  邮箱服务器接收的邮件从广义上来说,可以分为两类。一类是本地邮件,也就是邮箱服务器内部帐户的互发,一般就是员工发给员工。第二类是来自于网络的邮件,也称外来邮件,如来自于客户或者供应商的邮件。

  在Postix邮箱服务器中,这两类邮件时不同的进程分工合作的。如对于来自于服务器本身的邮件,主要是由Sendmail进程来负责的,然后再由Pickup进程对Maildrop中的邮件进行完整性检测。而对于来自外部的邮件,则是由SMTPD进程负责,并且进行安全性检测。网络管理员还可以通过其他的一些方式,如UCE来控制SMTPD的行为。这两个的区别主要在于,来自于内部的邮件一般认为是安全的,因为都来自于同一个服务器(有时会往往是在投递的时候已经作了安全检测,故可以保证本地邮件的安全性)。所以,没有必要进行安全性检测。相反,来自于其他服务器的邮件,可能有病毒,也可能是垃圾邮件,所以需要进行安全性的检测。

  Postix服务器如此设计的目的有二。一是提高内部邮件转发的效率;二是节省了对内部邮件进行检测的时间与资源,把他们用在更需要使用的邮件身上。要知道,对于企业来说,内部员工的邮件转发可能在占据邮箱服务器工作量的一半以上。如此的话,放弃对本地邮件的安全检测,则其可以大幅度的提高本地邮件接收转发的效率。同时,也可以提高外部邮件的安全检测速度。

  Postix邮箱服务器不仅在接收邮件的时候,对本地邮件与外来邮件进行区别对待;而且,在发送邮件的时候,也是区别对待的。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章