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