O Elastic Container Instance (ECI) oferece suporte a instâncias preemptíveis. Para tarefas de curta duração e aplicações stateless com alta escalabilidade e tolerância a falhas, o uso de instâncias preemptíveis reduz efetivamente os custos. Este tópico descreve como criar uma instância de contêiner elástico preemptível.
Informações básicas
Uma instância preemptível é um recurso de computação de baixo custo baseado em lances. Você pode dar lances em recursos ociosos na Alibaba Cloud para executar seus contêineres. O sistema recupera esses recursos quando seu lance fica abaixo do preço de mercado atual ou quando o estoque de recursos é insuficiente.
Instâncias preemptíveis são adequadas para tarefas de curta duração e aplicações stateless altamente escaláveis e tolerantes a falhas, como serviços web com dimensionamento elástico, renderização de imagens, análise de big data e computação paralela em larga escala. Quanto mais distribuída, escalável e tolerante a falhas for sua aplicação, maior será a economia de custos e o aumento de throughput ao utilizar instâncias preemptíveis. Para obter mais informações, consulte O que é uma instância preemptível?.
Conceitos principais
Antes de criar uma instância preemptível, compreenda os seguintes conceitos:
-
Método de faturamento
O preço de mercado de uma instância preemptível varia conforme a oferta e a demanda. Ao criar uma instância preemptível, especifique uma política de lance. Se o seu lance for superior ao preço de mercado em tempo real para o tipo de instância especificado e houver estoque suficiente, a instância será criada com sucesso. Após a criação, durante o período de proteção (1 hora por padrão), a instância é faturada pelo preço de mercado vigente no momento da compra. Quando o período de proteção termina, o faturamento passa a seguir o preço de mercado em tempo real.
NotaAs instâncias preemptíveis têm desconto em comparação às instâncias de pagamento conforme o uso. O preço real oscila com base na oferta e na demanda, e a cobrança corresponde à duração efetiva de uso. Para obter mais informações, consulte Faturamento de instâncias preemptíveis.
-
Mecanismo de recuperação
Após o término do período de proteção, o sistema verifica automaticamente o preço de mercado e o estoque do tipo de instância a cada 5 minutos. Caso o preço de mercado ultrapasse o valor do seu lance ou o estoque do tipo de instância se torne insuficiente, o sistema libera a instância preemptível.
NotaCerca de 3 minutos antes de recuperar os recursos, o sistema gera um evento indicando que a instância está prestes a ser liberada.
Depois que o sistema recupera os recursos, o faturamento da instância é interrompido. As informações da instância são mantidas e seu status muda para Expired.
Observações de uso
Ao utilizar instâncias preemptíveis, observe o seguinte:
-
Escolha um tipo de instância apropriado e faça um lance adequado.
Para ajudar na seleção do tipo de instância e na definição do lance, chame as operações da OpenAPI do ECS e consulte as informações sobre instâncias preemptíveis dos últimos 30 dias. As operações relevantes são:
DescribeSpotPriceHistory: consulta os preços históricos das instâncias.
DescribeSpotAdvice: consulta dados como taxa média de liberação e taxa média de desconto das instâncias.
ImportanteDefina um lance suficientemente alto para absorver as flutuações do preço de mercado e alinhado às expectativas de custo do seu negócio. Essa prática aumenta a probabilidade de criar a instância preemptível com êxito e evita sua liberação devido a variações de preço, permitindo atender às necessidades comerciais enquanto reduz custos.
Armazene seus dados importantes em mídias de armazenamento que não sejam afetadas pela liberação de instâncias preemptíveis, como discos em nuvem (com a opção de liberação junto com a instância desativada) ou NAS.
Métodos de criação
Crie uma instância de contêiner elástico preemptível especificando um tipo de instância ECS ou definindo vCPU e memória:
-
Especificar um tipo de instância ECS
O faturamento segue o preço de mercado de pagamento conforme o uso do tipo de instância especificado, aplicando o desconto em tempo real.
-
Especificar vCPU e memória
Este método produz o mesmo efeito que especificar um tipo de instância ECS. O sistema seleciona automaticamente um tipo de instância ECS que atenda aos requisitos de recursos e preço. O faturamento baseia-se no preço de mercado desse tipo de instância correspondente. Em outras palavras, o desconto incide sobre o preço de mercado do tipo de instância ECS selecionado, e não sobre o preço de pagamento conforme o uso da configuração de vCPU e memória equivalente.
Este método aceita apenas especificações de 2 vCPUs ou mais. A tabela a seguir lista as especificações de vCPU e memória compatíveis. Caso você especifique uma configuração incompatível, o sistema arredondará automaticamente para a próxima especificação válida.
vCPU
Memória (GiB)
2
2, 4, 8, 16
4
4, 8, 16, 32
8
8, 16, 32, 64
12
12, 24, 48, 96
16
16, 32, 64, 128
24
24, 48, 96, 192
32
32, 64, 128, 256
52
96, 192, 384
64
128, 256, 512
Configurações
API
Ao chamar a operação CreateContainerGroup para criar uma instância de contêiner elástico, utilize o parâmetro SpotStrategy para definir a política de lance, o parâmetro SpotPriceLimit para estabelecer o preço máximo por hora e o parâmetro SpotDuration para configurar o período de proteção da instância preemptível. A tabela a seguir descreve esses parâmetros. Para obter mais informações, consulte CreateContainerGroup.
|
Parâmetro |
Tipo |
Exemplo |
Descrição |
|
SpotStrategy |
string |
SpotWithPriceLimit |
Política de lance da instância. Valores válidos:
|
|
SpotPriceLimit |
number |
0.2 |
Preço máximo por hora da instância preemptível. O valor aceita até três casas decimais. Este parâmetro é obrigatório quando o parâmetro |
|
SpotDuration |
long |
1 |
Período de proteção da instância preemptível, em horas. O valor padrão é 1. Defina o valor como 0 para não aplicar nenhum período de proteção. |
O código de exemplo a seguir mostra como criar uma instância preemptível usando o SDK para Python:
#!/usr/bin/env python
#coding=utf-8
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkeci.request.v20180808.CreateContainerGroupRequest import CreateContainerGroupRequest
client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou')
request = CreateContainerGroupRequest()
request.set_accept_format('json')
request.set_SecurityGroupId("sg-xxx")
request.set_VSwitchId("vsw-xxx")
request.set_ContainerGroupName("test-spot")
request.set_SpotStrategy('SpotAsPriceGo')
request.set_InstanceType('ecs.c5.large')
request.set_Containers([
{
"Image": "nginx",
"Name": "nginx"
}
])
response = client.do_action_with_exception(request)
print(response)
Console
Ao criar uma instância ECI preemptível no console do Elastic Container Instance, na seção Basic Configurations, defina Billing Method como Spot Instance.
Este método apresenta as seguintes limitações:
Não é possível configurar a política de lance; o padrão é
SpotAsPriceGo, em que o sistema dá lances automaticamente pelo preço de mercado atual.O período de proteção não pode ser definido como zero; o valor padrão é 1 hora.