冗餘(Redundancy)是指為提昇系統的穩定性與可靠性,刻意配置重複的零件或機能。此動作主要是為避免單一環節失效,對系統的衝擊。簡單來說,就是「多做一點反而更安全」的防禦性思維。
在系統架構中,冗餘的機制常用來避免單點故障時,系統失效的情況。資訊系統中,常見的 Load Balancer 與備援機制,都是運用冗餘概念的作法。像是現代雲端架構中常見的 Multi-AZ (多可用區部署) 或是資料庫的 Replication (抄寫與讀寫分離),全都是為了容錯而建立的典型冗餘設計。

有時,為提升系統性能也會使用冗餘的方式。例如,電商為面對搶購活動,突如其來的巨量請求,在資訊系統的 Load Balancer 後方增加機器,以提高系統的負載量。

此外,除了硬體與架構上的冗餘,在軟體開發與測試流程中,我們也能看到冗餘的思想。使用 Behaviour-Driven Development, BDD 也是冗餘的應用之一,針對同一目的,使用不同作法的不同機能冗餘。
藉由 Specification By Example, SBE 的方式開發,讓軟體開發人員可以從 SBE、整合測試等,進行多方面的驗證軟體行為是否符合規格需求。
冗餘機制在確保穩定度與可靠性的同時,相對也會有些缺點與麻煩。
- 額外配置冗餘裝置的成本。
- 增加管理與監控的複雜性。
雖然大多時候,冗餘帶來的好處大於缺點,但在設計與使用時,需要權衡其優缺點,找出最適合當下環境的作法。
💡 互動時間 評估一下你們現在負責的產品,系統目前在哪個環節最缺乏冗餘設計呢?是單點資料庫、沒有備援的 API Gateway 還是某台沒人敢關機的老舊 Server?歡迎在下方留言分享你的架構痛點!
💬 留下你的想法
有問題、不同看法,或是你踩過類似的坑?歡迎留言討論,我會盡量回覆。