Recomendações para o desenvolvimento de aplicativos prontos para produção
Importante
Esta é a documentação do Azure Sphere (Legado). O Azure Sphere (Legado) será desativado em 27 de setembro de 2027 e os usuários devem migrar para o Azure Sphere (Integrado) até esse momento. Use o seletor de versão localizado acima do sumário para exibir a documentação do Azure Sphere (Integrado).
À medida que você desenvolve aplicativos para seus dispositivos Azure Sphere, há várias coisas a considerar para garantir que seus aplicativos estejam prontos para produção. Este tópico inclui uma lista de verificação de práticas recomendadas para verificar se seus aplicativos estão prontos para implantação piloto ou de produção. Confirmar que esses itens estão completos pode reduzir o número de problemas que você encontra na produção e facilitar o diagnóstico de quaisquer problemas que surjam.
Ao desenvolver um aplicativo do Azure Sphere, decida se ele será executado no High-Level (HL), no núcleo Real-Time (RT) ou em um híbrido de ambos. Os aplicativos de alto nível são executados em contêineres no sistema operacional Azure Sphere e os aplicativos com capacidade em tempo real (RTApps) são executados em bare metal ou com um sistema operacional em tempo real (RTOS) nos núcleos em tempo real.
As recomendações fornecidas aqui destinam-se a ajudá-lo a aumentar a qualidade e a produtividade em suas aplicações prontas para produção. A lista de verificação abaixo fornece uma lista concisa de sugestões de design para ambos os tipos de aplicativos, bem como fundamentos de codificação recomendados e considerações de design de solução, incluindo links para tópicos que discutem cada ponto com mais detalhes. Essas sugestões são derivadas de nossas parcerias com os clientes, incluindo análise de campo, revisões de código e interações de suporte de aplicativos implantados em produção em soluções do mundo real e projetos de dispositivos.
Problemas comuns
- Certifique-se de que os aplicativos prontos para produção não usem conjuntos de ferramentas beta.
- Ao direcionar o conjunto de APIs, use as ferramentas mais recentes do CMake e do Azure Sphere.
- Para garantir a otimização e o tamanho completos do código, considere compilar os pacotes de imagem finais no modo Release antes de implantar um aplicativo na produção. Certifique-se de criar e testar o pacote Release antes de implantá-lo.
- Use uma política de zero avisos ao executar uma compilação completa para garantir que os avisos do compilador sejam abordados intencionalmente.
- Configure um pipeline de CI/CD consistente e use uma estratégia de ramificação adequada.
Problemas relacionados com a memória
- Quando possível, defina todas as cadeias de caracteres fixas comuns como
global const char*
em vez de codificação, para que possam ser usadas como ponteiros de dados. - Se as estruturas de dados globais forem razoavelmente pequenas, considere dar comprimentos fixos aos membros da matriz em vez de usar ponteiros para memória alocada dinamicamente.
- Evite a alocação de memória dinâmica sempre que possível.
- Para funções que retornam um ponteiro para um buffer de memória, considere converter em funções que retornam um ponteiro de buffer referenciado e seu tamanho relacionado aos chamadores.
- Quando possível, defina todas as cadeias de caracteres fixas comuns como
Contêineres dinâmicos e buffers
- Considere o uso de uma abordagem de alocação incremental para contêineres, como listas e vetores.
Sugestões de design de aplicativos principais de alto nível
Fundamentos gerais
- Inicialize e destrua corretamente todos os manipuladores após a saída ou erro.
- Utilize sempre códigos de saída.
- Se um aplicativo detetar que está em um estado irrecuperável e requer uma reinicialização, certifique-se de que ele seja sempre tratado como uma saída de aplicativo "limpa", em vez de arriscar um estado de bloqueio.
- Implemente o tratamento e registro de erros. Para obter mais informações, consulte Tratamento e registro de erros.
- Use um temporizador do sistema como um cão de guarda para detetar se o aplicativo está em um estado irrecuperável ou paralisado (como deadlock, memória esgotada ou conectividade não recuperada através da lógica implementada) e efetuar a recuperação adequada. Para obter mais informações, consulte Usar um temporizador do sistema como um cão de guarda.
Manipulação de simultaneidade
- Use o EventLoop sempre que possível.
- Procure eficiência em tarefas simultâneas.
- Avalie quando usar threads e escopo apenas para tarefas específicas. Para obter mais informações sobre quando usar threads, consulte Manipulando simultaneidade.
Monitoramento de conectividade
- Implemente uma tarefa adequada de verificação da integridade da conectividade com base em uma máquina de estado robusta que verifica regularmente o status da conexão com a Internet.
- Para soluções que exigem gerenciamento de energia, desligue o chip do Azure Sphere depois de enviar dados, acompanhe o tempo de atividade total e defina um temporizador de desligamento.
- O cURL atualizou recentemente o comportamento e as práticas recomendadas de retorno de chamada. Embora o Azure Sphere tenha feito esforços para garantir que versões mais antigas do comportamento cURL continuem a funcionar conforme o esperado, é recomendável seguir as orientações mais recentes de segurança e confiabilidade ao usar curl_multi, pois o uso de retornos de chamada recursivos pode resultar em falhas inesperadas, interrupções de conectividade e possíveis vulnerabilidades de segurança. Se um TimerCallback for acionado com um tempo limite de 0ms, trate-o como um tempo limite de 1ms para evitar retornos de chamada recursivos. Certifique-se também de ligar para curl_multi_socket_action explicitamente pelo menos uma vez após as chamadas para curl_multi_add_handle.
Gerenciamento e uso de memória
- Rastreie o uso da memória do aplicativo com as APIs do sistema operacional Azure Sphere e garanta que os aplicativos reajam adequadamente ao uso inesperado da memória.
Sugestões de design de aplicativos principais em tempo real
- Habilite o temporizador de vigilância MT3620 para detetar deadlock e implementar a lógica de recuperação adequada.
- Implemente comunicações inter-core para aplicações híbridas HL-core e RT-core.
Considerações sobre o design da solução
Requisitos de conectividade e solução de problemas
- Certifique-se de que todos os pré-requisitos de rede sejam atendidos. Para obter mais informações, consulte Requisitos de conectividade e solução de problemas.
- Solucione problemas de conectividade usando
OSNetworkRequirementCheck-HLApp
eOSNetworkRequirementChecker-PC
.
Conteúdo recomendado
Para itens adicionais a serem considerados ao mover uma solução de IoT para um ambiente de produção, consulte Mover uma solução de IoT do teste para a produção.