這篇文章將為大家詳細(xì)講解有關(guān)AutoScaling 生命周期的作用是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
公司主營業(yè)務(wù):做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出秭歸免費(fèi)做網(wǎng)站回饋大家。
使用 LifecycleHook,可以在伸縮組發(fā)生伸縮活動(dòng)時(shí)將正在擴(kuò)張或即將釋放的 ECS 實(shí)例掛起,執(zhí)行用戶自定義操作,可以更加靈活地管理 ECS 實(shí)例在伸縮組內(nèi)的生命周期。幾個(gè)簡單的 LifecycleHook 應(yīng)用場景:
伸縮組彈出 ECS 實(shí)例后需要延遲一段時(shí)間(測試服務(wù)沒問題以后)掛載到 SLB ,然后對外提供服務(wù)
伸縮組釋放 ECS 實(shí)例時(shí)需要先將實(shí)例從 SLB 后端服務(wù)移除(防止接收新的請求),待檢測已經(jīng)接收到的請求處理完成,停止并釋放實(shí)例
伸縮組釋放 ECS 實(shí)例時(shí)執(zhí)行數(shù)據(jù)備份操作
伸縮組彈性擴(kuò)張或者收縮執(zhí)行一些用戶自定義操作
針對上述第二種場景,如果可以確定每個(gè)請求的最長處理時(shí)間,可以調(diào)用 創(chuàng)建生命周期掛鉤 接口創(chuàng)建生命周期掛鉤,設(shè)置 LifecycleTransition 參數(shù)值為 SCALE_IN,設(shè)置 HeartbeatTimeout 為請求最長處理時(shí)間,不需要設(shè)置通知對象,當(dāng)發(fā)生彈性收縮類型伸縮活動(dòng)時(shí),ECS 實(shí)例從 SLB 移除后會(huì)掛起一段時(shí)間(HeartbeatTimeout),等待請求處理完成。
當(dāng)伸縮組創(chuàng)建了 LifecycleHook,并發(fā)生 LifecycleHook 配置的伸縮活動(dòng)類型(LifecycleTransition)時(shí),那么伸縮活動(dòng)唄掛起,用戶可以在伸縮活動(dòng)掛起這段時(shí)間內(nèi)執(zhí)行自定義操作,一直到 LifecycleHook 超時(shí)(HeartbeatTimeout),或者通過調(diào)用 CompleteLifecycleAction 接口提前終止伸縮活動(dòng)掛起。
對于彈性擴(kuò)張(SCALE_OUT)伸縮活動(dòng):
ECS 實(shí)例先進(jìn)入 Pending(加入中)狀態(tài),當(dāng)實(shí)例啟動(dòng)成功,并添加到 RDS 白名單(如果伸縮組設(shè)置了 RDS)以后,觸發(fā) LifecycleHook ,ECS 實(shí)例進(jìn)入 Pending:Wait(加入中掛起)狀態(tài)。如果LifecycleHook 配置了通知對象(MNS),則發(fā)送通知內(nèi)容到 MNS,用戶可通過 MNS控制臺 的方式來消費(fèi) MNS 主題或者隊(duì)列中的消息,也可以通過 OpenAPI 的方式消費(fèi),具體可參考 ESS 事件通知#消息接收 章節(jié)。當(dāng)用戶接收到 MNS 消息后可以執(zhí)行自定義操作,例如在 ECS 實(shí)例上安裝軟件、部署服務(wù)等,執(zhí)行完自定義操作以后,用戶可以通過 CompleteLifecycleAction 接口提前結(jié)束掛起的伸縮活動(dòng),也可以等待 LifecycleHook 掛起超時(shí)。LifecycleHook 掛起結(jié)束后有兩個(gè)執(zhí)行方向,CONTINUE or ABANDON,對于彈性擴(kuò)張伸縮活動(dòng),執(zhí)行方向解釋如下:
CONTINUE 繼續(xù),ECS 實(shí)例將被投入伸縮組中使用
ABANDON 拒絕,伸縮活動(dòng)回滾,ECS 實(shí)例將被釋放
如果伸縮組配置了多個(gè)彈性擴(kuò)張類型的 LifecycleHook,那么發(fā)生彈性擴(kuò)張伸縮活動(dòng)時(shí)會(huì)觸發(fā)多個(gè) LifecycleHook,伸縮活動(dòng)最終的執(zhí)行方向(CONTINUE or ABANDON)以最后一個(gè)結(jié)束的 LifecycleHook 執(zhí)行方向?yàn)闇?zhǔn)。
結(jié)束 LifecycleHook 掛起狀態(tài)以后,如果伸縮組配置了負(fù)載均衡(SLB),那么將 ECS 實(shí)例掛載到 SLB 上以后,實(shí)例進(jìn)入 Inservice(服務(wù)中)狀態(tài),此時(shí)彈性擴(kuò)張伸縮活動(dòng)結(jié)束。
對于彈性收縮(SCALE_IN)伸縮活動(dòng):
ECS 實(shí)例先進(jìn)入 Terminating(移出中)狀態(tài),,將實(shí)例從 SLB 后端服務(wù)器移除以后(如果伸縮組配置了負(fù)載均衡(SLB)),觸發(fā) LifecycleHook ,ECS 實(shí)例進(jìn)入 Terminating:Wait(移出中掛起)狀態(tài)。如果 LifecycleHook 配置了通知對象(MNS),則發(fā)送通知內(nèi)容到 MNS,用戶可通過 MNS控制臺 的方式來消費(fèi) MNS 主題或者隊(duì)列中的消息,也可以通過 OpenAPI 的方式消費(fèi),具體可參考 ESS 事件通知#消息接收 章節(jié)。當(dāng)用戶接收到 MNS 消息后可以執(zhí)行自定義操作,例如檢測 ECS 接收到的請求是否處理完成、停止接收服務(wù)等,執(zhí)行完自定義操作以后,用戶可以通過 CompleteLifecycleAction 接口提前結(jié)束掛起的伸縮活動(dòng),也可以等待 LifecycleHook 掛起超時(shí)。LifecycleHook 掛起結(jié)束后有兩個(gè)執(zhí)行方向,CONTINUE or ABANDON,對于彈性收縮伸縮活動(dòng),執(zhí)行方向解釋如下:
CONTINUE 繼續(xù),ECS 實(shí)例將從伸縮組中移出
ABANDON 拒絕,ECS 實(shí)例將從伸縮組中移出
如果伸縮組配置了多個(gè)彈性收縮類型的 LifecycleHook,那么發(fā)生彈性收縮活動(dòng)時(shí)會(huì)觸發(fā)多個(gè) LifecycleHook,如果某個(gè) LifecycleHook 掛起結(jié)束執(zhí)行結(jié)果為 ABANDON,則其余掛起的 LifecycleHook 會(huì)被提前結(jié)束掉,ECS 實(shí)例從伸縮組中移出,如果某個(gè) LifecycleHook 掛起結(jié)束執(zhí)行結(jié)果為 CONTINUE,則其余掛起的 LifecycleHook 繼續(xù)掛起,直到最后一個(gè) LifecycleHook 掛起結(jié)束,伸縮活動(dòng)恢復(fù)執(zhí)行。
結(jié)束 LifecycleHook 掛起狀態(tài)以后,彈性伸縮服務(wù)會(huì)將 ECS 實(shí)例先從 RDS 白名單移除(如果伸縮組配置了 RDS),再將 ECS 實(shí)例停止(如果 ECS 實(shí)例是伸縮組彈出來的不是手動(dòng)添加的),然后釋放實(shí)例(如果 ECS 實(shí)例是伸縮組彈出來的不是手動(dòng)添加的),并將實(shí)例從伸縮組中移出。
如果生命周期掛鉤配置了通知對象,那么當(dāng)伸縮組發(fā)生伸縮活動(dòng)觸發(fā) LifecycleHook 時(shí),通知對象將接收到當(dāng)前的伸縮活動(dòng)詳細(xì)信息,如果生命周期掛鉤沒有配置通知對象,那么當(dāng)伸縮組發(fā)生伸縮活動(dòng)觸發(fā) LifecycleHook 時(shí)不會(huì)發(fā)出任何通知信息。
生命周期掛鉤目前支持以下兩種通知方式:
消息服務(wù)(MNS)隊(duì)列(Queue)
消息服務(wù)(MNS)主題(Topic)
關(guān)于 MNS 主題和隊(duì)列的介紹,您可以參考 隊(duì)列使用幫助、主題使用幫助 來了解主題、隊(duì)列的創(chuàng)建,消息的接收方式,以及如何為主題設(shè)置訂閱等。
需要注意的是,MNS 消息服務(wù)會(huì)收取相應(yīng)的費(fèi)用,具體的收費(fèi)標(biāo)準(zhǔn)可參考 云產(chǎn)品定價(jià)#消息服務(wù) 進(jìn)行詳細(xì)了解。
當(dāng)伸縮組發(fā)生伸縮活動(dòng)觸發(fā) LifecycleHook 時(shí),如果生命周期掛鉤配置了通知對象(目前只支持通知到 MNS),那么通知對象將收到關(guān)于此次伸縮活動(dòng)的詳細(xì)信息,通知內(nèi)容如下:
{ "content": { "defaultResult": "CONTINUE", "instanceIds": [ "i-xxxxxxxxxx1", "i-xxxxxxxxxx2", "i-xxxxxxxxxx3", "i-xxxxxxxxxx4", "i-xxxxxxxxxx5" ], "lifecycleActionToken": "C8BEAE68-CB77-4E60-986D-1E8BBF1A6B99", "lifecycleHookId": "ash-wxxxxxxxxxxx", "lifecycleHookName": "SCALE_IN_TEST", "lifecycleTransition": "SCALE_IN", "notificationMetadata": "測試 SCALE_IN HOOK", "requestId": "XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX", "scalingActivityId": "asa-xxxxxxxxxxxxxxxx", "scalingGroupId": "asg-xxxxxxxxxxxxxxxxx", "scalingGroupName": "test-hook", "scalingRuleId": "asr-xxxxxxxxxxxx", "scheduledTaskId": "xxxxxxxxxxxxxx" }, "product": "ESS", "regionId": "cn-shenzhen", "resourceArn": "acs:ess:cn-shenzhen:111111111111111:scalingGroup/asg-xxxxxxxxxxxxx", "time": "2018-06-21T03:07:57.641Z", "userId": "111111111111111" }
上述內(nèi)容中:
resourceArn 伸縮組唯一標(biāo)識符,包括了伸縮組所在的 Region 信息,所屬的用戶 ID 信息,以及伸縮組 ID 信息。
content 生命周期掛鉤觸發(fā)的伸縮活動(dòng)詳細(xì)信息
SCALE_OUT:伸縮組彈性擴(kuò)張活動(dòng)
SCALE_IN:伸縮組彈性收縮活動(dòng)
CONTINUE 繼續(xù)
ABANDON 拒絕
defaultResult 生命周期掛鉤默認(rèn)執(zhí)行策略
instanceIds 生命周期掛鉤掛起的 ECS 實(shí)例ID
lifecycleActionToken 生命周期掛鉤唯一標(biāo)識符,通過獲取該參數(shù)與 lifecycleHookId 參數(shù),可通過調(diào)用 CompleteLifecycleAction 主動(dòng)結(jié)束生命周期活動(dòng)
lifecycleHookId 生命周期掛鉤 ID
lifecycleHookName 生命周期掛鉤名稱
lifecycleTransition 生命周期掛鉤適用的伸縮活動(dòng)類型,取值范圍:
notificationMetadata 生命周期掛鉤通知標(biāo)識
scalingActivityId 伸縮活動(dòng) ID
scalingGroupId 伸縮組ID
scalingGroupName 伸縮組名稱
scalingRuleId 觸發(fā)伸縮活動(dòng)的伸縮規(guī)則名稱(此參數(shù)不是必帶)
scheduledTaskId 定時(shí)任務(wù)ID(只有伸縮活動(dòng)是由定時(shí)任務(wù)觸發(fā)的時(shí)候才會(huì)有此參數(shù))
MNS 隊(duì)列或主題內(nèi)容的消費(fèi)方式,推薦參考 MNS 官方給出的 長輪訓(xùn)最佳實(shí)踐 文檔,使用長輪詢的方式來消費(fèi)隊(duì)列或主題收到的消息內(nèi)容。
在創(chuàng)建 LifecycleHook 時(shí),可以配置通知對象,也可以不配置通知對象,如果需要配置通知對象,需要先創(chuàng)建好通知對象,再創(chuàng)建 LifecycleHook。關(guān)于通知對象(MNS 主題、隊(duì)列)的創(chuàng)建方式,可以參考 ESS 事件通知#創(chuàng)建 MNS 隊(duì)列 章節(jié) 和 ESS 事件通知#創(chuàng)建 MNS 主題 章節(jié)。
LifecycleHook 的創(chuàng)建,可以通過 ESS控制臺 完成,也可以通過調(diào)用 CreateLifecycleHook 接口完成。通過接口創(chuàng)建 LifecycleHook,可基于 CreateLifecycleHook 文檔,參考 ESS 事件通知#創(chuàng)建事件通知(OpenAPI) 章節(jié)實(shí)現(xiàn)。通過 ESS控制臺 創(chuàng)建 LifecycleHook 過程如下:
登錄 ESS控制臺,進(jìn)入生命周期掛鉤列表頁,點(diǎn)擊創(chuàng)建生命周期掛鉤按鈕,彈出創(chuàng)建界面如下圖所示:
按提示名稱,通知標(biāo)識,選擇伸縮活動(dòng)類型、執(zhí)行策略和通知方式,點(diǎn)擊確定,如下圖所示:
上圖中,創(chuàng)建了兩個(gè) LifecycleHook,一個(gè)伸縮活動(dòng)擴(kuò)張類型的 LifecycleHook,一個(gè)伸縮活動(dòng)收縮類型的 LifecycleHook。
本章以觸發(fā)彈性收縮活動(dòng)為例,展示 LifecycleHook 工作過程。觸發(fā)伸縮活動(dòng)的方式,可參考 ESS 事件通知#創(chuàng)建事件通知(OpenAPI) 章節(jié)完成。
首先觸發(fā)減少1臺實(shí)例的伸縮活動(dòng),如下圖所示:
查看伸縮組 ECS 實(shí)例列表頁,如下圖所示:
從上圖看出,此時(shí)有一臺 ECS 實(shí)例處于掛起狀態(tài),由于彈性收縮類型的 LifecycleHook 設(shè)置了通知對象,可以登錄 MNS控制臺 查看通知結(jié)果,消息查看方式可參考 ESS 事件通知#MNS 隊(duì)列消息接收) 章節(jié)。
接收到 LifecycleHook 發(fā)送的通知內(nèi)容以后,提取 lifecycleActionToken 、lifecycleHookId 參數(shù),然后通過調(diào)用 CompleteLifecycleAction 接口提前結(jié)束 LifecycleHook 掛起狀態(tài),調(diào)用方式如下:
public class LifecycleHookTest { public static final String REGION_ID = "cn-hangzhou"; public static final String AK = "xxx"; public static final String AKS = "xxx"; public static void main(String[] args) throws ClientException, Exception { IClientProfile clientProfile = DefaultProfile.getProfile(REGION_ID, AK, AKS); final IAcsClient client = new DefaultAcsClient(clientProfile); completeLifecycleAction(client); } private static String completeLifecycleAction(IAcsClient client) throws ClientException { CompleteLifecycleActionRequest request = new CompleteLifecycleActionRequest(); request.setLifecycleHookId("ash-xxxxxxxxxxxxx"); request.setLifecycleActionToken("xxxxxxxxxxxxxxx"); request.setLifecycleActionResult("CONTINUE"); CompleteLifecycleActionResponse response = client.getAcsResponse(request); return response.getRequestId(); } }
使用上述代碼中,需補(bǔ)充個(gè)人 AK 信息,以及 LifecycleActionToken 和 LifecycleHookId 參數(shù)。
LifecycleHook 掛起狀態(tài)結(jié)束以后,ECS 實(shí)例被停止(伸縮組創(chuàng)建的實(shí)例),然后釋放(伸縮組創(chuàng)建的實(shí)例)并移出伸縮組。
需要注意,如果 LifecycleHook 配置的通知對象被刪除,那么當(dāng)前的 LifecycleHook 將不再生效。如果伸縮活動(dòng)觸發(fā) LifecycleHook 被掛起,想要延長伸縮活動(dòng)被掛起的時(shí)間,可以通過調(diào)用 RecordLifecycleActionHeartbeat 延長掛起時(shí)間。
關(guān)于AutoScaling 生命周期的作用是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。