| 導購 | 订阅 | 在线投稿
分享
 
 
 

建立大容量Web界面的Email系統

來源:互聯網  2008-05-31 00:09:55  評論

最近幾年來,基于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服務器,複雜程度就大大降低,比較適合中小型站點使用。 ,

  最近幾年來,基于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服務器,複雜程度就大大降低,比較適合中小型站點使用。 ,
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有