Planejamento do Code Engine
IBM Cloud® Code Engine suporta estes tipos básicos de cargas de trabalho: aplicativos, tarefas, funções e frotas.
Um aplicativo ou app executa o seu código para entregar solicitações de HTTP. Além das solicitações de HTTP tradicionais, o IBM Cloud® Code Engine também suporta aplicativos que usam WebSockets como seu protocolo de comunicações. O número de instâncias em execução de um aplicativo é automaticamente aumentado ou reduzido (até zero) com base nas solicitações recebidas e nas suas configurações. Um app contém uma ou mais revisões. Uma revisão representa uma versão imutável das propriedades de configuração do app. Cada atualização de uma propriedade de configuração do app cria uma nova revisão do app.
Um trabalho executa uma ou mais instâncias do seu código executável em paralelo. Ao contrário dos aplicativos, que manipulam solicitações de HTTP, as tarefas são projetadas para executar uma vez e encerrar. Ao criar uma tarefa, é possível especificar informações de configuração de carga de trabalho que são usadas cada vez que a tarefa é executada.
Uma função é um trecho de código sem estado que executa tarefas à medida que é invocado por solicitações HTTP. Com as funções IBM Code Engine, você pode executar sua lógica de negócios de forma escalável e sem servidor. As funções IBM Code Engine fornecem um ambiente de tempo de execução otimizado para oferecer suporte a cenários de baixa latência e rápida expansão. Seu código de função pode ser escrito em um tempo de execução gerenciado que inclui versões específicas Node.js ou Python.
Uma frota, também chamada de frota sem servidor, executa uma ou mais instâncias de código de usuário para concluir um conjunto de tarefas especificadas. Os Fleets podem processar cargas de trabalho grandes e com uso intensivo de computação, permitir o controle dos perfis das máquinas e executar recursos de GPU. Os Fleets são de locatário único, implementam enfileiramento dinâmico de tarefas e oferecem controle total sobre a configuração do perfil da máquina. Além disso, as frotas podem se conectar a nuvens privadas virtuais (VPCs) para acessar com segurança os dados e serviços dos usuários.
| Característica | Aplicativo | Tarefa | Função | Frota |
|---|---|---|---|---|
| Tempo de execução (duração) | Longa execução (10 minutos por solicitação) | Longa duração (até 24 horas) | Curta duração (2 minutos ou menos) | Longa duração (minutos a semanas) |
| Latência de inicialização | Médio | Início planejado | Baixo | Baixo |
| Rescisão | Executar-continuamente. | Execução para conclusão | Execução para conclusão | Execução para conclusão |
| Chamada | A pedido ou permanentemente em execução | Planejado | A pedido, instantâneo | Planejado |
| Gabarito de Programação | Construção e execução baseadas em contêiner | Construção e execução baseadas em contêiner | Arquivos de código-fonte e metadados de dependência específicos do idioma | Construção e execução baseadas em contêiner |
| Paralelismo | Execução paralela, flexível | Execução paralela baixa a média | Alta execução paralela | Alta execução paralela e enfileiramento |
| Ampliação | Com base no número de solicitações | Baseado na definição de carga de trabalho de tarefa | Com base em eventos ou chamadas diretas | Com base no número de tarefas e instâncias simultâneas |
| Isolamento | Diversos locatários | Diversos locatários | Diversos locatários | Locatário único |
| Suporte de GPU | Não | Não | Não | True |
| Controle sobre a configuração da máquina | Sem Controle | Sem Controle | Sem Controle | controle total |
| Conectividade da VPC | Pelo Caminho Privado | Pelo Caminho Privado | Pelo Caminho Privado | Nativo (por meio do conjunto de sub-redes) |
| Otimizado para | Longa execução, carga de trabalho altamente complexa e escalabilidade sob demanda | Cargas de trabalho planejadas ou planejadas com altas demandas de recursos | Tempo de inicialização e ampliação rápida | Cargas de trabalho em grande escala e com uso intensivo de recursos computacionais |
Casos de uso do Code Engine
Enquanto os casos de uso para o Code Engine variam amplamente, aqui estão alguns exemplos para você começar.
- Experiente com contêineres, mas sem habilidade ou orçamento para gerenciar clusters
- Você é um desenvolvedor com conhecimento sobre contêineres. No entanto, você não quer a complexidade ou o consumo de tempo de gerenciamento de um cluster. Com o Code Engine, não é preciso se preocupar com as habilidades necessárias para gerenciar um cluster ou o tempo que leva para fazê-lo. Em vez disso, o Code Engine elimina essas complexidades e a equipe da IBM gerencia sua infraestrutura como parte do serviço da IBM Cloud.
- Cargas de trabalho com picos intermitentes
- Seu site fica ocupado nos finais de semana, mas tem menos tráfego durante a semana. Como este site apresenta picos de atividade seguidos por períodos de inatividade, o Code Engine é uma boa solução. Com o Code Engine, o aplicativo do website aumenta a capacidade das instâncias do aplicativo automaticamente para o aumento no tráfego e, em seguida, reduz novamente para os períodos de inatividade (até mesmo para zero).
- Cargas de trabalho em lote integradas com armazenamento
- Sua tarefa em lote processa salários de funcionário no término de cada mês. Como essa tarefa é executada mensalmente, ela fica inativa na maior parte do tempo, mas consome uma grande quantidade de CPU e memória quando é executada. A tarefa em lote precisa se integrar com o armazenamento para armazenar os resultados. Usando o Code Engine, é possível integrar a tarefa em lote com o IBM Cloud Object Storage e você é cobrado apenas pelos recursos usados pela tarefa ao ser executada. Quando a tarefa fica ociosa, ela não consome recursos e, portanto, não está incorrendo em encargos. No entanto, a tarefa pode incorrer em custos com a instância do IBM Cloud Object Storage.
- Traga sua carga de trabalho
- Parte de sua tarefa é criar imagens e implementá-las. Você tem experiência na criação e implementação de imagens de contêiner, mas deseja simplificar esse processo para que possa se concentrar em outras tarefas. Com o Code Engine, é possível construir imagens e implementá-las diretamente da mesma interface, simplificando assim as tarefas diárias e liberando o tempo para desenvolver mais código.
- Teste, prova de conceito ou "indecisão"
- Você está interessado em aprender mais sobre a arquitetura baseada em contêiner. Sua equipe desenvolveu um aplicativo, mas quer testá-lo antes que seja apresentado às partes interessadas. Este aplicativo é pequeno, então elas não querem pagar nem mesmo por um cluster pequeno e dedicado. Neste caso, é possível testar o aplicativo e, em seguida, fornecer uma prova de conceito do design para as partes interessadas sem o custo que um cluster dedicado pode requerer.
Quando usar um aplicativo, uma tarefa ou uma função
Os aplicativos e as tarefas são muito semelhantes. No final, ambos simplesmente executam código. No entanto, há alguns aspectos importantes a serem considerados quando você decide estruturar seu código como um app ou um job.
- O seu código precisa responder a um evento?
-
No contexto do Code Engine, qualquer solicitação de HTTP recebida (mesmo a solicitação para carregar uma página da web) ou uma chamada de API de REST é considerada um evento. O conceito de ser acionado por evento é muitas vezes o fator chave quando você escolhe entre um app ou uam tarefa porque, por definição, os apps são executados por causa de uma solicitação HTTP enquanto as tarefas são executadas como resultado de uma chamada.
-
Se você souber que a sua carga de trabalho responde às solicitações de HTTP recebidas, o app será a escolha certa. No entanto, se a sua carga de trabalho for executada e depois encerrada, uma tarefa será mais adequada.
- Como seu código escala?
-
Os apps e as tarefas são escaláveis. Os apps são escalados em resposta a critérios de tempo real mensuráveis, como o número de solicitações recebidas ativas, pois cada instância do seu app consegue processar apenas um determinado número de solicitações simultâneas por vez. As tarefas são escaladas com base em quantas instâncias são especificadas quando a tarefa é criada.
-
Para que um número específico de instâncias de seu código seja executado e cada uma delas possa ser executada sem uma solicitação de HTTP recebida, a escolha certa será uma tarefa. No entanto, se o número de instâncias precisar ser escalado dinamicamente com base na carga de HTTP recebida, usar os apps será mais adequado.
Cenários comuns para o Code Engine
Leia alguns desses cenários comuns para entender quando escolher um tipo específico de carga de trabalho.
- A sua carga de trabalho requer baixa latência ou é interativa?
- Se a sua carga de trabalho requerer que um cliente ou usuário aguarde sincronicamente pela resposta da solicitação e a resposta precisar estar disponível em alguns milissegundos, use um aplicativo. Os aplicativos fornecem um terminal externamente alcançável e respondem de forma síncrona à solicitação. Alguns exemplos dessas cargas de trabalho são websites, robôs de bate-papo e aplicativos móveis. Use aplicativos.
- O seu cálculo é leve e requer baixa CPU, memória e E/S?
- Se sua carga de trabalho for leve e requerer pouca CPU, memória e E/S, a opção de simultaneidade, disponível para aplicativos, pode ser útil. Um exemplo típico é um Servidor de API que fornece operações básicas e é suportado em um banco de dados NoSQL. Esses tipos de solicitações geralmente têm uma pequena quantidade de dados e requerem memória baixa ou menos ciclos de CPU. Com simultaneidade superior, o aplicativo pode processar os dados de uma primeira solicitação enquanto a segunda solicitação está aguardando E/S. Como os requisitos de CPU e memória são baixos, muitos pedidos podem ser executados simultaneamente. Use aplicativos.
- O seu cálculo é limitado à CPU, à memória ou à E/S?
- Para processar uma quantidade específica de dados, em que cada chunk dos dados é grande e requer uma grande quantidade de CPU e memória, as tarefas geralmente são a melhor escolha. No entanto, se a carga de trabalho requerer um padrão de solicitação-resposta, também será possível usar apps. Em ambos os casos, a tarefa de cálculo é executada com simultaneidade única. Cada instância de aplicativo ou trabalho de tarefa processa apenas uma solicitação ou chunk de dados simultaneamente para alavancar totalmente os recursos configurados para a instância. O paralelismo é alcançado pelo número de instâncias ou tarefas, em que o custo de criação de uma tarefa adicional é insignificante devido às altas restrições de recursos. Um exemplo típico é o processamento de dados de imagem em um bucket do Object Storage ou a entrega de modelos de aprendizado de máquina. Use aplicativos ou jobs.
- O seu cálculo é executado por muito tempo?
- Se o cálculo for executado por durações mais longas, as tarefas serão a melhor escolha devido à natureza assíncrona. A duração máxima dos aplicativos é sempre limitada porque a manutenção de uma conexão aberta em escala é cara. As cargas de trabalho típicas são modelos de aprendizado de máquina de treinamento ou otimização de hiperparâmetro. Use jobs.
- É possível especificar a simultaneidade do seu cálculo antecipadamente?
- Se você souber o quanto de cálculo é necessário para a execução, será possível executar uma tarefa com o número exato de instâncias até que ela seja concluída. Exemplos típicos disso são os ajustes de hiperparâmetro ou o treinamento de uma rede neural. Use jobs.
- A sua carga de trabalho reage a algum evento?
- Se for requerido que a sua carga de trabalho reaja a um evento, como uma confirmação de Git que é enviada por push para o seu repositório, um objeto que é transferido por upload em um bucket do Object Storage ou um documento que é modificado dentro do seu banco de dados, use os aplicativos. Os aplicativos fornecem um terminal que pode ser configurado para receber eventos da origem de eventos. Use aplicativos.
- É necessário processar uma grande quantidade de dados em um curto período de tempo em resposta a eventos ou solicitações?
- Se a sua carga de trabalho requerer uma resposta rápida para solicitações ou eventos não previstos, os aplicativos geralmente serão uma escolha melhor porque eles são escalados dinamicamente, mesmo do zero. Use aplicativos.
- Combinando apps e tarefas
- É possível até mesmo combinar apps e tarefas, nos quais um aplicativo pode iniciar uma tarefa para terceirizar cálculos específicos. As tarefas também podem consultar um aplicativo. Um exemplo típico de uma combinação de tarefas e apps é o treinamento e a entrega de modelos de aprendizado de máquina. As tarefas geralmente são usadas para treinar os modelos e os aplicativos são usados para entregar os modelos. Use aplicativos e jobs.