天天看點

遊戲分發市場打包OSS-UDF改造方案

遊戲分發市場打包OSS-UDF改造方案

ECS内網限流500M,打包叢集用8台ECS、合計4Gbps的帶寬峰值,在打包業務峰值時也不夠處理,繼續擴充ECS又會達到OSS的單使用者吞吐量上限,業務進一步擴充遇到瓶頸。

分發市場一般會對接上千個管道,一款爆款遊戲需要打上百個管道包,是以存儲量百倍提升,成本壓力較大。

OSS-UDF((User Defined Function))是OSS團隊針對存儲内容有輕量計算需求所提供的産品化解決方案。

UDF程式是一個運作在OSS伺服器端的使用者自定義的處理程式,OSS在收到使用者的UDF請求後,會轉發給使用者的UDF程式,對存儲内容進行諸如解壓、轉碼、圖像處理等處理,并在處理完成後将結果傳回給使用者。

使用UDF,必須按照OSS的UDF協定來開發UDF程式、并将UDF程式托管到OSS;包括UDF程式的規範、托管方法、用戶端調用規範。

1 以熟悉的程式設計語言開發好UDF程式,假設叫做BuildChannel,該程式需要監聽9000端口,能夠接收HTTP POST請求,内容是對一個原始的遊戲包做管道包打包操作(新型的管道包打包基本是在原始管道封包件後attatch一段管道資訊)

2 通過一個YAML格式的檔案,使用者配置OSS安裝必要的依賴,最終BuildChannel要能直接運作于Ubuntu 14.04。

3 注冊BuildChannel,後續控制台會開放标準注冊頁面和API,目前階段線下配置;

4 用戶端根據UDF協定調用,擷取管道YYY包的調用形式如下(其中jsonParaYYY是json組裝的YYY管道包必要資訊): 

GET http://bucketName.oss-cn-hangzhou.aliyuncs.com/game.apk?x-oss-process=udf/BuildChannel,jsonParaYYY

5 OSS接到調用,将UDF請求解析出來POST給UDF程式,處理完成後,OSS調用将直接傳回打好管道資訊的安裝包

UDF隻适合對單體資源對象做簡單處理的場景,因為UDF的調用時間包含在OSS調用的傳回時間内,如果需要較長時間(涉及複雜計算場景、批量資源)的調用不合适使用UDF。

絕大部分數量的遊戲包隻用存儲1份原始包、以及少量不能用UDF建構的管道包,存儲空間比起全部靜态打包的方式,縮減到1/N,極好替使用者節省了成本。可以有效減少打包伺服器ECS數量。