[黎偉健 李小青 王鋼 梁春章 胡芯菲 吳達玳]
139 郵箱在2021 年前一直采用一點集中部署方式,即所有用戶節(jié)點與一個存儲節(jié)點支撐業(yè)務(wù)運行,用戶節(jié)點與存儲節(jié)點均設(shè)置在廣州。
單中心集中部署方式如下缺陷:
(1)單點故障:當服務(wù)器出現(xiàn)故障或停機時,整個系統(tǒng)將不可用,導致用戶訪問中斷,可能會帶來嚴重的損失。
(2)服務(wù)器維護困難:對于集中的服務(wù)器,需要花費更多的時間和資源進行維護、升級和擴容,不利于系統(tǒng)的可維護性和擴展性。
(3)用戶訪問速度慢:由于服務(wù)器只設(shè)置在一處,地理位置分布廣泛的用戶可能需要經(jīng)過多次跳轉(zhuǎn)才能訪問服務(wù)器,導致訪問速度變慢。
(4)安全風險高:一個中心服務(wù)器容易成為黑客攻擊的目標,一旦攻陷,將使整個系統(tǒng)數(shù)據(jù)和用戶信息面臨嚴重的安全風險。
139 郵箱2021 年前的架構(gòu)見圖1 所示。
圖1 單中心集中部署架構(gòu)
下面說明用戶上傳文件的流程:[1]
(1)應(yīng)用層:
由用戶可以使用的郵箱系統(tǒng)的人機界面WebMail、WAPMail、移動終端應(yīng)用、郵箱增值功能以及管理員使用的139 郵箱支撐系統(tǒng)、運營系統(tǒng)、支撐上層業(yè)務(wù)的后臺應(yīng)用服務(wù)組成。
(2)基礎(chǔ)層:
主要包括基礎(chǔ)郵箱系統(tǒng)、分布式文件存儲系統(tǒng)、用戶數(shù)據(jù)存儲倉庫。主要實現(xiàn)郵件數(shù)據(jù)的存儲、收發(fā)、用戶登錄狀態(tài)的管理,按標準的SMTP、POP3、IMAP 郵件協(xié)議提供服務(wù),通過基礎(chǔ)平臺API 實現(xiàn)與應(yīng)用層的對接,支撐應(yīng)用層業(yè)務(wù)功能的實現(xiàn)和業(yè)務(wù)發(fā)展。
(3)接口層:
郵箱系統(tǒng)通過接口層連接到BOSS 系統(tǒng)、短信網(wǎng)關(guān)、統(tǒng)一認證等。
從以上流程可以看出,因用戶節(jié)點與存儲節(jié)點都只有一個,任何一個節(jié)點出現(xiàn)故障,都將導致用戶無法正常訪問郵箱及個模業(yè)務(wù)模塊功能業(yè)務(wù)。
139 郵箱現(xiàn)架構(gòu)如圖2 所示。
圖2 多中心部署架構(gòu)
(1)用戶入口層
用戶入口層,根據(jù)部署需要在多地部署多個接入中心,每個同中心為用戶提供無差別的HTTP/SMTP/POP/IMAP協(xié)議接入服務(wù)。為提高訪問效率,通過智能DNS 配置實現(xiàn)用戶就近訪問。當入口層的某一節(jié)點故障時把該節(jié)點入口IP 從DNS[7]列表移除,把用戶切換到其他正常的節(jié)點訪問郵箱服務(wù)。
(2)訪問控制層
該層部署兩個及以上節(jié)點,每個節(jié)點保存完全一致的副本數(shù)據(jù),入口層訪問任一節(jié)點,都將獲得相同的服務(wù)。平時用戶接入層根據(jù)就近、系統(tǒng)負載等策略接入訪問控制層??刂茖邮盏秸埱蠛?,會根據(jù)策略、系統(tǒng)負載等把用戶請求分發(fā)到數(shù)據(jù)中心。
接入層會實時同步當前每個訪問控制中心的狀態(tài),當某個中心出現(xiàn)異常時,接入層會根據(jù)系統(tǒng)預(yù)定的策略(就近、訪問控制中心的負載),把請求分流到其他的控制中心,保證某個中心異常不影響用戶正常訪問郵件系統(tǒng)。
(3)基礎(chǔ)數(shù)據(jù)層
按存儲資源物理位置多地靈活部署、擴容。系統(tǒng)部署時,為每個數(shù)據(jù)中心分配全局唯一的中心ID。當郵件入信保存時,訪問控制層根據(jù)權(quán)重配置選擇存儲郵件數(shù)據(jù)節(jié)點[4]。存儲節(jié)點根據(jù)內(nèi)置規(guī)則生成全局唯一的郵件ID,該ID 包含存儲節(jié)點ID,用戶下載郵件時根據(jù)郵件信息的節(jié)點ID 信息,可正確路由到數(shù)據(jù)中心下載郵件;
139 郵箱系統(tǒng)采用分層的架構(gòu)設(shè)計,實現(xiàn)郵箱系統(tǒng)雙活。
用戶元數(shù)據(jù)/增值服務(wù)訪問流程說明,如圖3 所示。
圖3 數(shù)據(jù)訪問流程
(1)應(yīng)用入口在本地可設(shè)置、緩存訪問控制層所有節(jié)點的服務(wù)狀態(tài);
(2)應(yīng)用入口根據(jù)就近訪問原則或系統(tǒng)設(shè)置的其他規(guī)則,選擇訪問的控制節(jié)點副本;
(3)一個控制節(jié)點對數(shù)據(jù)做的修改需要同步到其他所有控制節(jié)點副本。
訪問控制層的每個節(jié)點需要保證數(shù)據(jù)一致性,系統(tǒng)設(shè)計統(tǒng)一的數(shù)據(jù)同步網(wǎng)關(guān),每個業(yè)務(wù)模塊發(fā)生數(shù)據(jù)變更操作,只需要把binlog 日志上傳到網(wǎng)關(guān),由同步網(wǎng)關(guān)完成多中心間數(shù)據(jù)同步操作,如圖4 所示。
圖4 用戶數(shù)據(jù)同步
流程說明,如圖5 所示。
圖5 數(shù)據(jù)同步時序
(1)業(yè)務(wù)處理模塊,增加/刪除/修改數(shù)據(jù)成功后,數(shù)據(jù)同步組件把需要同步的數(shù)據(jù)提交給數(shù)據(jù)同步網(wǎng)關(guān);
(2)同步網(wǎng)關(guān)收到同步數(shù)據(jù)后先持久化保存到磁盤,同步成功后再刪除數(shù)據(jù);
(3)網(wǎng)關(guān)按優(yōu)先級進行排序,優(yōu)先級高優(yōu)先執(zhí)行同步;
(4)根據(jù)目標網(wǎng)關(guān)收到同步數(shù)據(jù)后,根據(jù)數(shù)據(jù)類型分發(fā)給相應(yīng)的業(yè)務(wù)處理模塊,完成數(shù)據(jù)同步操作。
3.4.1 入口層訪問控制策略:
根據(jù)每個分?。ǔ鞘校┡c入口節(jié)點的距離及網(wǎng)絡(luò)互通情況,在DNS 服務(wù)器配置基于IP 來源(地區(qū))的智能DNS 策略,不同地區(qū)的來源IP 返回不同的入口IP 列表,實現(xiàn)用戶就近訪問。
當入口層的某一節(jié)點故障時把該節(jié)點入口IP 從DNS列表移除,把用戶切換到其他正常的節(jié)點訪問郵箱服務(wù)。不因為節(jié)點故障影響用戶訪問郵箱服務(wù)。
3.4.2 訪問控制層訪問控制策略:
(1)就近選擇:如果部署結(jié)構(gòu)中,在同一機房有訪問控制層中心,則入口層優(yōu)先選擇本機房的訪問控制層;
(2)根據(jù)訪問控制層的部署規(guī)模,配置每個中心的訪問權(quán)重,每次訪問根據(jù)權(quán)重計算選擇合適的訪問控制節(jié)點。
3.4.3 數(shù)據(jù)層訪問控制策略:
(1)就近選擇:如果部署結(jié)構(gòu)中,在同一機房有數(shù)據(jù)制層中心,則用戶入信保存郵件時優(yōu)先選擇本機房的訪問控制層。
(2)根據(jù)數(shù)據(jù)層的部署規(guī)模,配置每個中心的訪問權(quán)重,每次存信根據(jù)權(quán)重計算選擇合適的數(shù)據(jù)層節(jié)點。
(1)接入層:
當某個接入節(jié)點故障不可用時,將該節(jié)點的入口IP從DNS 列表移除,并調(diào)整智能DNS 策略[6],把訪問分流到其他節(jié)點。
(2)控制層:
當接入層某個節(jié)點不可用時,需要運維介入手動調(diào)整該節(jié)點的服務(wù)狀態(tài),并調(diào)整接入層的訪問策略。用戶入口層同步接收到信息后,根據(jù)策略選擇其他控制節(jié)點提供服務(wù)。
(3)數(shù)據(jù)層:
(1)當某個數(shù)據(jù)中心出現(xiàn)故障[7],運維手動設(shè)置該節(jié)點暫停使用,入信保存郵件時,控制訪問中心會根據(jù)狀態(tài)跳過故障節(jié)點,選擇正常的數(shù)據(jù)中心存儲郵件;
(2)當某個節(jié)點入信保存郵件失敗時,訪問控制層可根據(jù)規(guī)則選擇下一個存儲中心保存郵件,直到成功為止;
(3)存儲中心內(nèi)部實現(xiàn)多副本保存冗余機制,保證一份數(shù)據(jù)損壞后還可正常訪問,并進行數(shù)據(jù)修復。
多中心部署是指將應(yīng)用系統(tǒng)部署在不同的地理區(qū)域的數(shù)據(jù)中心,并構(gòu)建多個獨立的副本,讓用戶可以就近地訪問最合適的數(shù)據(jù)中心。這種部署方式能夠提高應(yīng)用系統(tǒng)的可用性和可靠性,減少延遲時間,提升用戶體驗。
對比結(jié)果主要包括以下幾個方面:
(1)延遲時間:多中心部署前后,用戶請求的響應(yīng)時間可能會有所改變。在單一數(shù)據(jù)中心部署時,用戶請求需要到達數(shù)據(jù)中心后才能得到響應(yīng);而在多中心部署時,用戶可以就近訪問數(shù)據(jù)中心,使得響應(yīng)時間更快。部署前后對比結(jié)果如圖6 所示。
圖6 多中心部署前后對比數(shù)據(jù)
(2)可用性:多中心部署能夠提高應(yīng)用系統(tǒng)的容錯能力和可用性。如果某個數(shù)據(jù)中心出現(xiàn)故障,其他數(shù)據(jù)中心可以接管處理該數(shù)據(jù)中心的請求,從而降低系統(tǒng)宕機風險。部署多中心后CPU 使用情況如圖7 所示,部署多種后平均事務(wù)相應(yīng)時間如圖8 所示。
圖7 系統(tǒng)CPU、內(nèi)存使用情況
圖8 平均事務(wù)相應(yīng)時間
如上所述,采用多中心雙活架構(gòu),對郵件系統(tǒng)的可用性和穩(wěn)定性有很大的提升。分層架構(gòu)的設(shè)計和應(yīng)用層的故障轉(zhuǎn)移和自動容錯技術(shù),使得系統(tǒng)更加健壯和可靠。通過優(yōu)化策略和測試驗證,系統(tǒng)的性能和可用性得到了有效的提升。