郵箱中最重要的一個功能就是讀取一封信 , 也是使用的最多的介面 , 對此介面的讀取效率是有一定要求的.
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來改造這一程序.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/71702.html
標籤:PHP
