gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:52:48 26 4
gpt4 key购买 nike

在构建基于Web的IMAP客户端时,应该让Web服务器直接与IMAP服务器对话,还是应该在中间有一个数据库,该数据库在需要时进行同步?

最佳答案

您提出问题的事实意味着您担心Webmail前端无法与IMAP后端一起有效使用。我能想到一些原因,如果我错了,请纠正我:


Webmail客户端是无状态的,它将在IMAP服务器上进行很多调用,并且其中很多实际上是重复的(例如,当用户刷新屏幕时)。您担心呼叫的数量以及其中大多数呼叫的绝对不必要的性质之一:

使IMAP服务器不堪重负,或者
与第三方IMAP提供商合并大型网络/数据/ SLA账单,或者
比直接数据库访问慢得多

IMAP服务器是外部的,有时您的数据中心可能不可用,因此您需要确保Webmail客户端继续向客户提供服务。


需要做出一个关键决策点,但是我认为这取决于您需要连接的IMAP服务器是组织内部还是外部。


内部:

Webmail组件的性能可能会延迟到IMAP服务器

外部:

网络带宽或IMAP的使用费用昂贵
表现如上
当主IMAP服务器离线时,您需要镜像邮件数据。



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


昂贵
大大增加了项目时间表(用于设计,开发和测试)
给项目增加技术和交付风险,并且
添加您可能没有的主要架构组件。


内部IMAP服务器-性能

首先,对系统进行基准测试以查看是否确实对性能造成影响可能是个好主意。我的直言不讳,没有必要一个,因为那里有许多高响应性的Webmail系统。

首先,有许多非常好的IMAP代理服务器,使您可以保持IMAP连接保持活动状态,从而大大减少了延迟。示例包括:


ImapProxy
Perdition
NGINX


其次,如果您将IMAP服务器和Webmail Web应用程序视为一个系统,则可能有意义的是您没有将IMAP数据缓存在另一个数据库中。您将引入从IMAP服务器到数据库的数据延迟,使数据和数据库管理头痛,并引入许多新的故障点带来系统复杂性。

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

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

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

外部IMAP服务器-最小化流量并最大化性能

考虑到这一点,目的是使IMAP协议调用最小化,因为它们在时间(网络等待时间)或金钱上很昂贵。

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

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


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


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

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

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

前提是您要为外部IMAP服务提供一个Webmail客户端,并且您知道外部IMAP服务会定期脱机,但是您仍然需要向用户提供电子邮件。

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


对于您的Webmail应用程序,本地IMAP服务器看起来与任何其他IMAP服务器完全相同,从而简化了Webmail客户端
在很多情况下,同步是一个棘手的问题。所有这些都已经解决了
通过拥有完整的本地IMAP服务器,您将拥有一个完全可管理的组件,并具有可选支持,而无需开发成本
您可以让某些用户直接连接到外部IMAP服务器,有些可以使用此体系结构连接到缓存的用户-这只是一个URL


缺点是:


存储重复电子邮件的潜在巨大成本
用户看到新邮件的时间比较漫长,因为必须首先在外部IMAP服务器上检测到它们,然后在本地再次检测到它们。


您可以在本地使用许多IMAP服务器之一,并且为了进行同步,有以下几种可能性:


isync
OfflineImap
imapsync


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

关于web - 基于Web的IMAP客户端是否应该拥有自己的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14906417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com