在构建基于Web的IMAP客户端时,是否应该让Web服务器直接与IMAP服务器通信,或者我是否应该在需要时同步中间的数据库?
您提出问题这一事实意味着您担心网络邮件前端无法有效地与IMAP后端一起使用.我可以想到几个原因,如果我错了,请纠正我:
需要做出关键决策点,但我认为这取决于您需要连接的IMAP服务器是组织内部还是外部.
在这种背景下,您正在考虑是否可以在没有数据库的情况下离开,因为您知道添加此图层将是:
内部IMAP服务器 - 性能
首先,对系统进行基准测试以确定是否确实存在性能损失可能是一个好主意.我的直觉说没有必要,因为那里有许多高度响应的网络邮件系统.
首先,有许多非常好的IMAP代理服务器可以使IMAP连接保持活跃,从而显着降低延迟.例子包括:
其次,如果您将IMAP服务器和Webmail Web应用程序视为一个系统,那么您可能不会将IMAP数据缓存在另一个数据库中.您将从IMAP服务器向数据库引入数据延迟,导致数据和数据库管理问题,并引入具有许多新故障点的系统复杂性.
相反,您可以优化您的IMAP服务器以使用webmail应用程序吗?这可能涉及购买额外的服务器或升级您当前的服务器 - 但与此同时,您的Webmail服务器将会小得多,您不必购买数据库服务器.
IMAP服务器几乎肯定具有内部缓存以提高性能,并且几乎肯定使用数据库(具有自己的缓存等) - 多年来经过多年的调整和调试.您可以利用这种经验和成熟度.
让我们想象一个假设的问题 - 系统变大并开始遇到性能问题.使用自定义数据库表调整和扩展自定义应用程序是否更容易,或者是否更容易扩展广泛使用的商业或开源IMAP服务器,并提供商业支持和良好的测试文档?
外部IMAP服务器 - 最小化流量并最大限度地提高性能
考虑到这一点,目标是最小化IMAP协议呼叫,因为它们的时间(网络延迟)或金钱都很昂贵.
首先,您可以使用IMAPProxy(如上所述)来确保连接保持活动状态并且用户已登录.
另外,我认为你需要使用数据库但是在缓存模式而不是完整的数据模型.例如,您可以使用NoSQL DB(键值或对象db)而不是SQL DB:
以这种方式实现将使任务非常具体用例或用户故事,降低成本和风险并使系统更易于测试.如果您的实现中存在严重问题,则可以刷新整个缓存并恢复服务.
数据和数据库管理也将更加容易,并且不会存储完整用户的邮箱.
外部IMAP服务器 - 断开连接的模型
这预示着您正在为外部IMAP服务提供Webmail客户端,并且您知道外部IMAP服务会定期脱机,但您仍需要向用户提供电子邮件.
在这里,您显然需要在本地数据库中镜像用户的电子邮件.我建议您查看一个架构解决方案,其中您有一个本地IMAP服务器,并且您使用许多开源IMAP同步工具中的任何一个来镜像第三方IMAP服务器.这里的好处是:
缺点是:
您可以在本地使用许多IMAP服务器之一,并且为了同步,以下是一些可能性:
(免责声明:我自己没有使用过这些工具)