英國衛報聯手 AWS:從 MongoDB 遷移到 PostgreSQL

收藏待读

英國衛報聯手 AWS:從 MongoDB 遷移到 PostgreSQL

為了獲得一個全託管的解決方案,英國衛報在 2018 年將 CMS 的數據存儲從一個自託管的 MongoDB 集群遷移到了 Amazon RDS 上的 PostgreSQL。團隊在沒有停機的情況下進行了基於 API 的遷移。

英國衛報的內部 CMS(名為 Composer)存儲着文章、博客內容、照片庫和視頻,它最初是以 MongoDB 為數據存儲構建的。在此之前,用的是一個後台是 Oracle 數據庫的供應商軟件。在這種設置下,每當必須遷移模式時,都需要停機時間。作為替代方案,團隊研究了各種 NoSQL 數據庫,選擇 MongoDB 的其中一個關鍵原因似乎是靈活性。MongoDB 最初託管在他們自己的數據中心裏,在一次宕機後,他們將其轉移到了 AWS 服務器上。安裝和管理腳本必須由衛報的團隊手寫。他們選擇了一項支持合同,併購買了 OpsManager 工具,這是一個管理 MongoDB 的前端應用程序。然而,不清楚因為什麼原因,該團隊沒有選擇 MongoDB Atlas 服務,這是一個「全託管的數據庫」。OpsManager 不管理部署。

在遷移到 AWS 之後,團隊遇到了兩次 MongoDB 宕機。其中一些原因是基本的系統管理問題,比如不允許 NTP 訪問時間服務器以保持時鐘同步。根據這篇文章,還有一些和 OpsManager 本身管理困難以及很難從供應商那裡獲得及時的支持有關。其團隊覺得,遷移到需要最少數據庫管理工作的解決方案最適合他們。

該團隊選擇 PostgreSQL 的原因是,作為 Amazon RDS 上的託管數據庫,它非常成熟,而且支持 jsonb 數據類型。Jsonb 類型允許對 JSON 對象中的字段進行索引。遷移計劃是在 Postgres 上編寫一個新的 API,並使用一個代理向這兩個 API 發送流量,使它們對於新傳入的數據保持同步。使用 API 遷移現有數據,然後將代理切換到新的 API。他們之前從 Oracle 遷移也是使用類似的方法完成的。為了跟蹤遷移過程,遷移腳本日誌被推送到 Elasticsearch。在此過程中,他們還改進了他們的結構化日誌。

代理實時地將所有流量定向到 MongoDB API,並異步地定向到 Postgres API。響應中的任何差異都會被記錄並分析。為了確保新的 API 和後端能夠支撐生產流量,他們運行 GoReplay 進程來生成流量。GoReplay 可以捕獲流量,並在不同的環境下進行回放——在本例中是預生產環境。他們在預生產環境上完成了完整的遷移過程。生產遷移的最後一步是將 DNS 名稱從代理的端點(一個 Amazon ELB)切換到 Postgres API(另一個 ELB)。這使得它們的客戶端可以在不做任何更改的情況下正常工作。遷移之後,他們的集成測試失敗了,因為他們沒有遷移到新的 API。

還有其他一些組織出於各種原因從 MongoDB 遷移到了 PostgreSQL。

查看英文原文: The Guardian』s Migration From MongoDB to PostgreSQL on Amazon RDS

原文 : InfoQ

相關閱讀

免责声明:本文内容来源于InfoQ,已注明原文出处和链接,文章观点不代表立场,如若侵犯到您的权益,或涉不实谣言,敬请向我们提出检举。