一. 前言
调用邮件接口发送邮件是再简单不过的功能。但是要做成平台并且支持百万级别的发送量,就没那么简单。
如何快速的将数百万封邮件推送出去?这个功能看上去和发送数百万条短信一样。找个靠谱的第三方推送平台,起多个进程,分分钟的事情,瓶颈肯定是在第三方平台而不是我们这里。但是这个简单的百万级别邮件发送平台(EDM)耗费了我3个多月的时间。
EDM(Email Direct Marketing)主要用于较大量的营销和推广类邮件发送。我搭建的EDM平台主要用于给订阅用户发送推广类邮件和通知类邮件。
二. 思考
最初我们的需求是需要定期给100W用户推送邮件,接到这个需求时我最初的想法如下:
因为发送邮件、短信、APP推送的业务非常相似,所以我打算做成一个消息中心,发邮件功能只是调用消息中心接口时传的一个名为email的消息类型。
因为第三方邮件平台对接口调用频率肯定会有限制,所以我们需要计算申请多少个发件邮箱,起多少个发送进程。
因为邮件是按顺序发送(新用户先发,老用户后发),所以需要在进程间进行通信,使用信号量或者消息队列。
还有一些零散的优化点。比如要支持任务中断,支持用户已读功能,邮件样式需要兼容Mac版Outlook客户端,右上角一定要有『在浏览器中查看此邮件』,右下角要有『取消订阅』。
依照如上规划,EDM平台很快就搭建完成,各个功能点测试一路畅通,于是正式上线投入生产。看着自己一气呵成写的项目完美上线,心情无比舒畅,不过这只是噩梦的开始……
按道理说不可能出问