上一篇內容我們說到了?COS 企業(yè)業(yè)務上云的文章。本文將著重介紹如何盡可能的提高騰訊云對象存儲 COS 的可用性冷溶。
COS 提供了基于 HTTP/HTTPS 的上傳接口渐白,對于 UGC 的場景,客戶端直傳 COS 的用法十分普遍逞频。由于 COS 的存儲桶是分布在具體的某個地域纯衍,比如某個客戶的存儲桶位于上海園區(qū),但是其客戶遍布全國各地乃至全球海外虏劲,偏遠地區(qū)以及跨國的訪問及其不穩(wěn)定托酸,如何在錯綜復雜的網絡環(huán)境下提高客戶端上傳文件的成功率成為讓客戶頭疼的問題,下面我們將帶著這個問題一步步去尋求答案柒巫。
一. 客戶端斷點續(xù)傳
客戶端的上傳內容一般分為圖片類的小文件以及視頻類的大文件励堡,騰訊云對象存儲 COS 提供了簡單上傳以及分塊上傳這兩種接口來上傳不同大小的文件。
對于小于1MB的圖片類小文件堡掏,直接使用簡單上傳接口即可应结。
對于大于1MB的視頻類大文件,使用分塊上傳接口把大文件切分為多個小的分塊來上傳(每個分塊大小為1MB - 5GB泉唁,最后一個分塊可以小于1MB)鹅龄。
我們知道,在網絡傳輸中分塊越小亭畜,那么傳輸成功率越高扮休,也方便對小的分塊進行快速重試。
分塊上傳文件拴鸵,分為以下3個步驟:
1. 初始化一個分塊上傳玷坠,服務端返回一個用于分塊上傳的UploadId蜗搔;
2. 并發(fā)上傳多個分塊文件;
3. 完成指定 UploadId 的分塊上傳八堡,合成一個完整的文件樟凄;
掃描 COS 的訪問日志,我們發(fā)現(xiàn)有不少用戶沒能以最優(yōu)雅的方式使用分塊上傳接口兄渺。分塊上傳方式上傳一個大文件時(分塊數(shù)最多10000個)缝龄,在其中某一個分塊上傳失敗之后,就立馬放棄掉這個文件挂谍,重新發(fā)起一個新的上傳任務叔壤,這樣浪費了大量的時間來進行重試,使得上傳的效率低下口叙。
COS 后端會永久保存一個未完成上傳的 UploadId(可以主動使用碎片清理接口來清理未完成的分塊上傳)百新,如果我們可以記錄下步驟1中的 UploadId,列出已經上傳的分塊庐扫,重新從斷點處進行續(xù)傳則可以大大提高上傳接口的可用性。
COS 提供了多種語言的 SDK 封裝好了對應的斷點續(xù)傳接口仗哨,在對應的 COS SDK 中找到高級上傳接口即可使用斷點續(xù)傳功能形庭。
二. 跨地域復制
COS最新推出的跨地域復制功能,可以在不同存儲區(qū)域的存儲桶中自動厌漂、異步地復制增量對象萨醒。利用此特性可以做到跨區(qū)域級別的容災、就近訪問提高可用性苇倡。隨著公司越來越多的業(yè)務出海富纸,如何提高跨國訪問的可用性成為業(yè)務的痛點,使用跨地域復制功能可以極大提升業(yè)務的可用性旨椒。
1晓褪、跨地域復制架構
開啟跨地域復制的兩個存儲桶必須提前打開版本控制功能,并且位于 COS 的不同區(qū)域综慎,COS 現(xiàn)在已經支持雙向以及一對多的同步配置涣仿。客戶對文件產生的所有增量操作示惊,包括刪除文件操作(開啟多版本的情況下刪除文件操作實際上是創(chuàng)建一個 0 字節(jié)的特殊 delete marker 文件)都會經由源桶通知 costrsf 模塊好港,任務入 CMQ 隊列成功之后則返回成功,后續(xù)由 costrsf 模塊異步的同步文件到目的存儲桶米罚,所有的元信息以及訪問控制信息 ACL 都會原封不動的同步到目的端钧汹,需要注意的是,目的端文件的版本號會和源文件的版本號也保持一致录择。源文件會維持一個 x-cos-replication-status 字段來保存跨地域復制任務的狀態(tài)拔莱,客戶可以通過 HEAD Object 接口來查詢文件的復制狀態(tài)碗降。
這里大家可能會有一個疑問,為什么跨地域復制必須提前打開版本控制功能辨宠。
我們設想一個非常常見的場景遗锣,如果源桶同時上傳了多個路徑相同的文件或者目的桶也在上傳同名文件,由于跨地域復制的任務是異步進行的嗤形,無法保證文件寫入的最終一致性精偿。由于源文件和目的文件的版本號是保持一致的,而且版本號是根據(jù)時間戳生成的赋兵,那么在索引側就是有序的笔咽,最終可以保證多個版本的文件都能按照正確的時序投遞到目的存儲桶。
2霹期、在COS控制臺上設置跨地域復制
控制臺支持一對一以及一對多的跨地域復制設置叶组。
進入控制臺在左側導航欄單擊【存儲桶列表】,然后選擇單擊需要配置跨地域復制的源存儲桶历造,進入存儲桶詳情界面甩十。
單擊左側的【高級配置】,進入存儲桶的高級配置頁吭产,向下找到【跨地域復制】管理項侣监,單擊【新增規(guī)則】進入跨地域復制規(guī)則配置狀態(tài)。
3臣淤、在SCF控制臺上設置跨地域復制回調
公司的游戲業(yè)務需要將游戲安裝包分發(fā)到海外的存儲桶橄霉,使用跨地域復制功能,可以就近上傳到廣州的存儲桶邑蒋,保證上傳的成功率和速度姓蜂,然后自動復制到海外的存儲桶中。如何通知到業(yè)務方安裝包已經成功同步到海外存儲桶医吊,首先想到的方案是通過查詢接口钱慢,不停的輪詢源文件x-cos-replication-status 狀態(tài),當 x-cos-replication-status=Complete 時遮咖,則可以認為文件同步成功滩字。
更為優(yōu)雅的方式則是當跨地域復制完成時,由 COS 發(fā)出回調消息到 SCF 觸發(fā)特定的業(yè)務邏輯來通知到業(yè)務方御吞。
三. 全球加速
1麦箍、全球加速原理
騰訊云對象存儲 COS 全球加速功能利用全局鏈路的自動測速功能,智能路由解析用戶請求陶珠,選擇最優(yōu)網絡訪問鏈路挟裂,實現(xiàn)請求的就近接入。
利用全球分布的云機房揍诽,幫助全球各地用戶快速訪問最近的接入層诀蓉,提升業(yè)務訪問成功率和穩(wěn)定性栗竖。
使用全球加速功能就近接入之后,客戶端到接入層的"加速"實際上是渠啤,由穩(wěn)定快速的內網專線網絡傳輸鏈路狐肢,來代替外網不穩(wěn)定的跨國或跨地域的訪問鏈路。
2沥曹、使用方式及加速效果
利用博瑞第三方測評工具份名,我們將 COS 的存儲桶設置在了上海園區(qū),使用COS的普通上傳域名以及加速上傳域名妓美,在全球各個撥測點進行1MB大小文件的上傳測試僵腺,從上圖我們可以明顯的看到亞洲、歐洲壶栋、美洲的上傳效果得到了顯著的提升辰如。對于中國本土的上傳提升效果,我們將使用加速效果已經得到某個客戶認可的某款 APP 的實測數(shù)據(jù)來進行展示贵试。
上圖是某客戶 UGC APP 采樣了中國西北地區(qū)的普通域名和加速域名上傳接口的成功率數(shù)據(jù)琉兜,我們可以清晰的看到新疆、西藏毙玻、內蒙古等地的上傳成功率都維持在99%之上呕童,西北地區(qū)的上傳成功率平均提高了2%~3%∠海客戶反饋,APP 端上的整體成功率由97%提升到了99.5%奸汇,顯著的加速效果施符,讓我們得到了客戶的認可。
目前 COS 全球加速功能暫時處于產品公測期擂找,如果您需要使用戳吝,可提交內測申請。相比于跨地域復制贯涎,用戶不需要支付跨地域存儲桶的存儲費用听哭,也不需要維護額外的邏輯去通知業(yè)務方復制任務的成功。只需要在 SDK 中按照以下方式改變 endpoint 即可:
# appid 已在配置中移除,請在參數(shù) Bucket 中帶上 appid塘雳。Bucket 由 BucketName-APPID 組成#1.設置用戶配置,包括 secretId陆盘,secretKey 以及 Regionsecret_id='COS_SECRETID'# 替換為用戶的 secretIdsecret_key='COS_SECRETKEY'# 替換為用戶的 secretKeyregion='ap-beijing'# 替換為用戶的 Regionendpoint='cos.accelerate.myqcloud.com'# 替換為加速域名的 endpointconfig=CosConfig(Region=region,Endpoint=endpoint,SecretId=secret_id,SecretKey=secret_key)#2.獲取客戶端對象client=CosS3Client(config)
四. 總結
COS 提供了多種擴展功能來提高用戶的可用性,如果上傳點比較固定或者希望同時具備異地容災以及就近訪問的功能败明,可以選擇跨地域復制功能隘马,如果不希望支付額外的存儲費用來提高 UGC 場景下的上傳成功率,那么可以選擇 COS 全球加速妻顶。