使用MongoDB構(gòu)建任務(wù)關(guān)鍵型多數(shù)據(jù)中心應(yīng)用程序
作為全球 10 大零售品牌,在全球 190 個市場擁有 170 多萬活躍買家和 10 億個實時列表,eBay 無法承受系統(tǒng)停機(jī)。這就是為什么該公司依賴 MongoDB 作為其核心企業(yè)數(shù)據(jù)平臺標(biāo)準(zhǔn)之一,為運(yùn)行 ebay.com 的多個面向客戶的應(yīng)用程序提供支持。
在今年的 MongoDB World 大會上,eBay 的首席 NoSQL DBA 曲峰展示了適用于彈性應(yīng)用程序的實用設(shè)計模式——他的團(tuán)隊為支持企業(yè)級 MongoDB 部署而開發(fā)的一組架構(gòu)藍(lán)圖。
曲先生開始了他的會議,討論了這些年來可用性的概念是如何變化的。過去,站點為每周維護(hù)事件安排停機(jī)時間是可以接受的。隨著當(dāng)今服務(wù)的全球性,無論是用戶還是企業(yè),都不太接受!此外,大多數(shù)組織現(xiàn)在在商品硬件平臺上構(gòu)建他們的服務(wù),而不是過去異國情調(diào)的 Sun Solaris / Sparc 服務(wù)器。雖然商品硬件的成本要低得多,但它也經(jīng)常出現(xiàn)故障。這兩個因素從根本上改變了工程團(tuán)隊考慮可用性的方式,并促使 eBay 創(chuàng)建其“彈性設(shè)計模式”來制定數(shù)據(jù)庫最佳實踐,以最大限度地提高平均故障時間 (MTTF) 并最大限度地減少平均恢復(fù)時間 (MTTR)。
為了構(gòu)建他們的應(yīng)用程序,eBay 開發(fā)人員可以從五種企業(yè)批準(zhǔn)的數(shù)據(jù)庫標(biāo)準(zhǔn)中進(jìn)行選擇。除了 MongoDB,團(tuán)隊還可以選擇使用 Oracle 或 MySQL 關(guān)系數(shù)據(jù)庫,以及兩個 NoSQL 選項。曲先生的 DBA 團(tuán)隊提供有關(guān)選擇適當(dāng)數(shù)據(jù)庫的指導(dǎo),根據(jù)應(yīng)用程序的數(shù)據(jù)訪問模式、用戶負(fù)載、數(shù)據(jù)類型等來確定選擇。
eBay 目前運(yùn)行著 3,000 多個非關(guān)系型數(shù)據(jù)庫實例,支持一系列應(yīng)用程序,管理它們之間的數(shù) PB 數(shù)據(jù)。過去,Oracle 是記錄系統(tǒng),而非關(guān)系型數(shù)據(jù)庫處理“參與系統(tǒng)”中使用的瞬態(tài)數(shù)據(jù)。然而,非關(guān)系數(shù)據(jù)庫領(lǐng)域已經(jīng)成熟。通過一致的時間點備份和恢復(fù),MongoDB 現(xiàn)在還為 eBay 的記錄系統(tǒng)用例提供服務(wù)。
雖然 eBay 的所有非關(guān)系數(shù)據(jù)庫選擇都提供內(nèi)置的故障恢復(fù)能力,但它們做出了不同的設(shè)計權(quán)衡,可能會影響應(yīng)用程序行為。DBA 團(tuán)隊從六個維度評估這些差異:可用性、一致性、持久性、可恢復(fù)性、可擴(kuò)展性和性能。例如,那些使用點對點、無主設(shè)計的 NoSQL 數(shù)據(jù)庫具有昂貴的數(shù)據(jù)修復(fù)和重新平衡過程,必須在節(jié)點故障后啟動。此重新平衡過程會影響應(yīng)用程序吞吐量和延遲,并且會在客戶端等待恢復(fù)時導(dǎo)致連接堆疊,從而導(dǎo)致應(yīng)用程序停機(jī)。為了減輕這些影響,eBay 不得不在這些無主數(shù)據(jù)庫之上分層應(yīng)用程序級分片解決方案,該解決方案最初是為其 Oracle 資產(chǎn)開發(fā)的。這種方法使 DBA 團(tuán)隊能夠?qū)⑤^大的集群劃分為一系列子集群,從而將重新平衡開銷隔離到較小的節(jié)點集,僅影響查詢的一個子集。eBay DBA 團(tuán)隊正是針對這些不同類型的數(shù)據(jù)庫行為構(gòu)建了其彈性設(shè)計模式。
曲先生介紹了eBay標(biāo)準(zhǔn)的“MongoDB Resilience Design Pattern”,如下圖1所示。
圖 1:eBay 的 MongoDB 彈性架構(gòu)設(shè)計模式。(圖片由 eBay 的 MongoDB World 介紹提供)
在這種設(shè)計模式中,一個 7 節(jié)點的MongoDB 副本集分布在 eBay 的三個美國數(shù)據(jù)中心。這種模式確保在主數(shù)據(jù)中心發(fā)生故障時,數(shù)據(jù)庫集群可以通過在其余數(shù)據(jù)中心之間建立仲裁來保持可用性。可以為 MongoDB 的副本集成員分配選舉優(yōu)先級,以控制在主要失敗的情況下哪些次要成員被視為晉升的候選人。例如,如果主副本集成員失敗,則優(yōu)先選擇 DC1 本地的節(jié)點。只有當(dāng)整個 DC1 發(fā)生中斷時,才會考慮選擇 DC2 中的副本集成員,并根據(jù)哪個節(jié)點提交了最近的寫入操作來選擇新的主要成員。這種設(shè)計模式可以通過使用MongoDB 的多數(shù)寫入關(guān)注進(jìn)行擴(kuò)展 啟用跨數(shù)據(jù)中心持久寫入。
標(biāo)準(zhǔn) MongoDB 設(shè)計模式用作演示文稿中討論的 eBay“讀取密集/高可用讀取模式”的基礎(chǔ),該模式用于支持 eBay 產(chǎn)品目錄。對于目錄工作負(fù)載,MongoDB 副本集擴(kuò)展到 50 個成員,為讀取可擴(kuò)展性和彈性提供海量數(shù)據(jù)分布。
對于寫入密集型的工作負(fù)載,eBay 開發(fā)了“極高的讀/寫模式”,該模式在其美國數(shù)據(jù)中心分布了一個分片的 MongoDB 集群。
圖 2:MongoDB 極高讀/寫模式的 eBay 設(shè)計模式。(圖片由 eBay 的 MongoDB World 介紹提供)。
同樣,eBay 開發(fā)人員可以使用特定的 MongoDB 寫入和讀取問題來配置此設(shè)計模式,以調(diào)整最能滿足不同應(yīng)用程序需求的持久性和一致性級別。
曲先生指出,隨著最近產(chǎn)品的增強(qiáng),MongoDB 正在被部署以服務(wù)于更廣泛的應(yīng)用程序需求:
- 將區(qū)域分片添加到 MongoDB 3.4 現(xiàn)在使 eBay 能夠為需要跨多個數(shù)據(jù)中心的分布式、永遠(yuǎn)在線寫入可用性的應(yīng)用程序提供服務(wù)。
- 面向即將發(fā)布的 MongoDB 3.6 版本的可重試寫入將允許 eBay 減少應(yīng)用程序端異常處理代碼。