[项目] 企业邮箱读信接口的缓存改造过程

邮箱中最重要的一个功能就是读取一封信 , 也是使用的最多的接口 , 对此接口的读取效率是有一定要求的.

1. 最早的邮箱架构邮件还是存放在本地的共享文件目录下 , 每次读取邮件 ,就是在本地寻找到这个文件本体 ,然后把文件内容返回来就可以了.

2. 随着邮件越来越多 ,在本地遍历邮件目录和文件列表变的十分缓慢 , 于是就把本地文件 , 迁移到了公司内部的分布式文件系统s3 , 邮件的索引信息元信息存储在数据库分库分表中 , 拆分出索引服务的tcp接口 , 前端通过索引接口找到路径信息 ,  通过路径信息拼接好http协议 , 调用http接口去下载文件 .

3. 在调用s3的时候 , 不能每次打开一个邮件 , 都去调用s3吧 . 所以在本地再次创建了共享目录 , 作为缓存目录 , 第一次读取的时候是去s3下载 , 保存到缓存目录 , 之后就直接读取缓存目录就可以了

4. 邮件服务会有这么几个对外的端 , web  , pop  , imap  , 三个端 . 现在三个端是各自自己缓存的邮件 , 不能共享. 为了再次提升效率 , 就通过nginx代理部署了专门的缓存服务器 , 三个端都直接去缓存服务器下载文件 , 缓存服务器再去拉取s3的文件 ,并且缓存下来 , 这样三个端都能共享一份缓存了.

5.公司内部的s3服务并不是特别稳定 , 因此部门又引入了阿里云存储 , 在收信的时候会同时往s3和阿里云写两份文件 , 在索引服务中增加标识 , 标识出属于s3还是阿里云, 还是两边都有. 各端通过标识 , 优先去阿里云拉取邮件 , 因为阿里云和s3存储文件的路径不一致 , 因此就废弃了nginx的代理缓存 .

6.我负责的web和移动客户端, 其他端不知道 , 每次都前往阿里云拉取邮件 , 因为是走的阿里云内网 , 不会占用流量 ,速度也很快 ,为了项目的可维护性 ,迁移服务器时,不需要考虑各种缓存目录的权限问题 , 就去掉了所有缓存 , 直接访问阿里云存储. 

7.现在接口中最大的性能问题是在解信的过程中 , 需要逐行读取和拆分 , 封装成对象 , 比较慢 , 应该是需要升级PHP来改造这一过程.

 

上一篇:c++输出字符串


下一篇:问题 C: 字符串的查找删除(字符串好题)