NoSQL資料庫是許多企業用來解決服務爆量需求的常用技術,像是開源記憶體資料庫Redis,可以利用記憶體建立分散式資料庫,來加快資料讀取的速度,是不少大型網路服務必用的工具之一,但萬一連Redis都爆量,該如何解決?這正是中國奇虎360基礎架構組遇到的考驗。
「當Redis容量越來越大時,會遇到問題,」360基礎架構組技術經理陳宗志坦言, 360內部採用Redis好幾年後,容量快速成長到50GB以上,竟產生了4大問題。
360是中國一家提供資安服務相關的網路公司,提供多項資安防禦的服務,另外還推出了搜尋引擎、購物平臺等多項業務,用來做為網路資訊快取的Redis資料庫的用量也隨業務而迅速成長。
因為Redis將資料儲存在記憶體中來加速,原本為了防止資料遺失,Redis還提供了2種機制,將資料從記憶體寫入硬碟中,來實現資料持久化,一種稱為RBD機制,也就是Redis會不定期根據使用者的設定,建立資料快照(Snapshot),來備份記憶體中的資料,另一種機制則是透過AOF(Append only file)的機制,將所有資料庫的變動寫入AOF文件中。
但是,陳宗志指出,問題就是資料量越來越大後,恢復資料所需的時間也會變長,根據360內部測試,「約50GB的Redis資料庫,恢復時間大約要70分鐘,」因為恢復資料時,Redis得將RBD和AOF兩種機制保存的內容回復到記憶體中,過程需要大量硬碟存取,也需要花時間重構數據結構,因此才需要這麼久的恢復時間。如何加速RBD和AOF的資料恢復速度,是360遇到的兩個Redis爆量難題。
第三的挑戰是來自Redis資料庫的叢集架構,Redis配置採取一主多從(單一主節點,搭配多臺從屬節點),但「主從節點間切換的代價大」,陳宗志解釋,Redis的備援設計中,當主資料庫無法使用時,則會自動選擇另一個節點來擔任新的主要資料庫,但是,在主從轉換的過程,所有從屬節點都需要與新的主節點重新建立連結,此時得全部重新傳輸的資料,這個問題直到2017年中釋出的 Redis 4.0版本,才解決,但也困擾了360很長一段時間。
最後一項爆量考驗是,Redis在大容量下也會產生緩衝區寫滿的問題,尤其一般企業多半只會設置約2GB的緩衝區,但是因為大型Redis資料庫產生的網路流量很大,緩衝區容易被資料堵死,而發生數據重傳的情況,陳宗志表示,數據重傳就會影響到用戶的查詢請求。
為了解決這些問題,擴充記憶體容量似乎是唯一的辦法,不過,陳宗志表示,記憶體成本昂貴,對沒有直接創造收益的基礎架構團隊來說,得想辦法為企業節省成本。
他指出,360目前內部使用的Redis實例(Instance)配置,可分為64GB和96GB兩種規格,一項業務通常就會需要用到一個Redis的Instance,大約需80GB的容量,執行實例底層的硬體成本每臺約3萬人民幣(約臺幣13萬元),但若每項業務都配置一套機器,對企業而言,投入成本很高。
因此,360開始思考如何在滿足業務的需求下,將成本降到最低,360基礎架構團隊找DBA人員,自行開發了一套解決大容量Redis的軟體稱為Pika,首要目標就是,Pika要完全相容Redis協議,一方面可以繼承Redis方便維運的設計,也能讓開發團隊不需要修改任何一行程式碼就能遷移資料庫,其次,不同於Redis的RBD和AOF的持久化儲存機制,Pika改將資料自動寫入固態硬碟,來解決Redis資料恢復太長的問題。Pika系統包括了4層,包括了網路模組Pink、Threading模組、儲存引擎nemo和日誌模組 binlog。
因為高速記憶體的價格時常波動而且相當昂貴,對採購作業而言是個頭痛的問題,而Pika採用固態硬碟作為儲存裝置,固態硬碟的成本比高速記憶體便宜許多,就能成功地降低NoSQL資料庫的整體建置成本,而且Pika還提供多種壓縮方式,可以進一步減量來節省儲存設備的空間。
雖然Pika因為將數據存在硬碟中,效能會差一點,但是,陳宗志表示,效能並不會差太多,360會將可以容忍這種效能差異的業務,先移轉到Pika上,也因此而減少了大量的記憶體成本。不過,若是業務成長快速,確實對效能的要求很高,Pika也提供能夠從Pika導回Redis的工具。
陳宗志舉例,360內部一開始先將消息推送服務遷移到Pika上,原本這項服務需要5套30GB資料量大小的Redis資料庫,運作時需要使用到300GB的記憶體用量,但遷移到Pika之後,只需要1套50G資料量大小的Pika, 藉助壓縮技術,占用的固態硬碟空間也只需要100GB。
後來,360還將數據分析服務從Redis遷移到Pika,這項分析服務剛上線時,只需要一個Redis Instance就能承載,但是推出不到一周,所用的Redis資料庫容量就暴增到40GB,不過,考量到數據分析服務不會有超大量的存取需求,因此,360很快地就像這項新服務遷移到Pika上,即使效能沒有Redis這麼好,但已經足夠滿足這項服務的需求。
from iThome 新聞 http://ift.tt/2COO5OA
沒有留言:
張貼留言