建立大容量Web界面的Email系統_Mail服務器教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!
        最近幾年來,基于Web的免費Email系統非常流行,當前,幾個著名的免費Email網站基本上已經成為大多數人的選擇,建立單純提供免費Email服務的站點不再像以前那樣受到熱烈歡迎,但是提供Web界面的Email服務已經成為了一個商業站點為其注冊成員提供的基本服務之一。

        一個Email系統可以分為服務器端和客戶端,Web界面的Email系統則是將Email客戶放在了Web服務器端,因此Email系統所需要實現的是一個Web界面的Email客戶。然而,由于這個Email系統要求用戶數量較大,因此對于EMail服務器也有特定的要求。

        1. 操作系統和用戶數據庫

        由于提供Web和Email服務要求穩定性和性能特別高,因此一般都使用Unix作為服務器的操作系統,例如hotmail使用FreeBSD 和Solaris,國內163等站點也是BSD系列。然而, Unix的標準Email系統也不合適用做這種大容量服務。有的Unix系統,例如當前版本的Linux,其用戶標識只有16位,因此用戶數量最多只能有64K,即使Unix系統本身支持32位的用戶標識,考慮到性能因素,單臺服務器支持的用戶數量也不要超過10 萬。

        為了具有支持更多用戶的可擴展性,一般采用多臺服務器同時提供服務,雖然此時仍然可以使用標準Unix用戶作為Email用戶,但考慮到安全性、性能以及可管理性,一般采用非Unix系統用戶來作為Email用戶。而保存用戶數據通常采用支持網絡訪問的數據庫形式,一般常用的有LDAP、標準數據庫、以及Email系統自己實現的用戶數據庫。其中,LDAP由于是提供目錄服務的標準,因此應該為最佳的選擇,其常用的開放源代碼實現為OpenLDAP;而標準數據庫由于實現方便、可擴展性強,其中在Int ernet上最常用的為MySQL;此外,也有使用其他方式的實現。

        2. 郵件的保存

        由于用戶數量較大,如何保存用戶的郵件就是一個非常重要的問題。傳統Unix使用一個單一目錄來保存所有用戶的郵件,在用戶數量較多時就極大的降低了文件系統的性能。只有使用多級目錄,每個目錄下的文件數量有限,才能降低打開文件時的系統消耗,或者不再使用簡單的文件來保存郵件,而采用某一種封裝形式。完全采取數據庫形式來保存郵件,由于用戶郵件操作多為文件操作,且大小變化較大,因此會造成性能和存儲空間上較大的浪費。

        由于用戶數量巨大,并且也要求能被多臺服務器同時訪問,必須采用存儲空間較大的服務器或服務器集群來保存,通過光纖通道或者網絡文件系統NFS來共享存儲空間,使得每個用戶的郵件存儲路徑對于每個服務器都是一致的。光纖通道是一種非常昂貴的解決方法,更為常用的是使用NFS,可以使用專用的NFS服務器,如NetApp,或者使用帶有RAID能力的PC Unix服務器。

        當使用NFS共享存儲空間的時候,一個非常重要的問題必須注意。由于NFS缺乏文件鎖定機制,因此使用傳統的用戶郵件存儲格式mailbox時,因為所有的郵件都保存在同一個文件中,因此進行郵件操作就必須加鎖,以保證沒有訪問沖突,這就使得它不適合NFS存儲方式。為了解決這個問題,qmail提出了Maildir存儲方式,每個郵件作為單獨的一個文件保存在用戶個人的郵件目錄下,就避免了加鎖。因此,常見的免費郵件服務器,一般都采用Maildir方式來保存用戶的郵件。

        如果不打算使用共享文件系統的方式來保存用戶的郵件,而打算讓每個服務器只訪問其自己硬盤存儲空間上的用戶郵件,那么EMail服務器和客戶端都需要進行定制,使它們能通過用戶名來找到用戶屬于的真正服務器,將訪問任務交給這個服務器完成。這種方法的缺點除了所需要的改動較大之外,系統結構復雜之外,還由于服務器是按用戶進行分割的,不利于分擔負載。其優點也是由于它不通過網絡訪問其他服務器,因此可以采用任意的郵件存儲格式,包括采用強大的cyrus系統來保存郵件和提供服務。

        3. 郵件服務器軟件

        標準的Email軟件,例如sendmail,雖然也提供了一些包括aliases等方法,來支持非Unix系統用戶,但是這些能力對于實現這種Email系統是不夠的。為了支持這些Email用戶,必須使用自己的EMail服務器軟件。一般由于現有的Email軟件都相當成熟,而且也都是開放源代碼的軟件,因此一般都是改動原有的Email軟件,如sendmail、qmail等,使其支持特定的Email用戶。完全重寫一個Email服務軟件,從成熟性、穩定性來看并不可取。

        不管從性能上,安全性上考慮,sendmail并不是理想的選擇,而且由于qmail本身就支持Maildir,因此就成為了常用的Email 軟件的基礎開發平臺。然而需要注意的是,qmail使用GPL許可進行保護,因此基于qmail進行的任何改動,原則上必須公開源代碼,這對開發商業系統有一定障礙。當然可以通過不改動qmail,而改動相關的系統庫函數,或者采用外掛的方式來繞過這個問題。另一個可選的基礎Email軟件是postfix,其本身就具備與LDAP、MySQL的接口,幾乎不需要改動就能作為郵件系統的一部分。

        4. Web客戶端

        Web界面Email系統的另一個重要的部分就是Web客戶端,這一部分的功能將如同個人計算機中的outlook,負責給用戶提供訪問自己郵件的能力。由于Web訪問本身是無連接的,因此必須保證用戶的安全性。基本上,安全性可以通過登錄后建立的會話標識、臨時目錄,并在程序中進行驗證來保證。

        Web客戶端必須以統一的方式來訪問服務器,可以通過直接文件訪問的方式來獲得用戶的郵件,或者通過POP3、IMAP等標準協議來訪問。對于使用網絡文件系統來共享用戶郵件的系統,通過直接文件訪問的方法最為直接和便利,也不需要額外的消耗。而通過POP3、IMAP協議來訪問服務器,其直接的好處就是Web客戶端和EMail服務器相分離,提高了系統安全性。

        當前,已經有一些相當成熟的開放源代碼的Web客戶端軟件,其中IMP是采用PHP來實現的,通過IMAP協議訪問服務器的Web郵件客戶端軟件。而WING則是采用Perl來實現的另一個Web客戶端軟件。這些開放源代碼軟件都相當不錯,然而,將這些軟件與自己的系統相集成,還會需要進行一定改動。此外,還應該遵循其許可要求,將改動的代碼對外公開。

        5. 實現負載均衡

        由于需要提供給大量的用戶進行訪問,因此單臺服務器不能滿足這個需要,而必須要使用多服務器的方式。除了按照功能性進行分割之外,如Web服務器、EMail服務器以及文件服務器相分離,還需要對一些資源緊張的服務使用多服務器進行負載均衡。雖然當前一些商業廠家也提出了一些服務器集群的方案,但常用的簡單而有效的方法還是DNS循環解析,Web服務器重定位和NAT負載均衡等幾種。

        DNS循環解析是為同一個名字分配多個IP地址,它用在Yahoo等相當大的站點上,實際效果也相當不錯。而Web服務器重定位則是由Web服務器隨機產生位于不同服務器上的真實頁面URL,使不同的瀏覽器載入不同服務器上的頁面,使用它只能實現Web客戶端的負載均衡。而NAT負載均衡則利用第四層交換機,使同樣的請求轉向不同的服務器,除了昂貴的交換機之外,也有一些軟件能完成NAT功能,我曾對FreeBSD的natd進行了改動,使其能支持負載均衡,對于因為交換機價格問題而不得不降低性能要求的使用者來講,也是一種選擇。

        6. 實例分析

        當前在國內最流行的Web界面Email系統為網易公司的系統,它是采用qmail作為基本服務器軟件,再加以改動的系統。它采用 NFS網絡文件系統作為用戶郵件存儲空間,使用Maildir作為郵件存儲格式,提供多級目錄以支持大量用戶。其Web客戶端為他們自己實現的,通過直接訪問用戶郵件的方式為用戶提供服務。不考慮其軟件的小問題,這種實現方式是非常流行且成熟的方式,大部分免費郵件服務系統都是采用的這種模式。

        另一種方式是盡量利用已有的開放源代碼軟件,一種可行的方案是使用Postfix、OpenLDAP、cyrus和IMP來實現大容量Email 系統,其中,主郵件服務器使用Postfix查詢LDAP服務器,決定用戶的真實郵箱地址,然后轉發到真實郵件主機上,該主機通過LDAP查詢確認,將郵件放入cyrus服務器中,而IMP通過登錄cyrus,使用IMAP訪問用戶郵件。當用戶增多,一臺cyrus服務器不夠時,可以將新添加的用戶放置到新增加的服務器上,只需要在LDAP服務器設置相應的屬性就可以了。在這種方式下,由于用戶是嚴格按服務器分割造成了管理等困難之外,這種結構本身較為復雜。然而,如果用戶數量不是很多,那么就不需要使用多臺cyrus服務器和LDAP服務器,復雜程度就大大降低,比較適合中小型站點使用。

      來源:網絡搜集//所屬分類:Mail服務器教程/更新時間:2013-04-14
      相關Mail服務器教程