[项目] 企业邮箱读信接口的缓存改造过程
邮箱中最重要的一个功能就是读取一封信 , 也是使用的最多的接口 , 对此接口的读取效率是有一定要求的.
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来改造这一过程.
相关文章
- 长篇图解etcd核心应用场景及编码实战
- [PostgreSql]生产级别数据库安装要考虑哪些问题?
- 用了这跨操作系统远控软件,我再也不出差了
- spring接口多实现类,该依赖注入哪一个?
- 延时任务-基于redis zset的完整实现
- 延时任务-基于netty时间轮算法实现
- 完整实现-通过DelayQueue实现延时任务
- 数据分表Mybatis Plus动态表名最优方案的探索
- 【docker专栏8】使用IDEA远程管理docker镜像及容器服务
- 个人开源项目如何上传maven中央仓库
- web项目访问引用jar内部的静态资源
- [开源项目]可观测、易使用的SpringBoot线程池
- 还在纠结报表工具的选型么?来看看这个
- 【docker专栏7】容器自启动与守护进程停止后容器保活
- 【docker专栏6】详解docker容器状态转换管理命令
- 【docker专栏5】详解docker镜像管理命令
- 【docker专栏4】使用docker安装nginx提供web服务
- 【docker专栏3】docker基础概念-容器、镜像以及引擎组成部分
- 【docker专栏2】CentOS操作系统安装DockerCE
- 【docker专栏1】docker解决的实际问题及应用场景