基于Web的IMAP客户端是否应该拥有自己的数据库?

时间:2013-02-16 02:51:35

标签: web imap

在构建基于Web的IMAP客户端时,是否应该让Web服务器直接与IMAP服务器通信,或者我是否应该在需要时同步中间的数据库?

3 个答案:

答案 0 :(得分:7)

您提出这个问题意味着您担心网络邮件前端无法有效地与IMAP后端一起使用。我可以想到几个原因,如果我错了,请纠正我:

  1. 无状态的网络邮件客户端将在IMAP服务器上进行批次调用,其中很多将基本上重复(例如,当用户刷新屏幕时)。您担心呼叫的数量以及大多数呼叫的严格不必要性将:
    1. 压倒IMAP服务器,或
    2. 与第三方IMAP提供商或
    3. 架起大型网络/数据/ SLA账单
    4. 比直接数据库访问慢得多
  2. IMAP服务器是外部的,有时可能无法用于您的数据中心,您需要确保Webmail客户端继续为您的客户提供服务。
  3. 需要做出关键决策点,但我认为这取决于您需要连接的IMAP服务器是在您的组织内部还是外部。

    • 内部
        网络邮件组件的
      1. 性能可能会延迟到IMAP服务器
    • 外部
      1. 网络带宽 IMAP使用的费用非常昂贵
      2. 效果,如上所述
      3. 您需要在主IMAP服务器离线时镜像邮件数据。

    在此背景下,您正在考虑是否可以在没有数据库的情况下离开,因为您知道添加此图层将是:

    1. 大大增加项目时间表(用于设计,开发和测试)
    2. 为项目添加技术和交付风险,
    3. 添加一个您可能没有的主要架构组件。
    4. 内部IMAP服务器 - 性能

      首先,对系统进行基准测试以确定是否确实存在性能损失可能是一个好主意。我的直觉说,不必有一个,因为那里有许多高度响应的网络邮件系统。

      首先,有许多非常好的IMAP代理服务器可以使IMAP连接保持活跃,从而显着降低延迟。例子包括:

      其次,如果您将IMAP服务器和Webmail Web应用程序视为系统,那么您可能不会将IMAP数据缓存在另一个数据库中。您将从IMAP服务器向数据库引入数据延迟,导致数据和数据库管理问题,并引入具有许多新故障点的系统复杂性。

      相反,您可以优化您的IMAP服务器以与webmail应用程序一起使用吗?这可能涉及购买额外的服务器或升级您当前的服务器 - 但与此同时,您的网络邮件服务器将会小得多,您不必购买数据库服务器。

      IMAP服务器几乎肯定具有内部缓存性能,几乎可以肯定地使用数据库(具有自己的缓存等) - 经过多年的调整和调试多年。你可以利用这种经验和成熟度。

      让我们想象一个假设的问题 - 系统变大并开始遇到性能问题。使用自定义数据库表调整和扩展自定义应用程序是否更容易,或者是否更容易扩展广泛使用的商业或开源IMAP服务器,并提供商业支持和良好的测试文档?

      外部IMAP服务器 - 最大限度地减少流量并最大限度地提高性能

      考虑到这一点,我们的目标是尽量减少IMAP协议呼叫,因为它们的时间(网络延迟)或资金都很昂贵。

      首先,您可以使用IMAPProxy(如上所述)确保连接保持活动状态并且用户已登录。

      此外,我认为您需要使用数据库,但需要使用缓存模式而不是完整数据模型。例如,您可以使用NoSQL DB(键值或对象db)而不是SQL DB:

      • 存储对象(消息,文件夹元数据,附件等)而不是非规范化数据
      • 可能不需要ACID行为 - 它是一个缓存
      • 大多数按对象ID或类查找,而不是由复杂的WHERE子句
      • 查找

      以这种方式实现将使任务非常具体用例或用户故事,降低成本和风险并使系统更易于测试。如果您的实现中存在严重问题,则可以刷新整个缓存并恢复服务。

      数据和数据库管理也将变得更加容易,并且不会存储完整用户的邮箱。

      外部IMAP服务器 - 已断开连接的模型

      这预示着您正在为外部IMAP服务提供Webmail客户端,并且您知道外部IMAP服务会定期脱机,但您仍然需要向用户提供电子邮件。

      在这里,您显然需要镜像用户'本地数据库中的电子邮件。我建议您查看具有本地IMAP服务器的架构解决方案,并使用许多开源IMAP同步工具中的任何一个来镜像第三方IMAP服务器。这里的好处是:

      1. 对于您的网络邮件应用,本地IMAP服务器看起来与任何其他IMAP服务器完全相同简化了网络邮件客户端
      2. 同步是一个棘手的问题,有许多边缘情况;所有这些都已经解决了
      3. 拥有完整的本地IMAP服务器,您拥有一个完全可管理的组件,可选择支持,无需开发成本
      4. 您可以让一些用户直接连接到外部IMAP服务器,有些用户可以使用此架构连接到缓存的用户 - 它只是一个URL
      5. 缺点是:

        • 存储重复电子邮件的成本可能很高
        • 用户查看新电子邮件的时间滞后,因为必须先在外部IMAP服务器上检测,然后再在本地检测。

        您可以在本地使用许多IMAP服务器之一,为了实现同步,以下是一些可能性:

        免责声明:我自己没有使用过这些工具)

答案 1 :(得分:2)

这完全取决于要求,提供的服务的重要性以及您拥有的时间; - )

我见过yahoo,rediffmail IMAP的案例,我的黑莓手机上的邮件被重新载入。(为了您的信息。黑莓邮件服务首先将所有邮件从IMAP服务器下载到自己的服务器,然后将其分发给设备)。

使用中间版是一个好主意,因为它可以减少任何与服务器相关的问题,如邮件提取错误,随机错误或服务器崩溃。即使邮件相关的活动也会更快,如邮件读取,删除,移动到不同的文件夹,即使目标IMAP服务器已关闭,也可以更方便地处理。

答案 2 :(得分:1)

我认为用户将从数据库方法中受益匪浅,并且可能通过限制存储在数据库中的最近消息的数量来减少存储成本。这将为用户提供一个快速的初始加载,以便他们可以进入,阅读最新的电子邮件并在不等待IMAP服务器同步的情况下离开。数据库方法也可能是文件夹问题的解决方案,因为您可以缓存上次连接时下载的内容,然后在后台更新,防止用户等待服务器同步。简而言之,用户会对数据库方法更满意,这才是最重要的。