抢占式实例接收中断消息指南

简介: 抢占式实例在提供低至1折的极大优惠之外, 同时带来了实例有可能被中断之痛. 本文总结了几种方式, 方便您感知中断信息, 缓解中断影响。

前言

由于抢占式实例天然具有被中断的风险,并且在实例中断前至少5分钟,系统会向您发送中断消息。因此如果您的应用对中断敏感,就需要格外注意如下两点:

• 恰当地接收中断事件
• 合理地处理中断

关于第一点, 本文总结了几种接收中断事件的方式,欢迎各位体验接入。

方式1: 云监控对接, 事件触发方式

所有抢占式实例中断消息都会作为系统事件, 投递到云监控。云监控提供了强大的能力, 您可以在云监控订阅该事件, 并将事件投递到需要的消费的地方, 例如:
• 投递到MQ消息队列, 方便与您系统对接, 并执行相应代码
• 投递到SLS日志服务, 方便进行中断统计
• 投递到邮件/钉钉/短信等通道, 方便您能收到提醒.
• 投递到自定义的函数中, 方便进行中断处理
• 等等...

image.png

第一步: 配置实例中断事件

1. 创建事件报警

"云监控" > "事件监控" > "报警规则" > "系统事件" > "创建事件报警"

image.png

2. 选择合适事件

事件类型: "抢占式实例中断通知"

image.png

第二步: 投递实例中断事件

1. 投递到消息队列(MNS)
(1)创建消息队列(MNS)

• 进入消息队列控制台
• 创建&配置队列

image.png

(2)投递抢占式实例中断消息到MNS

image.png

(3)应用接入MNS SDK
此步骤不再赘述, 具体参见 MNS文档

2. 投递到函数计算

(1)创建中断处理函数
函数计算控制台->新建函数->事件函数->配置函数(此处以python2.7为例)

image.png

(2)编写中断处理函数

image.png

函数样例代码如下:

# -*- coding: utf-8 -*-
import logging
import json, random, string, time
LOGGER = logging.getLogger()
clt = None
def handler(event, context):
  '''
  {
    "product": "ECS",
    "resourceId": "acs:ecs:cn-shanghai:1331602849963181:instance/i-abcdef",
    "level": "WARN",
    "instanceName": "instanceName",
    "regionId": "cn-hangzhou",
    "name": "Instance:PreemptibleInstanceInterruption",
    "content": {
        "instanceId": "i-abcdef",
        "action": "delete"
    },
    "status": "Normal"
}
  '''
  evt = json.loads(event)
  content = evt.get("content");
  regionId = evt.get("regionId");
  instanceId = content.get("instanceId");
  LOGGER.info( regionId + " " + instanceId + " termination ongoing");

3. 测试中断处理函数

使用如下触发事件样例, 进行"Invoke"测试:

{
    "product": "ECS",
    "resourceId": "acs:ecs:cn-shanghai:1331602849963181:instance/i-abcdef",
    "level": "WARN",
    "instanceName": "instanceName",
    "regionId": "cn-hangzhou",
    "name": "Instance:PreemptibleInstanceInterruption",
    "content": {
        "instanceId": "i-abcdef",
        "action": "delete"
    },
    "status": "Normal"
}

image.png

image.png

第三步: 模拟投递消息, 进行链路调试

前两步对接完成之后, 怎么能验证代码是正确的呢? 云监控提供强大的调试功能, 能模拟消息产生, 方便进行调试:

image.png

抢占式实例中断消息, 模拟内容如下:

{
    "product": "ECS",
    "resourceId": "acs:ecs:cn-shanghai:1331602849963181:instance/i-abcdef",
    "level": "WARN",
    "instanceName": "instanceName",
    "regionId": "cn-hangzhou",
    "name": "Instance:PreemptibleInstanceInterruption",
    "content": {
        "instanceId": "i-abcdef",
        "action": "delete"
    },
    "status": "Normal"
}

方式2: 直接API对接, 轮询方式

具体请参见: 查询抢占式实例中断事件 一文。

相关实践学习
基于云监控实现的监控系统
通过阿里云云监控功能给非阿里云主机安装监控插件,从而实现对非阿里云主机的各项指标进行监控和管理,在配置报警规则和报警人的情况下,能对特定的场景做出报警反应通知到报警人的手机上。
相关文章
|
5月前
|
运维 Serverless 数据处理
函数计算产品使用问题之配置了预留实例,如果请求超时实例是否会退出
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
29天前
|
数据采集 传感器
定时中断基本结构
【10月更文挑战第21天】定时中断是在微控制器或计算机系统中,按预设时间间隔自动触发中断请求的机制。它由定时器硬件模块(含计数器、时钟源、控制寄存器)、中断控制器(处理中断请求、设置优先级、中断屏蔽)和中断服务程序(保存现场、执行任务、恢复现场)组成,实现定时任务的精确执行。
|
4月前
自动发消息程序
【7月更文挑战第7天】
33 4
|
5月前
|
消息中间件 Arthas 监控
消息队列 MQ产品使用合集之每次重置reconsumeTimes就无法达到死信阈值,重试次数是否就要应用方控制
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
消息队列 MQ产品使用合集之每次重置reconsumeTimes就无法达到死信阈值,重试次数是否就要应用方控制
2.4总线操作和定时
2.4总线操作和定时
199 0
2.4总线操作和定时
|
消息中间件
消息队列:第四章:延迟检查队列
消息队列:第四章:延迟检查队列
153 0
消息队列:第四章:延迟检查队列
|
消息中间件 测试技术 API
FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)
我们在前面单独介绍过FreeRTOS的任务通知和消息队列, 但是在FreeRTOS中任务间的通讯还有信号量,邮箱,事件组标志等可以使用 这篇文章就这些成员与消息队列和任务通知的关系进行说明分析
1082 0
FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)
|
消息中间件 存储 安全
探索FreeRTOS的功能:线程,消息队列,邮箱,信号量,互斥量,任务通知,延时,虚拟定时器
探索FreeRTOS的功能:线程,消息队列,邮箱,信号量,互斥量,任务通知,延时,虚拟定时器
1943 0
|
存储 安全 网络协议
WCF服务调用超时错误:套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:05:30”(已解决)
WCF服务调用超时错误:套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:05:30”(已解决)
685 0