老闆急著要的重要合約,卡在郵件匣裡動彈不得;客戶傳來的緊急通知,明明寄出了,你的信箱卻空空如也。這些心驚膽跳的郵件系統狀況,在分秒必爭的商業世界裡,都可能造成難以估計的損失與焦慮。
在 Synology,1,500 名員工每天處理超過 17 萬封郵件,全都仰賴自家的 MailPlus 系統。正因為我們自己就是最重度的使用者,所以比任何人都清楚,一套穩定可靠的郵件系統有多麽重要。
我們密切監控 MailPlus 運行時間,確保能達到商業環境所要求的可靠性。長期下來,MailPlus 服務正常運行時間(Uptime)穩定維持在 99.99%。這數字代表什麼呢?一般常見的服務等級協定(SLA)要求是 99.9%,意味著每個月允許長達 43 分鐘的停機時間;而 99.99% 則是將停機時間,大幅壓縮到每月僅約 4 分鐘,相當於每週連 1 分鐘都不到。
能達到這樣的成果,可歸功於開發團隊在工程設計上的堅持,特別是我們親自研發的 MailPlus 高可用性(High Availability, HA)架構。有別於傳統「一主一備」(Active-Passive)的備援模式,MailPlus HA 採用「雙主機」(Active-Active)架構。這代表兩台伺服器會同時上線、分工合作,當管理員需要更新或維護其中一台伺服器時,另一台就能無縫接手所有工作,確保服務不中斷,大幅減少計畫性與非預期的停機時間。
不過,要讓兩台郵件伺服器的資料完美同步,遠比單純的「複製貼上」複雜得多,MailPlus 的高可用性機制之所以能順暢運行,背後其實藏著許多開發團隊的精巧設計。
為每個使用者打造獨立目錄,確保伺服器間資料一致
想像一下,郵件伺服器每天都會有新的郵件湧入,加上使用者讀取、移動、刪除信件等操作,整個資料庫隨時都在變動。開發團隊的第一個挑戰,就是要設計出一套既有效率又精準的同步引擎,即時捕捉每一個細微變化。
要做到這件事情,許多系統會將所有使用者的資料,儲存在一個龐大的中央資料庫裡。這種作法雖然方便管理,卻也埋下一顆不定時炸彈:一旦資料庫毀損或出錯,所有人都會遭殃,後續的復原與除錯更是耗時費力。
因此,MailPlus 選擇一條不同的路,不倚賴單一巨型資料庫,而是為每位使用者的郵件資料和設定,都建立一個專屬的目錄。雖然中繼資料(Metadata)仍會被集中索引,但核心的信件檔案與個人設定是完全獨立存放的。
這個架構會帶來兩大好處:
- 限制災情範圍:當單一使用者的信箱不幸損毀或同步發生問題,災情不會擴散,其他人的服務也不受影響。
- 精確同步:單一使用者的資料變動時,系統只需要同步該使用者的資料夾,無須傳輸整個郵件儲存空間。當公司人數和信件量不斷成長時,這種同步方式會精準又有效率,更確保系統保持流暢。
以「待辦清單」確保同步順序
再來,開發團隊為了進一步提升同步效能和準確性,採用更為動態的任務導向追蹤模式:MailPlus HA 不會傻傻地即時複製所有原始資料,而是將每個變更記錄下來,排成一份「待辦事項清單」,判斷優先順序後再同步。
舉例來說,「收到一封新信件」、「把信件移到封存郵件匣」、「刪除整個資料夾」,這些操作都會被記錄成一個個獨立任務。兩台伺服器會嚴格按照任務的先後順序來執行,並在完成一項後互相確認,才會接著處理下一項。
這個設計也能化解同步衝突。例如當網路暫時中斷,導致使用者同時對兩台伺服器下達指令,這時就可能發生衝突,像是同一封信被移動到兩個不同的資料夾。這種情況下,MailPlus 會依照時間戳記和任務順序的組合,來判斷哪個指令應該優先執行,確保最終結果的正確性。
從「腦裂」中自我修復:當兩台伺服器失聯時,如何避免資料災難?
然而,高可用性架構也存有一些同步上的挑戰,其中「腦裂」(Split-Brain)正是令 IT 聞之色變的惡夢:當兩台伺服器間的連線中斷,但它們都還在正常運作時,會因為偵測不到彼此,而誤以為對方已經當機,於是雙雙搶佔主要伺服器的角色,獨立接收新信件並處理使用者操作。當連線恢復時,如果伺服器之間的資料兜不攏,會導致不可逆的資料遺失。
傳統上,防止腦裂最常見的做法是導入外部機制,例如找來一台第三方仲裁伺服器(Witness Server),或是透過票選機制(Quorum),決定誰才是主要角色。這些方法雖然有效,卻也增加架構的複雜度,並引入潛在問題,萬一仲裁者自己當機了呢?
MailPlus 的作法,是在預防措施之上,再疊加一層衝突解決機制。與其完全依賴外部仲裁,不如打造一個能「自我療癒」的系統。因此我們的系統內建智慧邏輯,它偵測到不一致時,能主動協調雙方的資料,即使預防措施失效,資料依舊安然無恙。
智慧化合併,確保每筆資料都完整
具體來說,MailPlus 是採用雙向協調機制,即使發生腦裂也能安全解決資料衝突:
- 自動分配角色:早在設定 MailPlus HA 的當下,系統就已經明確定義兩台伺服器誰是「主要」、誰是「次要」角色。雖然兩台伺服器都會處理郵件收發,但只有主要伺服器能變更系統設定。萬一連線中斷,次要伺服器會繼續收發信件,但系統設定會進入唯讀模式。當連線恢復時,系統即會自動重新指派原先設定好的主從角色。
- 比對差異,而非覆寫:伺服器間的連線復原後,系統不會直接用其中一台伺服器資料去覆寫另一台,而是會仔細比對差異,檢查雙方在這段時間各自多了哪些變更,例如誰收到新信件、誰刪了舊信件。
- 智慧化資料合併:最後,系統會小心翼翼地合併這些差異,合併時以「保留有效的使用者資料」為最高原則。舉例來說,如果 A 伺服器上記錄某封信被刪除,但 B 伺服器上記錄使用者有回覆那封信,系統會選擇保留回覆。同樣地,如果在斷線期間,兩台伺服器都各自收到新信件,那麼兩邊收到的信件都會保留下來,確保沒有任何一筆寶貴的資料遺失。
當你部署 MailPlus HA 時,你得到的不只是一台備援伺服器,而是一套擁有多層次保護、具備高度韌性的系統。從精準即時的同步機制,到自動化解腦裂危機的自我修復能力。這一切的設計,都是為了無需人為介入,郵件伺服器就能維持服務的持續性與資料的完整性。開發團隊的目標,是期盼使用者部署之後,就能高枕無憂。因為你知道,在看不到的地方,有一個強大又聰明的系統,正 24 小時全年無休地,守護著重要的數位資產。