我想知道为每秒需要处理 30-100 封电子邮件的自研 SMTP 中继服务器实现高可用性的最佳方法是什么。
该服务器本质上是通过各种 smtp 客户端进行身份验证,然后中继到特定的邮件服务器并处理错误,例如邮件服务器不可用等。因此,需要一个队列来包含可能包含大附件的电子邮件消息。为了实现高可用性,系统应该支持集群,我可以将 Windows Clustering 用于主/从活动集群。
我认为电子邮件队列可以驻留在:
- 内存(由于明显的原因,此方法已失效。)
- 关系管理系统
- 文件(我相信这是 IIS 虚拟 SMTP 使用的?)
- 嵌入式数据库,例如 SQLite
- SQLite 和文件的混合
- 一些需要安装和配置的奇特的 3rd 方 Queue 产品?
实现高可用性的常用方法是使用 RDBMS,例如 MySQL,但是除非我拥有强大的 MySQL 服务器,否则将 RDBMS 用于消息队列会显着降低性能。最重要的是,我将不得不实现 MySQL 集群,这并不容易。另外,我在某处读到没有人应该使用 MySQL 作为队列 - http://www.engineyard.com/blog/2011/5-subtle-ways-youre-using-mysql-as-a-queue-and-why -它会咬你/
或者,我可以使用 SQLite+File,这可能是最快的(除了纯内存)和最容易部署的方法(无需安装),但是 SQLite 没有集群,所以如果服务器崩溃,未发送的消息可能仍然是丢失。