我正在寻找具有较大文件夹的快速 imap 服务器。每个文件夹说 20'000-100'000 封电子邮件。
目前我正在使用 dovecot,打开一个文件夹可能需要 10 秒,并且 imap 服务器上的高清灯快要疯了。
我使用 alpine 作为客户端,默认情况下它只列出最新的邮件,所以并不是我的客户端在打开邮箱时试图转移所有内容。这可以看出,当我滚动时,它必须加载下一页的主题行(我第一次滚动到那里)。
我在 XFS 上使用 maildir。
编辑:我问,因为它的数据不多,在宏伟的计划中。如果这是在 SQL 数据库中,那么对于 40'000 封电子邮件的文件夹,获取最新 40 封邮件的主题行不会花费 10 秒。唯一需要的数据是:
SELECT date, from, subject FROM emails ORDER BY date DESC LIMIT 40;
有任何想法吗?
在性能方面,Dovecot 实际上相当不错。Dovecot 的Performance Tuning wiki 页面有一些提示和技巧可以进一步提高性能。如果可能的话,将索引和邮件目录保存在单独的磁盘上是一件好事。您还可以评估切换到 Dovecot 的dbox 存储格式。
也许您可以尝试使用数据库引擎来存储消息,而不是使用 Maildir/Maildir++ 邮箱。这可以通过dbmail来完成。
我不知道 dbmail 对于生产环境有多可靠,但由于您已经有虚拟化工作,您可以在另一个 VM 上设置它以进行测试,并查看它在您的环境中的执行情况。
以下是 dbmail 架构的概述:
(来源:dbmail.org)
你没有提到服务器规格......你使用多少内存,处理器,网卡/交换机是千兆位的?如果你看看服务器,你能看出什么被最大化了吗?如果它是驱动器吞吐量,那么您不会对服务器软件进行太多改动
我一直在通过网络克隆系统,当我知道我的系统能够在 50 MB/s 范围内爆发时,我对在一个千兆交换机上只有大约 15 MB/秒的两个系统感到困惑。原来是终端系统上的磁盘瓶颈(我将驱动器放入第二个 IDE 通道并进行了直接 DD,获得了相同的传输速度)。
您可能需要检查处理器/磁盘/网络使用情况以及交换机,看看是否有任何问题导致了问题。如果不是这些,您可以寻找使用单独磁盘提高吞吐量的方法,将邮箱分隔到不同的主轴,检查并查看是否可以使用硬件 RAID 镜像获得更好的吞吐量(我不确定读取时间有多大提升关闭您可以获得的磁盘),或者可能转移到具有更低延迟和更大缓存的高性能硬盘。
既然您使用的是 dovecot,我想您已经在使用它的索引功能了?我什么都不知道(至少,不是免费的),这比 dovecot 快。