Observação:

Dimensionamento Automático de um Pool de Instâncias do Oracle Cloud Infrastructure com base nas Solicitações HTTP do Balanceador de Carga do OCI

Introdução

Neste tutorial, veremos como dimensionar automaticamente um pool de instâncias do OCI (Oracle Cloud Infrastructure) com base no número de solicitações HTTP recebidas pelo Balanceador de Carga do OCI. Abordaremos três tópicos principais.

OCI Monitoring: Use o serviço OCI Monitoring para monitorar de forma ativa e passiva os recursos da nuvem usando os recursos de métricas e alarmes. O serviço OCI Monitoring usa métricas para monitorar recursos e alarmes a fim de notificá-lo quando essas métricas atenderem aos acionadores especificados pelo alarme.

OCI Notifications: Quando algo acontece com seus recursos no OCI, você pode obter mensagens legíveis por meio de pontos finais suportados, incluindo mensagens de e-mail e texto (SMS) usando alarmes, regras de evento e conectores. Você também pode automatizar tarefas por meio de pontos finais HTTPS personalizados e do OCI Functions.

OCI Functions: O OCI Functions é uma plataforma totalmente gerenciada, multi-tenant, altamente escalável e sob demanda, Functions-as-a-Service. Ela foi criada no OCI de nível empresarial e desenvolvida pelo mecanismo de código-fonte aberto Fn Project. Use o OCI Functions (às vezes abreviado como Functions e anteriormente conhecido como Oracle Functions) quando quiser focar a gravação de código para atender às necessidades do negócio.

Arquitetura de Alto Nível

T3_1

Observação:

Objetivos

Pré-requisitos

Tarefa 1: Configurar Grupos Dinâmicos

Vá para seu domínio, clique em Grupos Dinâmicos e crie os grupos a seguir.

Nome do Grupo Dinâmico: MyFunctions.

ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}

Tarefa 2: Criar Políticas

Vá para Políticas e crie as políticas a seguir.

Nome da Política: FunctionsPolicies.

Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage compute-management-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage load-balancers in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read metrics in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read alarms in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-pools in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME

Tarefa 3: Criar OCI Container Registry

  1. Vá para Serviços do Desenvolvedor, clique em Registro de contêiner e crie um repositório privado para a imagem Fn.

    Nome do Repositório: lab/fn-autoscale-instance-pool.

    T3_1

  2. Verifique os repositórios e anote o Namespace.

    T3_1

  3. Abra o shell de terminal no qual você tem a CLI do OCI e o Docker instalados e prossiga com o log-in no registro. Verifique o URL correto da sua região. Neste tutorial, estamos usando a região Leste do Brasil (São Paulo) na qual o URL do registro é gru.ocir.io.

    docker login gru.ocir.io
    Username: <your container namespace>/youruser
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    T3_3

Tarefa 4: Criar as Funções do OCI Python para Dimensionar Automaticamente o Pool de Instâncias

Observação: certifique-se de ter selecionado sua sub-rede privada, a mesma sub-rede do pool de streams.

  1. Vá para a Console do OCI e clique em Serviços do Desenvolvedor. Em Funções, clique em Aplicativos e Criar aplicativo.

    T9_1

  2. Crie algumas configurações para definir os tamanhos de dimensionamento.

    Observação: Essas variáveis de configuração são usadas para determinar os valores que a função usará para reduzir e reduzir o pool de instâncias.

    Nome do segredo Valor
    INSTANCE_POOL_TARGET_SIZE Defina o valor para o novo tamanho do pool de instâncias
    INSTANCE_POOL_DESIRED_SIZE Definir o tamanho regular do pool de instâncias

    Para este tutorial, estamos usando um pool de instâncias de 1 instância e dimensionamento para 2.

    T4_2

  3. Vá para o shell de terminal no qual você tem o Docker, a CLI do OCI e a CLI do Fn Project instalados e execute os comandos a seguir para inicializar a função.

    Observação: Se você seguiu as tarefas, o comando de log-in do Docker já foi executado até agora, caso contrário, prossiga com o log-in do Docker na Tarefa 3.3.

    mkdir lab
    cd lab
    fn create context oci-cloud --provider oracle
    fn use context oci-cloud
    fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID
    fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com
    fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab
    fn init --runtime python fn-autoscale-instance-pool
    cd fn-autoscale-instance-pool
    ls -lrt
    

    Observação: Neste tutorial, estamos usando a região Leste do Brasil (São Paulo), se você estiver usando outra região, será necessário alterar os locais api-url e registry.

    T4_3

    O comando init criará uma função Hello World em func.py. Substituiremos esse código.

  4. Obtenha o código de amostra da função Python aqui: func.py e substitua o func.py local criado durante o comando da função init.

    # Copy the function code from this lab and save it on /tmp/func.py in your shell machine
    ls -lrt /tmp/func.py
    
    # Overwrite the func.py with tha lab's code
    cp /tmp/func.py func.py
    
    # Add the OCI package on the requirements.txt file, this will be needed to work with OCI.
    echo -e "\noci" >> requirements.txt
    
    # Check if requirements.txt has two lines
    cat requirements.txt
    

    T9_1

  5. Criar o novo código e implantar a função.

    ls -lrt
    fn deploy --app MyApp
    

    T4_1

Tarefa 5: Criar as Notificações do OCI

  1. Vá para a Console do OCI e clique em Serviços do Desenvolvedor. Em Integração de Aplicativos, selecione Notificações e clique em Criar Tópico.

    Nome: AutoScaleTopic.

    T5_1

  2. Clique em Assinaturas para criar uma nova assinatura e selecionar a função criada na Tarefa 4.

    T5_2

Tarefa 6: Criar a Definição de Alarme para Expansão (Ajustar o Tamanho do Pool de Instâncias ao Valor de Destino)

  1. Vá para a Console do OCI e clique em Observabilidade e Gerenciamento. Em Monitoring, selecione Definições de Alarme e clique em Criar Alarme.

    Observação: Os limites, intervalo neste alarme, são definidos para o tutorial. Você pode personalizar com suas próprias necessidades, dependendo do seu aplicativo.

    Nome do Alerta: instance_pool_scale_OUT.

  2. Insira as informações a seguir para definir o alarme.

    1. Na seção Metric Description, digite as informações a seguir.

      • Nome da Métrica: oci_lbaas.
      • Nome da Métrica: HttpRequests.
      • Intervalo: 1 minute.
      • Estatística: Max.
    2. Na seção Metric Dimensions, digite as informações a seguir.

      • Primeira dimensão da métrica:

        • Nome da Dimensão: resourceID.
        • Valor da Dimensão: Selecione o OCID do balanceador de carga.
      • Segunda dimensão da métrica:

        • Nome da Dimensão: backendSetName.
        • Valor da Dimensão: Selecione seu nome backendSet.

      T6_1

    3. Na seção Regra de Acionamento 1, especifique as informações a seguir.

      • Operador: greater than.
      • Valor: 30.
      • Corpo do Alarme: O número de conexões é maior do que o esperado; inicie o processo de dimensionamento.

      T6_1

  3. Especifique as informações a seguir para definir as notificações de alarme.

    1. Na seção Destino, insira as informações a seguir.

      • Serviço de Destino: Selecione Notificações.
      • Compartimento: Selecione seu compartimento.
      • Tópico: Selecione seu tópico.
    2. Na seção Formato da Mensagem, selecione Enviar Mensagens Pretty JSON (texto bruto com quebras de linha) e, para fins de teste, selecione Repetir notificação? com 1 minuto de Frequência de notificação.

    T6_1

  4. Clique em Opções Avançadas e adicione uma nova tag.

    Observação: Esta é uma marcação obrigatória para definir o tipo de escala, entrada ou saída.

    Namespace de Tag: Selecione Nenhum (aplicar uma tag de formato livre).
    Chave de Tag: autoscaling_type. Valor: out.

    T6_1

Tarefa 7: Criar a Definição de Alarme para Redução (Ajustar o Tamanho do Pool de Instâncias de volta ao Tamanho Desejado)

  1. Vá para a Console do OCI e clique em Observabilidade e Gerenciamento. Em Monitoring, selecione Definições de Alarme e clique em Criar Alarme.

    Observação: Os limites, intervalo neste alarme, são definidos para o tutorial. Você pode personalizar com suas próprias necessidades, dependendo do seu aplicativo.

    Nome do Alerta: instance_pool_scale_IN.

  2. Insira as informações a seguir para definir o alarme.

    1. Na seção Metric Description, digite as informações a seguir.

      • Nome da Métrica: oci_lbaas.
      • Nome da Métrica: HttpRequests.
      • Intervalo: 1 minute.
      • Estatística: Max.
    2. Na seção Metric Dimensions, digite as informações a seguir.

      • Primeira dimensão da métrica:

        • Nome da Dimensão: resourceID.
        • Valor da Dimensão: Selecione o OCID do balanceador de carga.
      • Segunda dimensão da métrica:

        • Nome da Dimensão: backendSetName.
        • Valor da Dimensão: Selecione seu nome backendSet.
    3. Na seção Regra de Acionamento 1, especifique as informações a seguir.

      • Operador: less than.
      • Valor: 30.
      • Corpo do Alarme: A contagem de conexões volta ao valor aceitável, chamando a redução para reduzir o número de instâncias de volta ao valor desejado.

      T7_1

  3. Especifique as informações a seguir para definir as notificações de alarme.

    1. Na seção Destino, insira as informações a seguir.

      • Serviço de Destino: Selecione Notificações.
      • Compartimento: Selecione seu compartimento.
      • Tópico: Selecione seu tópico.
    2. Na seção Formato da Mensagem, selecione Enviar Mensagens Pretty JSON (texto não processado com quebras de linha).

  4. Clique em Opções Avançadas e adicione uma nova tag.

    Observação: Esta é uma marcação obrigatória para definir o tipo de escala, entrada ou saída.

    Namespace de Tag: Selecione Nenhum (aplicar uma tag de formato livre).
    Chave de Tag: autoscaling_type. Valor: in.

    T7_1

Tarefa 8: Criar Carga e Verificar o Trabalho do Alarme

  1. Obtenha seu IP LoadBalancer e execute várias chamadas para seu aplicativo na porta 80. Abra a console do shell e execute o código a seguir para chamar o balanceador de carga.

    i=1
    while true
    do
    echo "Request $i"
       curl http://your-ip-here
       ((i++))
       echo ""  # Prints a newline for better readability between requests
    done
    

    Saída da carga simples do aplicativo.

    T8_1

    Observação: Este é um servidor Web HTTP Apache simples para demonstrar o cenário.

  2. Verifique o tamanho e o status reais do pool de instâncias. Para este tutorial, temos um pool de instâncias com o tamanho 1.

    T8_1

  3. Abra a definição do alarme para exibir as métricas e verificar se o alarme será acionado.

    T8_1

    T8_1

  4. Após alguns minutos, dependendo do intervalo de métrica, a função de expansão será acionada.

    Abra os pools de instâncias e verifique o Estado, que é Dimensionamento e a Contagem de Instâncias de Destino é 2.

    T8_1

    Após o processo de dimensionamento, você poderá ver que o tamanho do pool de instâncias é 2.

    T8_1

  5. Interrompa o script shell e aguarde até que o alarme da transição de expansão volte para OK e, em seguida, observe o alarme para redução. Aguarde alguns minutos até que ambos os alarmes sejam atualizados e observe quando o alarme de entrada será acionado.

    T8_1

    Agora, o alarme de redução está em estado de incêndio.

    T8_1

    Observe que HttpRequests caiu para um número abaixo do limite de 30.

    T8_1

    A redução do pool de instâncias foi iniciada.

    T8_1

    Observe que o tamanho do pool de instâncias está de volta ao valor desejado de 1.

    T8_1

Confirmação

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.