分布式电子邮件系统设计--转载
原文地址:http://www.mailer.com.cn/Products/MegaIntro1.htm
設計目標
郵件系統在當今社會,作為一種基礎通訊平臺,已經不單純是簡單收發郵件,而是成為互聯網各種應用的核心,承載越來越重要的應用。中國人口眾多,上網人數逐年劇增,使用郵件也日益頻繁。郵件系統從建成的那一天起,就面臨升級的壓力。如何設計一個結構良好的大容量郵件系統,對于系統穩定性、可靠性,對于日后的升級維護有著至關重要的作用。
春笛公司作為一個在郵件領域默默耕耘的公司,以小用戶量的企業郵件系統立身,最終希望打造一個堅固的、高度可擴展的、容易管理維護的大容量分布式郵件系統。在設計時,我們主要考慮如下方面:
1. 底層堅固、高度穩定。
為保證系統的穩定可靠,需要在硬件、操作系統、核心MTA、應用層在內的每一個環節都穩定可靠才行。硬件通常選取知名品牌服務器,穩定性、可靠性都有保障,差別不大。
操作系統選擇Linux或者FreeBSD, 針對郵件系統的特點,內核需要特殊調整:如打開文件數(open files)、stack size 、max user processes等。除了操作系統核心外,系統只加載必須的軟件,屏蔽一切不不要的服務端口。
在操作系統之上,處理smtp、pop3請求的MTA的穩定性、效率也至關重要。當今世界上使用比較多的是qmail和postfix, 都有分布世界各地的大批用戶。相比較而言,qmail有著更好的模塊化設計、更好的安全性,更高的投遞效率、更可靠的隊列設計。Postfix優勢在于和sendmail有著很好的兼容性,部署容易,集成程度比較高,也是一個非常不錯的MTA軟件。
應用層我們選取Apache+tomcat。Apache久負盛名、久經考驗,tomcat背后有SUN支持,最重要的是tomcat5支持應用層負載均衡(Load Balance)。另外,java作為一種面向對象的編程語言,最能體現軟件工程思想,有一系列的UML設計工具、集成開發環境、應用服務器可以選擇。很多學校也開設JAVA課程,以后JAVA會像c語言那樣普及,變成程序員必備的技能之一。郵件系統應用層會根據用戶的反饋增加信的增值服務品種,如果基于java開發,很容找到相關人才。這樣縮短開發周期、節省開發成本、降低維護難度。Google很多服務是基于java開發的。當然,java也有執行效率低的缺點,但隨著硬件速度的提升,單只程序運行速度的劣勢很容易被良好的設計模式優勢取代。
2. 容易管理、維護。
系統結構復雜之后,必然會帶來管理維護上的麻煩。我們的設計思想是希望通過統一的一個管理控制界面,讓系統管理員對每臺服務器的運行狀況、負載情況、流量了如指掌;同時通過一個管控界面,可以遠程控制服務器啟動、關閉,對服務進程遠程啟動、停止,對流量調配。當出現異常時,系統自動通過短信通知到管理人員的手機上。
3. 增加設備簡單、有效。
系統擴展性是衡量系統設計好壞的一個重要指標。好的系統能夠通過簡單添置硬件、軟件做少許配置即可滿足需要。我們設計的是讓用戶數量的增長和郵件服務器數量呈線性關系。由于PC服務器的硬件成本比較低,以一臺高性能PC服務器3萬元人民幣計算,如果作為SMTP服務器可以支撐15萬用戶,作為POP服務器可以支撐30萬用戶,作為存儲服務器,可以支撐3萬用戶。平均每用戶為0.2元、0.1元、1元。
在保證系統穩定可靠的同時,能夠最大地降低成本。降低成本有2個途徑,一是最大限度利用硬件,二是避免使用高端的存儲備份設備、負載均衡設備、四層交換機等。
?
4. 具有多級權限管理,支持個人用戶、企業用戶、運營商等。
大容量郵件系統,不僅僅是個人用戶,還有企業用戶。不同用戶群體的需求是不同的。針對不同用戶群,提供不同的服務套餐,無疑是市場營銷重要手段。而這,需要有技術上做保障才行。金笛郵件應用層采用java技術,無疑是體現用戶需求的最佳技術手段。
作為運營商,要有豐富權限管理體系,使郵件系統的每一個管理環節嚴緊、嚴密。
5. 高度模塊化,模塊之間最小耦合。
模塊化程度的高低,可以體現的系統的成熟度。充分利用開源寶庫中的免費資源,將優秀的開源項目經過改良、優化,會搭建出優秀的系統。不贊成完全從底層開發。
模塊之間通過標準接口通訊,耦合程度盡可能小,這樣,即使出問題也不會影響全局。最重要的是,系統擴展性大大增強。如可以隨時將病毒掃描過濾模塊升級,或者將垃圾郵件過濾模塊升級,其它模塊無需做任何改動。
6. 提供與其它系統直接的接口:如計費平臺、短信彩信平臺、防毒網關等。
作為郵件運營,計費模塊很重要。良好的設計可以為靈活的計費提供原始數據。根據這些計費數據,可以制定靈活的促銷手段。
隨著彩信的普及,郵件系統與彩信會逐漸融合。其它的擴展平臺,如防病毒網關、反垃圾網關、反黃網關都可以靈活對接。
7. 應用層二次開發、部署簡單方便。
郵件系統的生命力來自客戶的需求,只有不斷滿足客戶需求,推陳出新,與時俱進,才會不斷有新的用戶加入。根據用戶需求進行二次開發,這是必不可少的。二次開發必須簡單,方便。金笛郵件通過統一的二次開發接口Jindi-Mailet實現服務端應用的擴展。
郵件系統架構上的演化和優劣比較
大容量郵件系統按照存儲方式不同,大致可以分為2類:
1. 統一存儲
郵件隊列和郵件數據集中放在存儲設備上。前端smtp服務器多臺,POP服務器多臺,隨機選擇一臺smtp服務器或者POP服務器(這個過程一般采用DNS輪詢方式完成)。選定某臺服務器后,與該服務器建立連接,通過認證系統確認用戶身份后,發送或者接收郵件數據。因為是統一存儲,數據都是放在磁盤陣列上,通過NFS方式掛在每臺服務器上。不論是通過哪臺功能服務器,都可以完成郵件收發。
用戶對Webmail的請求和smtp/pop3類似,也是通過多臺機器隨機選取實現負載分布。
2. 分布式存儲
郵件數據分布在每一臺服務器上,每臺服務器都提供完整的郵件服務:smtp/pop3/imap/webmail/數據庫。用戶請求過來之后,首先查詢目錄服務器,驗證用戶身份,然后找到對應的服務器,建立連接,收取或者發送郵件。
這種方式最大的優點是用戶數量和郵件服務器數量可以保持線性增長。每臺服務器支持10萬郵箱,當一臺服務器用戶已達這個數字時,啟用另外一臺。可以通過管理程序在不同服務器直接遷移用戶。動態管理服務器。
從早期UNIX幾十用戶的簡單郵件系統,到現在幾百萬、上千萬郵件系統,中間經歷很多變化。不妨把這些梳理一下,比較郵件系統各種技術的優劣。
1. 一機一域、一機多域(虛擬域)
一機一域代表用戶是企業用戶。一臺服務器作為郵件服務器。一機多域象新網、萬網,給很多企業提供郵箱。
所有的服務,如smtp,pop3,imap都在一臺服務器上,對方郵件服務器通過查詢DNS即可唯一鎖定收件方服務IP,直接投遞過去。
?
這種單機郵件系統,由于受cpu、內存、硬盤的制約,用戶最多一般不超過10萬用戶。考慮可靠性,一般采用HA,將用戶數據存放磁盤陣列上,正常只有一臺服務器工作,異常時自動切換到另外一臺。
對于一般的企業用戶,這種單機郵件系統已經夠用。但對于大型郵件系統,這種單機系統顯然無法滿足。
2. 多機一域,功能分割,集中存儲。
郵件服務器smtp、pop3、imap、webmail服務分布在不同的服務器上,通過NFS統一訪問同一存儲區域。
?
這種做法,實現一個簡單功能分布,使每一臺服務器功能單一,幾臺服務器各司其職,處理能力大大增強。這種簡單的功能分散,實現起來比較簡單,只要在不同的服務器其上部署相關服務即可,將存儲服務器通過NFS mount到每一個服務器上,然后在DNS中做相關配置。
當用戶增大到一定數量,并發量會比較大,單臺smtp可以到256并發量,最多不會超過1000并發量。因此smtp很容易成為瓶頸。
3. 多機一域,負載均衡,集中存儲。
?
當郵件用戶并發量大時,smtp很容易成為瓶頸,在系統中出現瓶頸的地方可以多增加幾臺服務器,然后更新DNS,通過 DNS查詢解析不同的smtp服務器地址,可以使請求平均分配到每一臺服務器上。
現在許多大容量郵件系統都脫胎于此,特點是部署容易,簡單易行。缺點是當訪問量增大后,數據訪問全部通過NFS,也很容易出現磁盤IO瓶頸。
4. 多機一域,功能分布,存儲分布。
該系統前端(front-end)是一個郵件交換器和目錄服務器LDAP,后端是多臺獨立的存儲服務器,通過管理中心調度,將存儲服務器通過NFS掛在相應的smtp服務器或者pop服務上。
在目錄服務器上,會保存用戶名、密碼、smtpserver、popserver、storeserver等信息,當用戶請求過來是,先查詢LDAP,如果是收信,找到該用戶對應的smtp, 通過直接路由方式連接smtpserver,發信;如果是收信,找到對應的pop,連接popserver下載郵件。
該架構解決了服務器處理瓶頸、數據存儲IO瓶頸。缺點是主要的任務分發通過郵件交換器完成。一但郵件交換器出問題,整個系統都將無法運行。
?
5. 多機一域,雙層負載均衡,存儲分布。
為避免出現單點故障,將4改良,增加多臺郵件交換器和LDAP服務器。郵件交換器通過DNS輪詢實現負載均衡,LDAP服務器做成雙機熱備,任何一臺有故障,另一臺接替。存儲服務器通過DRBD實現兩兩鏡像,避免出現存儲故障。
這樣一套系統,可以支持千萬用戶級。以2000萬用戶為例,4000并發量測算,按照處理能力:
Smtp:15萬用戶/臺,pop:30萬/臺
需要:smtp:133臺,pop:66臺,共計約199臺PC服務器。
這個方案的優點是沒有瓶頸,可以無限擴充,缺點是需要很多存儲服務器,資源上有些浪費。
?
6. 多機一域,郵件功能服務器。
這種方案將以郵件服務器為單位,形成郵件服務器陣列。每臺郵件服務器具有完整的郵件服務功能:smtp/pop3/imap/webmail等。用戶認證信息集中存放于LDAP服務器,通過LDAP查找用戶所在郵件服務器。
系統管理通過集中管控界面可以控制用戶數據在服務器之間進行移動、復制、刪除。郵件服務器進行兩兩互備。
設置獨立的過濾服務器,主要過濾病毒、垃圾郵件和黃色圖片。過濾服務器與郵件服務器之間通過socket通訊,所有處理在內存完成,大大加快了處理速度。
該系統有如下特點:
(1) 這種方案系統造價比較低。以每臺服務15萬用戶計算,100臺服務器可以承載1500萬用戶。100臺服務器大約200萬-300萬人民幣左右。
(2) 結構簡單,布置方便,容易維護。
(3) 用戶容量與服務器數量保持線性增長,擴容只需要增加服務器即可。
(4) 帳戶在服務器直接動態可調,可遷移。
(5) 沒有瓶頸,應付突發事件的能力強。
(6) 小面積的故障,不會影響整理系統。
基于以上優點,我們推薦優先考慮此方案。
?
?
功能設計
功能上我們遵循如下設計理念:
1. 集中管控。
管理一個大型郵件系統,就象管理一臺服務器那樣簡單。在單一管理界面下,通過web瀏覽器即可監控任何環節,完成大部分操作。
2. 自動化、智能化。
通過自動裝置,如SMS監控系統流量、內存、進程、磁盤空間等,設定報警閥值,超過閥值就會自動報警,防范于未然。
3. 最簡化、最優化。
用簡單辦法完成簡單的事情。簡單意味著效率、穩定、可靠。
1.主要功能:
| 基本功能: | Smtp,pop3,imap,webmail |
| 增值模塊: | SMS,MMS,NETFile,Photo,largeFile, Schedule,AntiSPAM,Anti-Virus, Anti-pronography, … |
| 可選模塊: | 語音郵件、視頻郵件、郵件傳真服務 |
2.功能清單:
| 系統管理員 | 域管理員 | 普通用戶 |
| 1.統計、審計功能: | 域用戶管理 | 認證登錄WebMail |
| 2.監控功能: | 郵件廣播 | 用戶session信息初始化 |
| 3.服務器管理:遠程開機、關機、啟動服務、停止服務 | 域級過濾規則設定 | 顯示首頁 |
| 4.域管理:添加、變更、轉移、刪除 | 域級黑名單 | 保存圖標位置 |
| 5.過濾服務器管理 | 用戶郵箱大小、附件大小、郵件大小控制 | 郵件索引顯示 |
| 6.DNS管理 | 功能服務定制:sms/防病毒等。 | 郵件移動 |
| ? | ? | 郵件排序 |
| ? | ? | 顯示頁碼 |
| ? | ? | 回復信件 |
| ? | ? | 轉發信件 |
| ? | ? | 刪除信件 |
| ? | ? | 永久刪除信件 |
| ? | ? | 顯示信件原文 |
| ? | ? | 顯示郵件內容 |
| ? | ? | 加入到地址本 |
| ? | ? | 加入到拒收列表 |
| ? | ? | 保存郵件 |
| ? | ? | pop取信 |
| ? | ? | 文件夾顯示 |
| ? | ? | 文件夾刪除 |
| ? | ? | 文件夾添加 |
| ? | ? | 文件夾重命名 |
| ? | ? | 查找郵件 |
| ? | ? | 發郵件頁面顯示 |
| ? | ? | 立即發送郵件 |
| ? | ? | 定時發送郵件 |
| ? | ? | 保存草稿 |
| ? | ? | 發送短信郵件 |
| ? | ? | 添加附件 |
| ? | ? | 刪除附件 |
| ? | ? | 個人地址本顯示 |
| ? | ? | 團體地址本顯示 |
| ? | ? | 添加個人地址本 |
| ? | ? | 刪除個人地址本 |
| ? | ? | 修改個人地址本 |
| ? | ? | 添加團體地址本 |
| ? | ? | 刪除團體地址本 |
| ? | ? | 修改團體地址本 |
| ? | ? | 地址本排序 |
| ? | ? | 導出地址本 |
| ? | ? | 導入地址本 |
| ? | ? | 顯示自動轉發 |
| ? | ? | 修改自動轉發 |
| ? | ? | 顯示自動回復 |
| ? | ? | 修改自動回復 |
| ? | ? | 顯示簽名檔 |
| ? | ? | 刪除簽名檔 |
| ? | ? | 增加簽名檔 |
| ? | ? | 修改簽名檔 |
| ? | ? | 顯示pop收信設置 |
| ? | ? | pop收信設置修改 |
| ? | ? | pop收信設置增加 |
| ? | ? | pop收信設置刪除 |
| ? | ? | 修改密碼 |
| ? | ? | 顯示參數設置 |
| ? | ? | 參數設置修改 |
| ? | ? | 顯示多風格設置 |
| ? | ? | 多風格設置修改 |
| ? | ? | 顯示反垃圾級別設置 |
| ? | ? | 反垃圾級別設置 |
| ? | ? | 顯示殺毒狀態 |
| ? | ? | 修改殺毒狀態 |
| ? | ? | 顯示過濾設置 |
| ? | ? | 郵件過濾設置添加 |
| ? | ? | 郵件過濾設置修改 |
| ? | ? | 郵件過濾設置刪除 |
| ? | ? | 顯示拒收設置 |
| ? | ? | 拒收設置修改 |
| ? | ? | 外掛一次認證 |
| ? | ? | session維護進程 |
3.后端統計:
| 統計類別 | 統計項目 | 描述 |
| 系統資源 | 負載情況 | 5分鐘采樣一次,自動繪制統計圖 |
| CPU使用情況 | User,system,nice and idel | |
| 內存 | Totoal,used,free | |
| 交換分區 | Used ,free,cached,shared | |
| 硬盤 | Total,used,free, inode | |
| 網絡狀況 | 收到字節數,發送字節數 | |
| 郵件總量統計 | 郵件數量,總流量 | 統計每域、每用戶收發郵件總量和字節數。 |
| 投遞失敗統計 | 統計投遞失敗的記錄 | 按照每域、每用戶統計 |
| 隔離郵件統計 | 郵件感染病毒,或者認定為垃圾郵件的 | 按照每域、每用戶統計 |
| 短信統計 | 短信發送數統計 | 按照每域、每用戶統計 |
4.后端服務器管控功能
| 項 | 功能 | 描述 |
| 服務器節點遠程管理 | 添加 | 向集群中添加一臺服務器 |
| 除去 | 從集群中拿掉一臺服務器 | |
| 重啟 | 遠程重啟服務器 | |
| 關機 | 遠程關機 | |
| 服務遠程管理 | 啟動 | 遠程啟動某服務器服務進程 |
| 停止 | 遠程停止服務器進程 | |
| 監控、報警 | 設定監控項目,過載報警 | 發送SMS到管理員手機 |
| 負載均衡管理 | LVS,RR-DNS, LDAP | 負載均衡遠程調控 |
| Tomcat集群管理 | 添加節點、刪除、更新 | 管理webmail服務器 |
| Session服務器管理 | 集中管理用戶session | ? |
?
轉載于:https://www.cnblogs.com/davidwang456/p/5000016.html
總結
以上是生活随笔為你收集整理的分布式电子邮件系统设计--转载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis 模糊删除实现
- 下一篇: java set转list,数组与lis