Recomendações para o desenvolvimento de aplicativos prontos para produção
Importante
Esta é a documentação do Azure Sphere (herdado). O Azure Sphere (herdado) 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 do Azure Sphere, há várias coisas a serem consideradas 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 concluídos pode reduzir o número de problemas encontrados 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 HL (alto nível), no RT (tempo real) Os aplicativos de alto nível são executados em contêineres no sistema operacional do Azure Sphere e os RTApps (aplicativos com capacidade para tempo real) são executados em bare-metal ou com um RTOS (sistema operacional em tempo real) nos núcleos em tempo real.
As recomendações fornecidas aqui destinam-se a ajudá-lo a aumentar a qualidade e a produtividade em seus aplicativos prontos para produção. A lista de verificação abaixo fornece uma lista concisa de sugestões de design para ambos os tipos de aplicativo, 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 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 designs 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 final no modo de versão antes de implantar um aplicativo na produção. Certifique-se de compilar e testar o pacote de versão antes de implantá-lo.
- Use uma política de avisos zero 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 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 fornecer comprimentos fixos aos membros da matriz em vez de usar ponteiros para a memória alocada dinamicamente.
- Evite a alocação dinâmica de memória 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 e buffers dinâmicos
- Considere usar 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.
- Sempre use códigos de saída.
- Se um aplicativo detectar que está em um estado irrecuperável e exigir uma reinicialização, verifique se ele sempre é tratado como uma saída de aplicativo "limpa", em vez de arriscar um estado de deadlock.
- Implemente o tratamento de erros e o registro em log. Para obter mais informações, consulte Tratamento de erros e registro em log.
- Use um temporizador do sistema como um watchdog para detectar se o aplicativo está em um estado irrecuperável ou parado (como deadlock, memória esgotada ou conectividade não recuperada por meio da lógica implementada) e efetue a recuperação adequada. Para obter mais informações, consulte Usar um temporizador do sistema como um watchdog.
Tratamento 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 de verificação de integridade de conectividade adequada 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 após o envio de dados, acompanhe o tempo total de atividade e defina um temporizador de desligamento.
- O cURL atualizou recentemente o comportamento de retorno de chamada e as práticas recomendadas. Embora o Azure Sphere tenha se esforçado para garantir que as versões mais antigas do comportamento cURL continuem funcionando conforme o esperado, é recomendável seguir as diretrizes mais recentes de segurança e confiabilidade ao usar o 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 chamar curl_multi_socket_action explicitamente pelo menos uma vez após chamadas para curl_multi_add_handle.
Gerenciamento e uso de memória
- Acompanhe o uso de memória do aplicativo com as APIs do sistema operacional do Azure Sphere e verifique se os aplicativos reagem adequadamente ao uso inesperado de memória.
Sugestões de design de aplicativos principais em tempo real
- Habilite o temporizador de watchdog MT3620 para detectar deadlock e implementar a lógica de recuperação adequada.
- Implemente comunicações entre núcleos para aplicativos híbridos 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 obter 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.