「玩轉騰訊雲」有獎徵文活動正在如火如荼進行當中,不時有優秀的做品出現,本文是對其中一篇的摘錄。當前熱門的各大垂直類社區,feed流家常便飯,漸漸爲用戶所接納,可是想要實現這樣的社區功能卻面臨着諸多問題,本期將由雲+社區專欄做者,騰訊高級後臺開發netkiddy教你們基於騰訊雲COS+CI+MPS等服務,解決社區功能中的圖文音視頻方案!
從早期的門戶網站,到後面的feeds流,再到現在的各類垂直行業的社區分享,一次次的變動成就了近幾年行業中的領跑者。微博,手百、小紅書、陌陌、B站等,均可以看到feeds流和社區的影子。其中的原始素材即是基礎的圖片、音頻和視頻等。前端
本文將主要介紹如何經過騰訊雲下的對象存儲COS,數據萬象CI,視頻處理MPS、CMQ和CDN等服務來一招解決社區功能中的圖文音視頻方案。java
在介紹方案以前,咱們須要先進行分析:當咱們須要作feeds和社區的時候,針對這些原始素材會遇到哪些典型的問題:linux
從類型來看,在作當前的社區功能或者feeds流時,主要涉及到的仍是在文本、圖片、音頻和視頻這四類素材,固然在產品角度,這四類基本素材是能夠相互結合的,如圖文、多圖、文本+視頻等等組合形式。所以,咱們須要對這些基本素材有支持存儲、讀取的功能等等。ios
從數據安全角度,素材分公有和私有,排列組合下來也就是須要有:公有讀+公有寫,公有讀+私有寫,私有讀+公有寫和私有讀+私有寫。私有讀公+有寫顯然是沒有該場景的,因此咱們只須要支持:公有讀+私有寫,公有讀+公有寫和私有讀+私有寫這三種讀寫操做。小程序
從數據存儲量角度,不管咱們預估本身的產品會到什麼量級,在後端架構設計上,存儲是必定要作到能夠水平擴展的,否則就是一個不合格的高可用產品,所以咱們的素材在作存儲方案時,也須要考慮到存儲的擴展能力。後端
從性能角度來看,不管是feeds流或社區產品,這些都是ToC類產品,必定是須要高qps的,也就是咱們確定是須要CDN相關能力支持的。安全
從版權角度,如防盜鏈功能,能夠防止不良網站盜用開發者的圖片連接,盜取圖片流量,給開發者帶來經濟損失;同時用戶也會須要有對圖片作一些水印保護的需求等等。性能優化
從用戶體驗來看,更快的打開一個頁面其實很重要,而如今全部的圖片和視頻都是高清、720P起步,那麼咱們就須要知足不一樣帶寬下的不一樣分辨率視頻流切換,同時對於圖片或者視頻封面圖等,都是須要作預覽功能,這樣才能夠顯著提高頁面加載速度和改善用戶體驗。網絡
從安全合規角度,也就是鑑黃、涉政等能力,在互聯網行業諸如這幾天愛奇藝剛出來的ghs事件影響很是之大,這種事在國內是絕對須要杜絕的,不然會帶來毀滅性的打擊。架構
其實上面列出的這些待解決的問題還不是包括所有的,可是僅這些功能若是所有作出來的話就須要巨資打造一個上百人的團隊花費上半年的時間(可能還bug不斷,功能不止)。巨資還好,由於互聯網行業最重要不是錢,可是時間,倒是致命的。
所以,雲服務就此出現,騰訊雲的誕生就是爲互聯網創業團隊或者公司去解決這些棘手的問題,從而專一業務自己,下面咱們就基於騰訊雲解決方案來逐一化解上述的一個個問題。
COS,對象存儲(Cloud Object Storage,COS)是由騰訊雲推出的無目錄層次結構、無數據格式限制,可容納海量數據且支持 HTTP/HTTPS 協議訪問的分佈式存儲服務。
不管對於文本類文件、抑或是圖片、音頻和視頻文件,都是能夠存儲於COS中。因此對於上面的第一個問題,經過COS已經能夠完美解決。
再來看COS生態,從當下來看,COS的讀寫支持已經到了十分變態的地步了,各類開發語言的API且不說,從js、java、go到ios、安卓和小程序等數十種SDK(更多詳細能夠在COS的SDK支持[1]),同時也支持了大量的客戶端工具(更多詳細能夠在COS的客戶端工具支持[2]),甚至當前的CosBrowser工具都已經在linux下能夠界面化使用了,以下圖。
COSBrowser可視化界面工具支持
咱們這裏不會詳細的介紹SDK的使用方式,也不會對這些工具作開箱介紹,更多的是從解決方案的支持角度來說解。因此具體的使用你們去文末的參考連接裏詳細查看就有分寸了。
針對上文提到的第二個問題。首先,COS的存儲是使用狀態無關的分桶(下稱bucket)機制,而針對於不一樣的bucket有不一樣的訪問權限級別,在COS中支持的訪問權限共三種:私有讀寫、公有讀私有寫和公有讀寫。
也就是說,在COS之下咱們經過對bucket設置不一樣的權限,再將不一樣訪問權限的文件存儲於不一樣bucket之下,就能夠完美的實現對訪問素材的不一樣權限管理,以下圖。
不一樣訪問級別的分桶展現
同時,騰訊雲 COS 的存儲桶空間無容量上限,無需分區管理,這就是說明對於上文提到的第三個關於數據量問題,咱們經過一個COS的bucket就能夠解決了。
不過,通常咱們對於數據存儲量和訪問的qps老是同時考慮的。在COS中,單bucket的訪問qps是有必定限制的,從當下來看,單bucket有30000/s的讀寫性能,基本上在前期使用是徹底OK的,具體能夠參看請求速率與性能優化[3]。
若是須要考慮更高的性能場景,能夠在業務層作一下一致性哈希,負載均衡的將數據存放到不一樣的bucket,如公有數據能夠存放到demo-public-1,demo-public-2,demo-public-N等等,從而將存儲的qps能力能夠水平擴展。
介紹完基礎讀寫能力後,咱們繼續來看一些增值能力的支持。在問題5中,咱們提到了圖片的版權問題,這也是當下社區產品必須支持的一個基礎功能了。這時候,就須要引入騰訊雲的第二套產品,數據萬象了。
數據萬象(Cloud Infinite,CI),是騰訊云爲客戶提供的專業一體化的圖片解決方案,涵蓋圖片上傳、下載、存儲、處理、識別等功能,將 QQ 空間相冊積累的十年圖片服務運做經驗開放給開發者。
目前數據萬象提供圖片縮放、裁剪、水印、轉碼、內容審覈等多種功能,提供高效準確的圖像識別及處理服務,減小人力投入,真正地實現人工智能。
看完上面這段介紹,基本上CI的能力你們都知道了,這些功能極大的解放了咱們的研發能力,而更關鍵的是實用角度的便利性。當下CI和COS早就已經完美打通,咱們只須要前往CI控制檯下,經過預設權限,即可以在CI下直接綁定COS的bucket,而這些操做也十分方便,所有都是點點就能夠完成,以下圖。
CI綁定COS的bucket
CI到COS的權限打通
一旦咱們綁定完成後,再來看看CI的能力。其實CI的功能很是強大,基本的圖片處理如縮放、裁剪,增值操做如水印能力,內容鑑別能力等等。
騰訊雲CI推出的防盜鏈功能,經過 HTTP 協議支持的 Referer 機制來進行相應的來源識別和管理,以下圖所示,支持設置網站爲黑名單或白名單,Referer 名單也支持多個域名。回車換行,一行輸入一個,同時支持通配符。同時在開啓防盜鏈設置後,可根據策略限定服務來源。
CI防盜鏈設置
再來看水印能力,CI同時支持可見水印和盲水印能力。首先咱們來講一說這兩種場景。
可見水印,就是咱們社區圖片中常見的場景了,CI支持了文本水印和圖片水印的能力,文本水印比較好理解,就是文本上浮現用戶ID,從而能夠標明全部權。而圖片水印,能夠理解爲是圖片上覆蓋另外一個圖片,在當下美圖等產品中使用不少。
盲水印功能,經過該功能,可將水印圖以不可見的形式添加到原圖信息中,並不會對原圖質量產生太大影響。在圖片被盜取後,可對疑似被盜取的資源進行盲水印提取,驗證圖片歸屬。CI提供的盲水印功能擁有半盲、全盲和文字盲水印三種類型。
功能介紹完畢,咱們再來看CI+COS的結合所給開發者帶來的解放是什麼樣的,簡單看下面兩張圖片和對應的url:
分別對應的url:
http://examples-1251000004.co...
http://examples-1251000004.co...
首先,咱們來看兩張圖,視覺上看到的是,前者是原圖,後者是加了水印的圖片。而從域名角度,咱們會發現二者依然是COS的域名,且url path的前面都是同樣的。這說明了後面的?watermark這一參數實現了水印能力,也就是說,只要打通了CI和COS以後,代碼無需任何改動,只須要根據產品邏輯拼接參數便可實現各類水印需求!這絕對是方便了咱們的研發的不少時間,具體的水印參數拼接邏輯[4]能夠查看參考。
一樣的道理,咱們再來看CI的圖片縮放能力[5],咱們繼續給出下面兩個url:
圖片分別對應的url:
http://examples-1251000004.co...
http://examples-1251000004.co...
原圖仍是上面的圖片,而下面的縮略圖也同樣只須要經過?imageMogr2參數來實現便可。
這個功能的意義是什麼呢?咱們前端APP或者頁面在不少場景都須要展現圖片列表,這時候須要很快速的拉取一個個圖片,若是採用原圖,圖片質量太高,文件過大,會致使加載速度很慢,而若是隻拉取縮略圖列表,能夠大大的下降了帶寬,同時又提升了APP或者頁面加載速度。
固然了,CI的能力強大的遠不止這些,仍是建議你們多去看看、用用,必定能夠極大的提高你們的研發效率。
從快手抖音開始,視頻流已經不是新鮮事了,而前幾天老羅也加入了直播帶貨,直接讓直播行業進入了另外一個維度。下面咱們先來看一下騰訊雲官網對於視頻處理的介紹。
視頻處理(Media Processing Service,MPS)是針對海量多媒體數據,提供的雲端轉碼和音視頻處理服務。您能夠按需將雲存儲中的視頻文件轉碼爲適合在 OTT、PC 或移動端播放的格式,知足您在各種平臺將視頻文件轉爲不一樣碼率和分辨率的需求。此外,還爲您提供了疊加水印、視頻截圖、智能封面、智能編輯等視頻處理服務。
和前文提到的CI同樣,MPS和COS也是徹底打通,在開通的過程,咱們一樣須要走一個受權的流程,以下圖。不得不說,騰訊雲的角色管理架構設計的仍是很是好的。
MPS到COS的權限打通
在MPS中,經過配置工做流的方式,能夠直接將存儲於COS的bucket中某一目錄下的視頻,進行各類花式操做。
下面用轉碼舉例,在下面的配置中,咱們將demo-public桶下的/video/目錄下的全部文件,轉碼爲480P並存放於/video/480/目錄下。
MPS工做流配置
當下MPS的視頻轉碼支持數十種樣式可選,同時MPS還支持了截圖,轉動圖,審覈等等功能。
其中截圖功能,就能夠完美的自動支持視頻的預覽圖方案,能夠經過配置一個截圖工做流來完成對視頻的自動截取,從而咱們能夠將視頻中某個時間點的圖片做爲封面圖。而審覈功能則能夠開始涉黃,涉政等審覈能力,這也是當下社區所必備的基礎能力了。
下面展現了這三種工做流的配置方式,而在輸出路徑這一項,咱們能夠預置目標文件名的格式,這樣極大的方便了前端同窗對於諸如視頻封面圖的獲取(甚至經過默認封面圖+拼接名稱可讓後端同窗0代碼改動就能夠支持到產品角度視頻封面圖的功能)。
MPS更過工做流配置
對了,MPS當下只會對bucket中增量數據進行處理,也就是隻有在任務流配置完以後的新存入到COS的bucket中指定目錄的文件,纔會被處理。固然,其實這也是合理的操做,畢竟萬一存量視頻有幾百上千,這麼一配置,不就虧本了麼。
有的同窗可能會問,那這個轉碼須要多久,我怎麼知道結果呢?細心的同窗可能已經看到,在上面的工做流配置截圖中有個【開啓事件通知的選項】。是的,MPS的轉碼完成事件,已經打通到騰訊雲的CMQ消息隊列!
咱們只須要在CMQ中配置topic,並在業務代碼中訂閱該topic,那麼當轉碼任務完成後,就能夠收到該事件通知了。
MPS事件通知
最後一部分,咱們要說的就是CDN了, CDN的功能其實不用多說,經過將站點內容發佈至遍及全國的海量加速節點,使其用戶可就近獲取所需內容,避免網絡擁堵、地域、運營商等因素帶來的訪問延遲問題,有效提高下載速度、下降響應時間,提供流暢的用戶體驗。
從解決方案的角度來講,其實很簡單,前文提到的諸如COS、CI或者MPS等的數據早已經和騰訊雲 CDN打通了。只須要經過簡單的配置就能夠完成CDN加速了,以下圖所示:
COS的CDN加速配置
經過前文的這些介紹,我想你們基本上對於如何使用騰訊雲中的諸如對象存儲、數據萬象、視頻處理、CMQ和CDN等這些服務來構建基礎的社區或feeds流的能力已經有所瞭解,趕快動起手來去試試吧。
參考資料:
[1]COS的SDK支持:
https://cloud.tencent.com/document/product/436/6474?from=10680
[2]COS的客戶端工具支持:
https://cloud.tencent.com/document/product/436/6242?from=10680
[3]請求速率與性能優化:
https://cloud.tencent.com/document/product/436/13653?from=10680
[4] 水印參數拼接邏輯:
https://cloud.tencent.com/document/product/460/6951?from=10680
[5]圖片縮放能力:
https://cloud.tencent.com/document/product/460/36540?from=10680