|
建立大容量基于Web的Email系統(tǒng)
王波
最近幾年來,基于Web的免費Email系統(tǒng)非常流行。當(dāng)前,幾個著名的免費Email網(wǎng)站基本上已經(jīng)成為大多數(shù)人的選擇,建立單純提供免費Email服務(wù)的站點不再像以前那樣受到熱烈歡迎,但是提供Web界面的Email服務(wù)已經(jīng)成為了一個商業(yè)站點為其注冊成員提供的基本服務(wù)之一。
一個Email系統(tǒng)可以分為服務(wù)器端和客戶端,Web界面的Email系統(tǒng)則是將Email客戶放在了Web服務(wù)器端,因此Email系統(tǒng)所需要實現(xiàn)的是一個Web界面的Email客戶。然而,由于這個Email系統(tǒng)要求用戶數(shù)量較大,因此對于Email服務(wù)器也有特定的要求。
◆操作系統(tǒng)和用戶數(shù)據(jù)庫
由于提供大容量Email系統(tǒng)對操作系統(tǒng)和數(shù)據(jù)庫的要求非常高,因此,選擇合適的操作系統(tǒng)和數(shù)據(jù)庫就是最基本的問題。
由于提供web和email服務(wù)要求穩(wěn)定性和性能特別高,因此一般都使用unix作為服務(wù)器的操作系統(tǒng),例如hotmail使用freebsd和solaris,國內(nèi)163等站點也是采用bsd系列。然而, unix的標(biāo)準(zhǔn)email系統(tǒng)也不合適用于這種大容量服務(wù)。有的unix系統(tǒng),例如當(dāng)前版本的linux,其用戶標(biāo)識只有16位,因此用戶數(shù)量最多只能有64k,即使unix系統(tǒng)本身支持32位的用戶標(biāo)識,考慮到性能因素,單臺服務(wù)器支持的用戶數(shù)量也不要超過10萬! 榱司哂兄С指嘤脩舻目蓴U展性,一般采用多臺服務(wù)器同時提供服務(wù),雖然此時仍然可以使用標(biāo)準(zhǔn)unix用戶作為email用戶,但考慮到安全性、性能以及可管理性,一般采用非unix系統(tǒng)用戶來作為email用戶。而保存用戶數(shù)據(jù)通常采用支持網(wǎng)絡(luò)訪問的數(shù)據(jù)庫形式,一般常用的有l(wèi)dap、標(biāo)準(zhǔn)數(shù)據(jù)庫、以及email系統(tǒng)自己實現(xiàn)的用戶數(shù)據(jù)庫。其中,ldap由于是提供目錄服務(wù)的標(biāo)準(zhǔn),因此應(yīng)該為最佳的選擇,其常用的開放源代碼實現(xiàn)為openldap;而標(biāo)準(zhǔn)數(shù)據(jù)庫由于實現(xiàn)方便、可擴展性強,其中在internet上最常用的為mysql;此外,也有使用其他方式實現(xiàn)的。 ◆郵件的保存
對于大容量Email系統(tǒng)來說,最關(guān)鍵的技術(shù)就是如何處理郵件存儲問題,采用何種方式提高存儲效率,將決定Email系統(tǒng)的成功與否。
由于用戶數(shù)量較大,如何保存用戶的郵件就是一個非常重要的問題。傳統(tǒng)Unix使用一個單一目錄來保存所有用戶的郵件,在用戶數(shù)量較多時就極大地降低了文件系統(tǒng)的性能。只有使用多級目錄,每個目錄下的文件數(shù)量有限,才能降低打開文件時的系統(tǒng)消耗,或者不再使用簡單的文件來保存郵件,而采用某一種封裝形式。完全采取數(shù)據(jù)庫形式來保存郵件,由于用戶郵件操作多為文件操作,且大小變化較大,因此會造成性能和存儲空間上較大的浪費。
由于用戶數(shù)量巨大,并且也要求能被多臺服務(wù)器同時訪問,必須采用存儲空間較大的服務(wù)器或服務(wù)器集群來保存,通過光纖通道或者網(wǎng)絡(luò)文件系統(tǒng)NFS來共享存儲空間,使得每個用戶的郵件存儲路徑對于每個服務(wù)器都是一致的。光纖通道是一種非常昂貴的解決方法,更為常用的是使用NFS,可以使用專用的NFS服務(wù)器,如NetApp,或者使用帶有RAID能力的PC Unix服務(wù)器。
當(dāng)使用NFS共享存儲空間的時候,必須注意一個非常重要的問題:由于NFS缺乏文件鎖定機制,在使用傳統(tǒng)的用戶郵件存儲格式mailbox時,由于所有的郵件都保存在同一個文件中,因此進行郵件操作就必須加鎖,以保證沒有訪問沖突,這就使得它不適合NFS存儲方式。為了解決這個問題,qmail提出了Maildir存儲方式,每個郵件作為單獨的一個文件保存在用戶個人的郵件目錄下,就避免了加鎖。因此,常見的免費郵件服務(wù)器,一般都采用Maildir方式來保存用戶的郵件。
如果不打算使用共享文件系統(tǒng)的方式來保存用戶的郵件,而打算讓每個服務(wù)器只訪問其自己硬盤存儲空間上的用戶郵件,那么Email服務(wù)器和客戶端都需要進行定制,使它們能通過用戶名來找到用戶屬于的真正服務(wù)器,將訪問任務(wù)交給這個服務(wù)器完成。這種方法的缺點除了所需要的改動較大、系統(tǒng)結(jié)構(gòu)復(fù)雜之外,還由于服務(wù)器是按用戶進行分割的,不利于分擔(dān)負(fù)載。其優(yōu)點也是由于它不通過網(wǎng)絡(luò)訪問其他服務(wù)器,因此可以采用任意的郵件存儲格式,包括采用強大的cyrus系統(tǒng)來保存郵件和提供服務(wù)。
◆郵件服務(wù)器軟件
采用什么樣的Email服務(wù)器軟件也將最終影響系統(tǒng)的性能,自己做一套Email服務(wù)器可能會得不償失,現(xiàn)在有兩個選擇:Sendmail和Qmail。
標(biāo)準(zhǔn)的Email軟件,例如sendmail,雖然也提供了一些包括aliases等方法,來支持非Unix系統(tǒng)用戶,但是這些能力對于實現(xiàn)這種Email系統(tǒng)是不夠的。為了支持這些Email用戶,必須使用自己的Email服務(wù)器軟件。但是由于現(xiàn)有的Email軟件都相當(dāng)成熟,而且也都是開放源代碼的軟件,所以慣常的做法都是修改原有的Email軟件,如sendmail、qmail等,使其支持特定的Email用戶。完全重寫一個Email服務(wù)軟件,從成熟性、穩(wěn)定性來看并不可取。
不管從性能上還是安全性上考慮,sendmail并不是理想的選擇,而由于qmail本身就支持Maildir,因此就成為了常用的Email軟件的基礎(chǔ)開發(fā)平臺。但是需要注意的是,qmail使用GPL許可進行保護,因此基于qmail進行的任何改動,原則上必須公開源代碼,這對開發(fā)商業(yè)應(yīng)用有一定障礙。當(dāng)然可以通過不改動qmail,而改動相關(guān)的系統(tǒng)庫函數(shù),或者采用外掛的方式來繞過這個問題。另一個可選的基礎(chǔ)Email軟件是postfix,其本身就具備與LDAP、MySQL的接口,幾乎不需要改動就能作為郵件系統(tǒng)的一部分。
◆Web客戶端
利用什么樣的腳本來進行Web Email的客戶端編程并無標(biāo)準(zhǔn),但是如果采用開放資源將會省去很多麻煩。
Web界面Email系統(tǒng)的另一個重要的部分就是Web客戶端,這一部分的功能將如同個人計算機中的OutLook,負(fù)責(zé)給用戶提供訪問自己郵件的能力。由于Web訪問本身是無連接的,因此必須保證用戶的安全性;旧,安全性可以通過登錄后建立的會話標(biāo)識、臨時目錄,并在程序中進行驗證來保證。
Web客戶端必須以統(tǒng)一的方式來訪問服務(wù)器,它可以通過直接文件訪問的方式來獲得用戶的郵件,或者通過POP3、IMAP等標(biāo)準(zhǔn)協(xié)議來訪問。對于使用網(wǎng)絡(luò)文件系統(tǒng)來共享用戶郵件的系統(tǒng),通過直接文件訪問的方法最為直接和便利,也不需要額外的消耗。而通過POP3、IMAP協(xié)議來訪問服務(wù)器,其直接的好處就是Web客戶端和Email服務(wù)器相分離,提高了系統(tǒng)安全性。
當(dāng)前,已經(jīng)有一些相當(dāng)成熟的開放源代碼的Web客戶端軟件,其中IMP是采用PHP來實現(xiàn)的,通過IMAP協(xié)議訪問服務(wù)器的Web郵件客戶端軟件;而WING則是采用Perl來實現(xiàn)的另一個Web客戶端軟件。這些開放源代碼軟件都相當(dāng)不錯,然而,將這些軟件與自己的系統(tǒng)相集成,還會需要進行一定改動。此外,還應(yīng)該遵循其許可要求,將改動的代碼對外公開。
◆實現(xiàn)負(fù)載均衡
系統(tǒng)的負(fù)載均衡將是長期的問題,它決定了該系統(tǒng)的可擴展性。
由于需要提供給大量的用戶進行訪問,因此單臺服務(wù)器不能滿足這個需要,而必須要使用多服務(wù)器的方式。除了按照功能性進行分割之外,如Web服務(wù)器、Email服務(wù)器以及文件服務(wù)器相分離,還需要對一些資源緊張的服務(wù)使用多服務(wù)器進行負(fù)載均衡。雖然當(dāng)前一些商業(yè)廠家也提出了一些服務(wù)器集群的方案,但常用的簡單而有效的方法還是DNS循環(huán)解析、Web服務(wù)器重定位和NAT負(fù)載均衡等幾種。
DNS循環(huán)解析是為同一個名字分配多個IP地址,它用在Yahoo等相當(dāng)大的站點上,實際效果也相當(dāng)不錯。而Web服務(wù)器重定位則是由Web服務(wù)器隨機產(chǎn)生位于不同服務(wù)器上的真實頁面URL,使不同的瀏覽器載入不同服務(wù)器上的頁面,使用它只能實現(xiàn)Web客戶端的負(fù)載均衡。而NAT負(fù)載均衡則利用第四層交換機,使同樣的請求轉(zhuǎn)向不同的服務(wù)器,除了昂貴的交換機之外,也有一些軟件能完成NAT功能。本人曾對FreeBSD的natd進行了改動,使其能支持負(fù)載均衡,這對于因為交換機價格問題而不得不降低性能要求的使用者來講,也是一種選擇。
◆實例分析
國內(nèi)有很多Web Email系統(tǒng),網(wǎng)易、21CN和新浪Email是其中的代表。
當(dāng)前在國內(nèi)最流行的Web界面Email系統(tǒng)為網(wǎng)易公司的系統(tǒng),它是采用qmail作為基本服務(wù)器軟件,再加以改動的系統(tǒng)。它采用NFS網(wǎng)絡(luò)文件系統(tǒng)作為用戶郵件存儲空間,使用Maildir作為郵件存儲格式,提供多級目錄以支持大量用戶。其Web客戶端為他們自己實現(xiàn)的,通過直接訪問用戶郵件的方式為用戶提供服務(wù)。不考慮其軟件的小問題,這種實現(xiàn)方式是非常流行且成熟的方式,大部分免費郵件服務(wù)系統(tǒng)都是采用的這種模式。
另一種方式是盡量利用已有的開放源代碼軟件,一種可行的方案是使用Postfix、OpenLDAP、cyrus和IMP來實現(xiàn)大容量Email系統(tǒng)。其中,主郵件服務(wù)器使用Postfix查詢LDAP服務(wù)器,決定用戶的真實郵箱地址,然后轉(zhuǎn)發(fā)到真實郵件主機上,該主機通過LDAP查詢確認(rèn),將郵件放入cyrus服務(wù)器中,而IMP通過登錄cyrus,使用IMAP訪問用戶郵件。當(dāng)用戶增多,一臺cyrus服務(wù)器不夠時,可以將新添加的用戶放置到新增加的服務(wù)器上,只需要在LDAP服務(wù)器設(shè)置相應(yīng)的屬性就可以了。在這種方式下,由于用戶是嚴(yán)格按服務(wù)器分割造成了管理等困難之外,這種結(jié)構(gòu)本身較為復(fù)雜。然而,如果用戶數(shù)量不是很多,就不需要使用多臺cyrus服務(wù)器和LDAP服務(wù)器,復(fù)雜程度就大大降低,比較適合中小型站點使用。
|