618 Tech Talk|400%存儲容量增長背後的成長之路

雲妹導讀:

2020 年的京東 618 大促期間,京東智聯雲對象存儲容量新增同比增長400%,流量同比上漲200%,對象存儲服務穩定,完美完成了大促重保任務,爲此次京東 618 大促累計下單金額超2692億元的新紀錄提供了堅實的保障。

我的系統現在運行的挺好的,遷移到雲上需要花費一定的人力還會帶來一定的風險,我爲什麼要遷移到雲上面呢?

這是京東在推動集團各個業務“上雲”時總會被問到的一個問題。相信,這也是很多企業在選擇業務遷移“上雲”時不斷問自己的一個問題。

經過17年的發展,京東618不斷跨上一個個新的臺階,而海量用戶的瀏覽和海量訂單的產生和交付,對後端的支撐系統提出了極高的要求。京東智聯雲作爲作爲支撐京東618的重要技術中臺,要面臨數百億訪問流量、每秒數百萬次的高併發請求,以及數十億的實時消息推送,保證全天核心服務不降級、無重大事故,這一切都對京東智聯雲帶來了極大的挑戰。

對象存儲作爲京東智聯雲重要的產品之一,在這次618中也起到了及其重要的作用。作爲在線服務,京東智聯雲對象存儲不僅爲視頻、直播等重要數據等存儲和下載提供服務支持,同時也爲離線計算平臺提供存儲支持,可以說是京東618大促的核心依賴,對象存儲的穩定性極大的影響了顧客618“買買買”的體驗,必須保證萬無一失。

 

資源彈性伸縮

彈性伸縮的核心需求是在資源池裏面有足夠的資源來滿足業務的增長,在傳統IDC時代,客戶都會規劃好業務的最大增量,留下足夠的buffer資源來應對它,三倍的業務增長至少需要預留200%的buffer。

雲上的對象存儲是一個多租戶系統,彈性伸縮本質上做的事情就是把多個用戶的buffer統一的管理起來,然後按需分配給需要的客戶。

在傳統的IDC時代,京東視頻存儲在內部的分佈式存儲系統中,每次大促都需要提前兩個多月開始備戰。

下面是一個使用傳統IDC時代618前夕準備的Checklist:

但在使用對象存儲之後,基於對象存儲彈性擴展到特性,整個備戰過程變得非常簡單:

成本降低

很多企業在把本地到存儲遷移到雲上之後,都會感嘆一件事情,在排除運維相關的人力成本之外,使用雲還是比自己維護一套存儲系統成本更低。接下來我們來看看爲什麼使用雲上對象存儲時客戶的成本會降低?

架構優化提高資源利用率

首先,在使用雲對象存儲系統之前,很多用戶使用類似Ceph之類的系統來存儲自己的數據,這類系統有一個問題就是,如果整體使用率超過了80%可能會導致部分的寫入失敗或者寫入性能降低,在實際維護的過程中,需要維護較低的水位線。

雲對象存儲系統基於自研存儲系統,在整體使用率接近95%的時候還能保證寫入的可用性和性能。

更合理的機型降低物理存儲成本

在傳統的IDC時代,業務自己維護自己的存儲系統,由於本身存儲需求相對不大,存儲成本在整體成本中佔比較小,一般不大會有太大的動力去優化存儲的成本,以下幾個情況會非常常見:

  1. 使用低密度服務器,由於存儲規模不足,爲了保證可靠性,必須使用更多的節點,這樣每個節點的存儲量就會很低

  2. 使用老舊的服務器,同樣由於規模的原因,很長時間都沒有擴容的需求,也就無需採購新的服務器,導致整體物理成本偏高

  3. 由於規模的原因,沒有動力去使用新技術/新硬件

和私有的存儲不同,對象存儲是一個快速發展的,大規模的存儲系統,5%的成本降低就能帶來非常可觀的收益,因此我們做了很多工作來降低成本。比如採用更合理的存儲機類型,根據客戶自己業務的特點,定製更合理的機型。

較低的閒置率

在使用雲對象存儲系統之前,爲了應對一些日常的促銷等,私有的存儲系統必須要維持足夠的Buffer,要應對一倍的流量突增必須維護一倍的Buffer,這決定了整個集羣的空閒率超過50%。

雲上的對象存儲是一個多租戶的系統,多個租戶會共用一個資源池子,由於多個租戶涉及到不同的行業,業務高峯衝突的概率較小,對象存儲系統不需要爲每個用戶留足夠的Buffer,假設最多10%的業務在同一時間流量業務增長一倍,對象存儲系統只需要維護10%的buffer就可以滿足需求,較大的降低了閒置率。

IO資源複用

IO資源更細的劃分的話,會包括存儲/IOPS/帶寬三個維度,每塊磁盤的存儲/IOPS/帶寬都是相對確定的,但是單個業務很難說同時把三種資源全部用掉。

對象存儲是一個多租戶的系統,通過後臺的調度,把不同類型的業務的混合的調度到磁盤上,保證這三個維度的IO資源能儘量的被使用。

京東有一個大數據分析的系統,本身只有數百TB的數據,但是在峯值會產生數百Gb的讀寫帶寬,在遷移到對象存儲之前,需要大量的機器來抗着數百Gb的峯值帶寬,導致存儲資源被大量浪費。在遷移到對象存儲後,由於對象存儲上有大量的相對較冷的數據,通過合理的調度,大數據分析系統複用了這些數據所對應的帶寬,節省了大量的成本。

運維成本降低

存儲系統本身是一個很複雜的系統,需要專業的運維人員來維護,而使用雲對象存儲之後,運維人員主要精力集中在業務上,可以極大的降低運維的人力

高可用性保證

儘管在過去兩年多裏面,京東零售和京東智聯雲有過多次成功的合作經驗,但是在商場視頻把本地數據刪除使用雲作爲唯一的數據之前,還是有一定的擔心,對象存儲現在是足夠高可用麼?對象存儲在未來一直是高可用的麼?接下來讓我們一起來探討下對象存儲在可用性保障上走的一些工作。


對象存儲架構圖

整體來說,對象存儲包括業務層(綠色部分),數據存儲(黃色部分),元數據存儲(藍色部分)三個部分組成,其中業務層是多節點無狀態服務,保證高可用。

數據存儲和元數據存儲都是有狀態服務,其中數據存儲存儲對象數據的切片,元數據存儲存儲對象名字到數據切片ID之間的映射。

對象存儲高可用核心思路如下:

  1. 基於Raft構建高可用的數據存儲和元數據存儲集羣,部署上都跨多個AZ部署

  2. 基於多個高可用數據/元數據集羣構建更高可用的Data/Meta服務,集羣級別故障對用戶影響可控

    1. 數據和元數據能寫入到任何一個可用的物理集羣,保證寫永遠可用

    2. 數據/元數據都不會修改,確保數據只要存在就能讀到正確的數據,提高讀讀可用性

    3. 多個集羣做藍綠部署,降低程序/人工操作的影響範圍

下面我們一一來揭祕對象存儲在各種異常情況下是如何保證高可用性。

Q

硬件故障

1、如果磁盤/機器/交換機故障怎麼辦

2、如果機房停電怎麼辦

A

對象存儲的數據和元數據都是三副本存儲,並且三副本放在三個不同的機房,確保以下:

1、如果有單節點(磁盤/機器/交換機/機房)故障,不會有任何影響

2、如果有兩個節點故障,可能會導致部分複製組不可寫入,對象存儲會通過多集羣的機制來解決這個問題,寫入會寫到其他的可用的集羣,不影響客戶端寫入

3、如果有超過三個節點故障,可能會導致部分數據暫時不可訪問,不影響用戶寫入

Q

網絡故障

1、對象的數據是放在多個機房,如果機房之間的光纖被挖斷了怎麼辦

2、如果某個機房和其他機房之間的網絡斷了,形成了孤島怎麼辦

3、對象存儲提供公網訪問,如果部分公網IP被攻擊/封禁怎麼辦

A

1、對象存儲數據和元數據都分佈在三個機房,如果有一個機房不可訪問,其他兩個機房可用形成多數派依舊可以提供服務

2、對於單機房和其他節點失聯,形成數據孤島的情況

  1. 已經寫入的數據在孤島機房內部有副本,可以讀取

  2. 孤島內部寫入

    i. 數據會寫入到WriteCache中,保證寫入成功

    ii. 元數據會寫入到孤島內部Backup Meta集羣中,元數據最終需要和孤島外部元數據合併

3、公網故障,通過域名解析把流量導到其他區域,走內網訪問

Q

SPOF

1、是否會出現少數幾個節點故障,導致整個對象存儲不可用

A

1、對象存儲數據和元數據服務都是基於多個集羣的,任意一個集羣的故障不會影響對象存儲的寫入

2、對象存儲數據/元數據不可修改,因此只要數據存在就是可以讀的,不存在某些Master類節點故障導致集羣不可讀

Q

誤操作

1、在日常運維過程中,是否會出現誤操作,導致對象存儲不可用

A

1、對象存儲數據和元數據都是由多個集羣組成,多個集羣做藍綠部署

2、任何時候操作只能在一個集羣上進行,確保任何錯誤影響的範圍是一個集羣,而不會影響整個對象存儲

Q

程序Bug

1、對象存儲在未來升級過程中,是否會引入新的Bug導致對象存儲不可用

A

1、從研發測試流程上,降低Bug概率

2、全量上線生產環境之前會在預發佈環境和灰的環境運行足夠的時間

3、生產環境遵循藍綠部署,一次只更新一個集羣,確保不會導致整個集羣不可用

多租戶隔離

部分業務在使用雲之前,會擔心兩個方面事情:

  1. 私密的數據被非授權的方案

  2. 其他用戶的操作會影響到自己的業務

對象存儲作爲一個多租戶的系統,對多租戶之間的數據和訪問都做了嚴格的隔離,確保不會發生數據泄露以及訪問互相影響等問題。

數據安全

在接入集團用戶的過程中,我們經常會被問到以下三個問題:

  1. 我們的業務數據是非常重要的,是否可能被其他用戶非授權訪問到?

  2. 我們的業務數據是非常重要的,但是我們的數據存儲在雲的磁盤上,員工是否會通過磁盤直接訪問或者篡改我們的數據?

  3. 如果有黑客黑進入了內網,是否能直接訪問磁盤或者內部系統來訪問我們的業務數據?

作爲一個面向企業用戶的存儲系統,數據安全是對象存儲的最基礎的需求之一,因此,我們的對象存儲也會從多個方面來保障用戶的數據安全。

用戶數據可能從兩個地方被訪問:

  1. 通過對象存儲提供的接口訪問,對於此類訪問,對象存儲提供嚴格的認證鑑權機制,以及審計機制,保證用戶的訪問一定被授權,非授權的訪問一定會被發現

  2. 直接從磁盤訪問,對於此類問題,對象存儲提供完整的加密體系,保證數據無法被訪問

認證授權

京東智聯雲對象存儲實現了面向請求公鑰私鑰的認證體系,用戶的私鑰只有用戶自己知道,可以做到類似一次請求一個密碼的功能,保證的用戶身份無法被僞造。

同時,支持豐富的授權機制,可以通過時間,訪問IP等多個維度對請求授權,進一步保障了用戶數據對安全。

加密體系

京東智聯雲對象存儲支持客戶端和服務端兩個方面對加密。

客戶端加密是指客戶在上傳數據到雲上之前提前對數據做加密,客戶自己維護加密密鑰,我們是無法通過任何方式獲取到用戶的原始數據。

服務端加密是基於託管KMS的加密方式,對象存儲對每個對象生成唯一的密鑰,並且使用AES256對該對象加密,之後存儲用KMS加密後的密鑰而拋棄密鑰原文,這樣從對象存儲本身沒有任何辦法來解密該對象。

KM服務本身使用了符合國家規範的硬件安全模塊(HSM)保護您的密鑰的機密性和完整性,您的純文本密鑰不會以任何形式存儲到任何存儲中,且該密鑰不會傳輸到KMS服務區域之外。

審計

對對象存儲/密鑰系統的每次訪問,對象存儲都會記錄下訪問的詳細信息,提供給用戶去發現預期外的訪問。

訪問隔離

作爲一個多租戶的系統,對象存儲有豐富的流控限速功能,並且對每個用戶/bucket生效,確保用戶之間不會互相影響。

今年618大促已經是對象存儲第五次支持京東零售大促了,這是一次例行的支持卻也是一個全新的起點。從本次618開始,京東視頻等重要數據放棄了在本地的備份,也就是說對象存儲成爲了這些業務的唯一存儲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章