云上虚拟IDC(私有池)如何为客户业务的确定性、连续性保驾护航
簡介:?企業業務上云后,還面臨特定可用區購買云上特定計算產品實例失敗的困境?云上私有池pick一下
Why 云上業務為什么需要資源確定性、服務連續性
云計算正朝著像水電煤一樣的基礎設施演進,支持用戶按需使用、按量付費。目前,國內外各云服務商聯合生態伙伴,努力提升云產品服務的快速迭代、推廣使用,然而現實很骨感:用戶依然面臨偶發的在特定可用區購買云上特定計算產品實例失敗的困境。云服務的計算理念--隨時隨地彈性,怎么這個場景下就不Work了?我們來分析分析。
目前,客戶云上業務整個生命周期過程,需要感知算力的“商品化”載體:例如某客戶A,將個人博客的Web服務遷移到阿里云上時,需要購買阿里云彈性計算云服務器,客戶需要感知云服務器規格信息,如最新的ecs.g7.xlarge。例如某客戶B,將在線制作3D創意效果的業務部署在阿里云上,依托阿里云強大GPU等算力資源,此時,需要購買阿里云彈性計算的GPU云服務器,如ecs.gn7i-c8g1.2xlarge。
通俗理解:類似用戶向“酒店”租住一個“房間”。云上環境,用戶購買云上的一個具體的計算實例規格。
這與水電煤“即插即用”存在區別:云上的算力需要感知商品實例信息。水電煤是統一的‘用量’,屏蔽了后端的供貨商(哪個電網供電、哪條線路輸送)、供貨的生產設備(水力發電、火力發電、風能發電、太陽能發電等)。目前國內外頭部云服務供應商的算力服務售賣實體,主流依然是算力對應具體商品。由于面向具體商品,那么就存在商品之間服務特性、適合的業務場景、業務所需數量等差異。云服務供應商也就需要在不同地域提前準備好不同的商品,以及供應數量。
因為很難精準地預測各種具體算力商品的用戶量級、購買時間、購買數量,一旦出現行業熱點,同一行業的大多數客戶短時間大量購買某一個特性的商品,較容易出現針對特定商品的搶購而導致部分用戶購買失敗。典型如疫情背景下,挖礦、在線教育的興起,對本地盤、視頻編解碼算力需求旺盛,導致相關商品搶購現象突出。
通俗理解:類似“酒店”的剩余房間已經用完了,新客戶入住失敗。對應云環境,用戶在云上購買計算實例,短時庫存售磬,可能購買失敗。
另外,電商每年在不同時間段會有各種“節日”促銷活動,典型如618、雙11。在促銷期間和促銷結束的一段時間內,需要大量的算力資源支持在線活動和活動結束后的海量數據分析。客戶服務經歷“正常態”、“大促態”、“大促收尾態”、“正常態”這樣的典型服務連續過程??蛻魹榱舜_保全年服務的連續性,特別是資源需求按預期規劃確定進行,那么,云上資源確定性交付就是重要支撐。
通俗理解:例如奧運這樣的預期活動,用戶入住酒店,保險的措施就是提前預訂好房間。對于云環境,就是在云上預訂一個虛擬的IDC(私有池),這樣就可以在私有池上確定性地交付資源。
圖1-水電煤基礎設施與云計算基礎設施“服務形態”現階段的對比
綜上分析,現階段,在云服務的主流服務售賣形式依然是“算力商品化”的大背景下,用戶需要感知業務在云上生命周期過程所需商品特性,云平臺需要面向商品進行供應生產。由于需求的變化和市場環境的不確定性,供應和需求短時間的不匹配比較容易發生。所以,服務特定行業的特定客戶、針對特定算力商品的確定性購買,即云上資源確定性交付就成為解決這種困境的重要能力。
How 如何保障云上業務資源確定性、服務連續性
前面分析了客觀現狀,存在特定地域、特定時間段、特定算力商品的短時購買失敗現象。對客戶來說,需要結合自身場景,市場上云商品供應情況,合適的成本投入來實現資源交付的確定性,從而確保業務連續性。
下文的分析以整體性概念為主,具體到客戶的業務場景,還需要具體案例具體分析。例如預定地域的選擇、實例規格的選擇、預定時長的選擇、預定數量的選擇、總的成本最優等。資源交付的一種劃分如圖2所示,其中私有池是確定性交付的重要實現方式。結合業務場景,推薦最佳的私有池選購方案本文暫不介紹,后續專門出文檔描述,幫助用戶更好地依托云的產品服務,實現資源的確定性交付,保障業務服務的連續性。
圖2-資源交付的一種劃分
圖3-確定性交付的可選策略
圖4-靈活彈性交付的可選策略
Aliyun 私有池選購和價值
1- 相關概念
私有池: 當用戶在ECS 控制臺,“資源保障”服務標簽頁下,購買“彈性保障”或者“容量預定”等產品后,就獲得了云上的一個具有確定性庫存資源預留,并且是專屬分配使用的資源池。如圖5-私有池模式抽象和多種產品實現。圖5左側,一個私有池的服務有兩個階段:私有池預留和私有池資源交付。針對私有池預留,產品目標是履約:確保私有池真正被使用。例如彈性保障EA elastic assurance,一次性預收取這個私有池費用。
圖5-私有池模式和多種產品實現
iCR:immediately Capacity Reservesion 立即生效按量預留CR,私有池全部用完,無額外的成本開銷,只在私有池有剩余容量的時候,收取剩余容量部分費用。
aCR:advance Capacity Reservation 指定時間、延遲生效的容量預定,基于信用分等級收取一些預訂金,信用等級越高,預定金越低。
針對私有池資源交付,產品目標是:確定性交付、零門檻使用。當實例開出來后,會按實例進行正常的收費。
資源保障:資源保障是包括資源供應量化感知、資源的確定性預定、私有池規劃使用的全鏈路資源確定性服務,它能夠全面提升您在查詢、預定、購買、使用資源過程中的體驗,使您在復雜多變的市場環境下依然能夠享受到專有保障資源。
彈性保障:通過彈性保障,您只需要支付一筆較低的保障費用,即可換取固定周期(支持1個月~5年)的資源確定性保障。購買彈性保障時設置可用區、實例規格、保障數量等屬性,系統會以私有池的方式預留指定數量屬性相匹配的資源,例如在華東1(杭州)可用區I預留10臺ecs.c6.large規格的實例。在彈性保障有效期內,您創建按量付費實例時選擇使用私有池的容量,即可享受到資源確定性保障。在彈性保障有效期內,您可以重復創建/釋放指定數量的實例而無需擔心資源供應的問題。超出彈性保障有效期或者彈性保障已經沒有空閑的容量時,資源確定性保障將不再提供。
立即生效容量預定:您可以隨時購買立即生效容量預定,預定成功后立即生效,即可享受資源確定性服務。容量預定生效后即開始按照按量實例費率收費,直至立即生效容量預定到期自動釋放或者您提前手動釋放。購買立即生效容量預定時設置可用區、實例規格、操作系統類型、容量大小等屬性,系統會以私有池的方式預留指定數量屬性相匹配的資源。在容量預訂有效期內,您創建按量付費實例時選擇使用私有池的容量,即可享受到資源確定性保障。通過普通場景購買的ECS,由于資源的供應千變萬化,線上的資源可能無法每時每刻滿足您的定制化需求;而在容量預訂有效期內,您可以重復創建/釋放指定數量的實例而無需擔心資源供應的問題。容量預定未處于生效狀態或者容量預定已經沒有空閑的容量時,資源確定性保障將不再提供。在容量預定計費周期內,如果您購買了按量實例,并且使用了資源確定性,這部分按量實例的計算資源費用將會抵扣與按量實例匹配的容量預定的部分或者全部費用。
當一個按量實例與彈性保障和容量預訂均匹配時,系統會優先選取容量預定產品對應的私有池進行匹配。
2- 私有池價值
價值1: 確定性資源交付
隨著云原生概念和實踐的廣泛普及,基于云的算力研發已成為新常態。客戶業務云原生后,業務的快速發展過程中,往往針對特定場景,有著資源確定性交付的訴求,期望100%地保障業務按既定規劃上線、運營、推廣等。
資源保障相關產品提供了全鏈路確定性交付能力。
具有確定性交付的能力,從業務角度就避免了云上某個可用區下、某種稀缺資源的搶購帶來的購買成功率低的不確定性風險,例如GPU大規格實例。在原有共有資源池彈性交付基礎上,配合確定性交付,可以進一步保障高優先級業務的資源100%保障。例如之前按量購買了20臺A規格實例,這些實例會有業務的一些運維、變更等操作,購買20個A規格構成的私有池,這樣就確保這些實例操作運維過程中資源具有100%確定性,不會被其他客戶搶占。正常情況下20個A規格私有池容量被20個A規格實例全部使用,無任何空閑容量,從而無任何額外成本投入。當實際使用資源確定性的A實例數量不足20個的時候,例如僅使用18個實例,產生2個空閑容量,此時空閑容量會按秒級計費,按小時出賬單。
價值2: 資源專屬調度分配使用
在客戶業務架構、業務演進深度融合云產品服務的迭代升級過程中,除了資源確定性交付之外,資源靈活性交付也隨之成為重要的訴求。阿里云資源保障服務目前已經支持基于云上私有池的專屬調度分配,用戶專屬調度目前有兩種實踐方式。
方式一:用戶基于Open、Target、None的匹配規則,進行實例的調度分配
用戶在創建私有池的時候,指定私有池的匹配屬性:Open(開放)、Target(指定)。在創建實例的時候指定實例匹配屬性Open 或者Target(使用Target模式需要顯示指定私有池ID),后端進行屬性匹配調度。
當實例匹配屬性值為Open的時候,系統會優先從用戶私有池創建實例;如果無匹配的私有池,則按照共有池流程創建實例,同時保留資源確定性特征,一旦發現有空閑的容量,系統會準時的自動將這些實例重新與空閑私有池進行匹配和關聯;當實例匹配屬性值為Target的時候,明確指定某個私有池,此時系統在指定的私有池進行容量和私有池資源規則的匹配校驗。例如私有池region、zone、instanceType、platform、payType等校驗。
運行過程中,當實例的匹配屬性發生修改,系統會準時進行實例和私有池的重新匹配,確保實例盡可能地關聯到私有池,從而減少用戶的費用成本(私有池的空閑容量及時使用掉);當匹配模式為Open的私有池被釋放的時候,系統會準時的對與該私有池關聯的并且使用Open匹配模式的實例重新匹配,確保實例盡可能地關聯到私有池,從而減少用戶的成本(私有池的空閑容量及時使用掉)。
方式二:用戶基于Tags匹配規則,進行實例的調度分配
用戶在創建私有池的時候,指定私有池的tag信息,然后創建實例的時候指定tag信息,后端就可以按照客戶指定的tag匹配規則,從私有池或者共有池進行精細化資源調度分配。
為了降低用戶使用門檻,或者零門檻,不論方式一還是方式二,阿里云資源保障服務都支持用戶在現有CreateInstance、RunInstnaces接口基礎上,直接使用方式一或者方式二進行資源專屬調度。例如用戶申請白名單后,后端按用戶需求,將用戶創建實例時候的匹配屬性指定為默認值,這樣用戶既有的集成接口參數無須改動。
3- 私有池的獲取
控制臺購買獲取
https://help.aliyun.com/document_detail/193634.html
OpenAPI集成式獲取
相關Demo如下:
1.1 Java 下載地址:https://search.maven.org/search?q=aliyun-java-sdk-ecs 1.2 Python https://pypi.org/project/aliyun-python-sdk-ecs/ Python可直接通過pip安裝:pip install aliyun-python-sdk-ecs2.將SDK導入到工程中 具體操作步驟可參考官方幫助文檔,地址: https://help.aliyun.com/document_detail/25699.html?spm=a2c4g.11186623.6.1483.512e73fbxDWOfZ3.創建立即生效容量預定私有池 創建容量預定私有池的對應API為CreateCapacityReservation 其中<accessKeyId>和<accessSecret>需要替換為對應購買賬號的AK信息。3.1 Java版Demo 創建私有池:立即生效容量預留 在線接口體驗:https://api.aliyun.com/?spm=5176.12818093.resource-links.dapi_platform.54ce16d07XdZhp#/?product=Ecs&version=2014-05-26&api=CreateCapacityReservation&tab=DEMO&lang=JAVAimport com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.*; import com.aliyuncs.ecs.model.v20140526.*;public class CreateCapacityReservation {public static void main(String[] args) {DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");IAcsClient client = new DefaultAcsClient(profile);CreateCapacityReservationRequest request = new CreateCapacityReservationRequest();request.setRegionId("cn-hangzhou");List<String> zoneIdList = new ArrayList<String>();zoneIdList.add("cn-hangzhou-i");request.setZoneIds(zoneIdList);request.setInstanceType("ecs.c6.2xlarge");request.setPeriod(1);request.setPeriodUnit("Hour");request.setPrivatePoolOptionsName("PrivatePoolName");request.setDescription("PrivatePoolDescription");request.setPrivatePoolOptionsMatchCriteria("Open");request.setEndTimeType("Unlimited");request.setInstanceAmount(10);List<RunInstancesRequest.Tag> tagList = new ArrayList<RunInstancesRequest.Tag>();RunInstancesRequest.Tag tag1 = new RunInstancesRequest.Tag();tag1.setKey("11");tag1.setValue("22");tagList.add(tag1);request.setTags(tagList);//注入tagstry {CreateCapacityReservationResponse response = client.getAcsResponse(request);System.out.println(new Gson().toJson(response));} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {System.out.println("ErrCode:" + e.getErrCode());System.out.println("ErrMsg:" + e.getErrMsg());System.out.println("RequestId:" + e.getRequestId());}} }創建實例-Open 開放匹配 在線接口體驗:https://api.aliyun.com/?spm=5176.12818093.resource-links.dapi_platform.54ce16d07XdZhp#/?product=Ecs&version=2014-05-26&api=RunInstances&tab=DEMO&lang=JAVAimport com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.*; import com.aliyuncs.ecs.model.v20140526.*;public class RunInstances {public static void main(String[] args) {DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");IAcsClient client = new DefaultAcsClient(profile);RunInstancesRequest request = new RunInstancesRequest();request.setRegionId("cn-hangzhou");request.setZoneId("cn-hangzhou-i");request.setInstanceType("ecs.c6.2xlarge");request.setInstanceChargeType("PostPaid");request.setPeriod(1);request.setPeriodUnit("Hour");request.setNetworkType("vpc");request.setImageId("aliyun_2_1903_x64_20G_alibase_20200529.vhd");request.setSystemDiskSize(40);request.setSystemDiskType("cloud_ssd");request.setPrivatePoolOptionsMatchCriteria("Open"); // 私有池 開放匹配參數request.setSecurityGroupId("sg-xxx");request.setVSwitchId("vsw-xxx");try {RunInstancesResponse response = client.getAcsResponse(request);System.out.println(new Gson().toJson(response));} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {System.out.println("ErrCode:" + e.getErrCode());System.out.println("ErrMsg:" + e.getErrMsg());System.out.println("RequestId:" + e.getRequestId());}} }創建實例-Target 指定匹配 import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.*; import com.aliyuncs.ecs.model.v20140526.*;public class RunInstance {public static void main(String[] args) {DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");IAcsClient client = new DefaultAcsClient(profile);RunInstancesRequest request = new RunInstancesRequest();request.setRegionId("cn-hangzhou");request.setZoneId("cn-hangzhou-i");request.setInstanceType("ecs.c6.2xlarge");request.setInstanceChargeType("PostPaid");request.setPeriod(1);request.setPeriodUnit("Hour");request.setNetworkType("vpc");request.setImageId("aliyun_2_1903_x64_20G_alibase_20200529.vhd");request.setSystemDiskSize(40);request.setSystemDiskType("cloud_ssd");request.setPrivatePoolOptionsMatchCriteria("Target"); // 私有池 指定匹配request.setPrivatePoolOptionsId("crp-xxx"); // 私有池idrequest.setSecurityGroupId("sg-xxx");request.setVSwitchId("vsw-xxx");try {RunInstancesResponse response = client.getAcsResponse(request);System.out.println(new Gson().toJson(response));} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {System.out.println("ErrCode:" + e.getErrCode());System.out.println("ErrMsg:" + e.getErrMsg());System.out.println("RequestId:" + e.getRequestId());}} }4- 私有池用戶案
案例一:零門檻的Tags匹配,實現業務的精準、確定性交付
某A公司,每隔一段時間需要對業務進行升級,需要將服務器釋放,重新進行業務的部署;在升級的過程中,需要確保業務依賴的資源確定性交付出來,從而保障業務服務的連續性。
這里有兩個關鍵的變化:服務器釋放、重新業務的部署。在云平臺上,時時刻刻都有用戶進行資源釋放、購買。在這個動態過程中,可能A用戶釋放的資源,很快被B用戶購買走了,A用戶此時可能就買不到了,需要等其他用戶釋放掉資源的時候,或者云平臺恰巧有新增商品量的時候,才有機會購買成功。一旦業務需要延遲購買到相應的商品(等待有可售庫存供下單),可能導致業務升級過程中斷,服務連續性就受到影響。
為了解決這個問題,客戶可以先購買到目標商品,進行業務的新部署,然后釋放老的資源,這就增加了升級過程中成本投入:新購資源和老資源同時付費,并且升級過程時間越久,投入的成本越多。另外,升級進程受先購買到資源影響,只有在新購資源交付成功后,才能進行后續的升級,這使得業務升級計劃受到資源交付影響,業務升級不一定完全按業務規劃準時進行。
阿里云立即生效的CR完美地契合了這個場景。A公司購買一批適合業務場景的私有池(立即生效容量預定),然后放心釋放資源,在私有池上100%開出資源,進行業務的準時升級。在實際使用私有池過程中,阿里云提供了的標準化的接入方案:用戶按業務管理需求,用戶自主進行資源指定到哪個私有池進行資源交付。這就要求業務針對已有資源交付接口做輕微改動。但是,考慮到用戶接入成本、對已有業務的入侵程度,阿里云進一步提供了零門檻使用CR,支持高級特性:經過客戶授權后,云平臺幫客戶在新購實例的時候,修改默認的匹配屬性為Open。同時在已有Tag資源管理基礎上,支持面向Tag的、業務專屬的實例和私有池Tag匹配規則(業界首推的特性)。
A公司使用CR的具體操作步驟如下:
- A公司技術人員通過API將需要使用立即生效CR的存量實例匹配屬性修改為Open,
- A公司技術人員授權阿里云將其賬戶下新購實例的默認匹配屬性從None修改為Open,
- A公司技術人員按照內部的業務邏輯設計相應的Tag標簽組合
- A公司技術人員根據需求創建具有相應Tag標簽組合的立即生效的CR
- 阿里云會按照Tag標簽組合將存量的實例關聯到對應的私有池中
- A公司技術人員創建Tag標簽組合的新實例,該實例一定能夠創建成功并且關聯到對應的私有池
注意:A公司不需要修改已有的任何腳本文件,從而可以零入侵的實現資源的確定性交付。
案例二:業務自主管理業務與私有池的精準、確定性交付
某B公司,資源交付團隊負責整個公司的各個業務線的資源交付。為了提升資源利用率,業務之間資源共享非常普遍,例如資源白天給A業務,晚上給B業務。例如B公司業務不定期,進行線上活動推廣,推廣期間會有一個明顯的資源突發。這個過程中,發生資源的共享、資源的突發大量需求。
在云上,客戶自己的資源進行共享,一種方式是云服務器不釋放,服務上應用進行部署釋放、調整;另外一種方式是資源釋放、應用釋放,新應用重新申請資源重新部署。前者資源和應用生命周期解偶,后者資源和生命周期一致。
在云原生理念驅動下,資源和應用生命周期一致可以實現:可編程基礎設施、不可變基礎設施??蛻舻脑V求是資源隨時釋放并隨時可以再次獲取到。實際上,云上多用戶并發資源購買,平臺并不承諾用戶C已釋放的資源,繼續留給用戶C使用,而是有用戶需要購買,就會出售。那么,資源發生資源釋放,就不一定能及時再次購買的到。
同理,大量突發資源的臨時購買,也不一定能購買成功??蛻舻脑V求是資源確定性交付,從而完成業務活動的推廣。
阿里云延遲生效容量預定、立即生效容量預定,生效后的容量預定(就是客戶專屬的私有池),客戶可以隨時釋放私有池的實例,重新在私有池上開出實例,私有池容量客戶感知,業務的資源共享基于私有池,可以隨時隨地進行精準遷移。B公司研發實力雄厚,技術控制力強,自主集成私有池的OpenAPI到公司資源交付體系中,實現自主、精準資源交付。
B公司的具體操作步驟如下:
- B公司技術人員通過API購買與資源規劃相匹配的立即生效CR
- B公司技術人員在收到業務資源申請時,根據B公司資源管理策略,在資源創建API,如CreateInstance、RunInstances 中 設置 PrivatePoolOptionsMatchCriteria= Open。這種模式下,確保資源創建優先在開發的私有池中匹配,當私有池無法匹配的時候,會到共有池申請,很好地實現了共享性業務的確定性、靈活性交付?;蛘逷rivatePoolOptionsMatchCriteria =Target, PrivatePoolOptions ID=crp-a。這種模式下,確保資源創建在指定的私有池crp-a中創建。很低地實現了重?;蛘吒邇炏燃墭I務的確定性交付。
上面兩個案例,分別是(1)零門檻的、Tags的匹配,實現業務的精準、確定性交付(2)業務自主管理業務與私有池的精準、確定性交付。兩種模式可以廣泛地復用到各公司在阿里云上ECS資源確定性交付場景。
5- 私有池的關鍵技術
一句話概括就是:云平臺為客戶預留固定的資源庫存,這部分庫存僅提供給客戶專屬使用(包括客戶授權的其他子賬號或者AliUid使用)
Open|Target 分配技術原理
根據創建實例傳入的參數:PrivatePoolOptionsMatchCriteria值是Open 或者None 或者Target,后端在選擇對應的資源池進行庫存校驗和交付。其中私有池也有MatchCriteria,取值Open 或者Target。
匹配規則可以移步官方文檔:立即生效容量預定概述 - 云服務器 ECS - 阿里云
Tags分配技術原理
Tags分配本質上基于私有池的Tags和實例Tags的匹配規則進行分配,是調度系統能力直接產品化服務的一種體現。那么調度系統的所有相關技術理論上都可以派上用場。關于資源調度和管理的全面介紹可以參考書籍《深入集群-大型數據中心資源調度和管理》一書。
總結
云上資源保障服務(例如具體的彈性保障、立即生效容量預留等,以及將推出的容量規劃服務),交付給客戶一個云上私有池,并支持客戶基于私有池進行確定性交付、靈活性交付、資源共享等。從而為客戶業務確定性、連續性發展提供了強有力的支持,客戶也可以進行容量的共享進行成本的分擔。
本文作者:李雨前,阿里云技術專家;文章已獲得作者授權發布
本期最佳實踐的分享就到這里了,我們還會推出云上私有池的選購指南等續篇內容,敬請期待~
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。?
總結
以上是生活随笔為你收集整理的云上虚拟IDC(私有池)如何为客户业务的确定性、连续性保驾护航的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python调用shell脚本
- 下一篇: 如何开发 Node.js Native