Recommandations pour le développement d’applications prêtes pour la production
Important
Il s’agit de la documentation Azure Sphere (héritée). Azure Sphere (hérité) prend sa retraite le 27 septembre 2027 et les utilisateurs doivent migrer vers Azure Sphere (intégré) pour l’instant. Utilisez le sélecteur de version situé au-dessus du TOC pour afficher la documentation Azure Sphere (intégrée).
Lorsque vous développez des applications pour vos appareils Azure Sphere, il existe plusieurs éléments à prendre en compte pour vous assurer que vos applications sont prêtes pour la production. Cette rubrique inclut une liste de vérification des meilleures pratiques pour vérifier que vos applications sont prêtes pour le déploiement pilote ou de production. La confirmation de ces éléments peut réduire le nombre de problèmes rencontrés en production et faciliter le diagnostic des problèmes qui surviennent.
Lorsque vous développez une application Azure Sphere, déterminez s’il s’exécutera sur le haut niveau (HL), le cœur en temps réel (RT) ou un hybride des deux. Les applications de haut niveau s’exécutent en conteneur sur le système d’exploitation Azure Sphere et les applications compatibles en temps réel (RTApps) s’exécutent sur un système d’exploitation nu ou avec un système d’exploitation en temps réel (RTOS) sur les cœurs en temps réel.
Les recommandations fournies ici sont destinées à vous aider à augmenter la qualité et la productivité dans vos applications prêtes pour la production. La liste de contrôle ci-dessous fournit une liste concise des suggestions de conception pour les deux types d’application, ainsi que des considérations de base de codage et de conception de solution recommandées, y compris des liens vers des rubriques qui traitent de chaque point plus en détail. Ces suggestions sont dérivées de nos partenariats avec nos clients, notamment l’analyse des champs, les révisions de code et les interactions entre les applications déployées en production dans des solutions et des conceptions d’appareils réelles.
Problèmes courants
- Assurez-vous que les applications prêtes pour la production n’utilisent pas d’ensembles d’outils bêta.
- Lorsque vous ciblez l’ensemble d’API, utilisez les derniers outils CMake et Azure Sphere.
- Pour garantir l’optimisation et la taille complètes du code, envisagez de compiler les packages d’images finaux en mode Mise en production avant de déployer une application en production. Veillez à générer et tester le package Release avant de le déployer.
- Utilisez une stratégie d’avertissements zéro lors de l’exécution d’une build complète pour vous assurer que les avertissements du compilateur sont intentionnellement traités.
- Configurez un pipeline CI/CD cohérent et utilisez une stratégie de branchement appropriée.
Problèmes liés à la mémoire
- Dans la mesure du possible, définissez toutes les chaînes fixes communes au
global const char*
lieu de coder en dur, afin qu’elles puissent être utilisées comme pointeurs de données. - Si les structures de données globales sont raisonnablement petites, envisagez de donner des longueurs fixes aux membres du tableau plutôt que d’utiliser des pointeurs vers une mémoire allouée dynamiquement.
- Évitez l’allocation de mémoire dynamique dans la mesure du possible.
- Pour les fonctions qui retournent un pointeur vers une mémoire tampon, envisagez de convertir en fonctions qui retournent un pointeur de mémoire tampon référencé et sa taille associée aux appelants.
- Dans la mesure du possible, définissez toutes les chaînes fixes communes au
Conteneurs dynamiques et mémoires tampons
- Envisagez d’utiliser une approche d’allocation incrémentielle pour les conteneurs tels que des listes et des vecteurs.
Suggestions de conception d’applications principales de haut niveau
Notions de base générales
- Initialisez et détruisez correctement tous les gestionnaires lors de la sortie ou de l’erreur.
- Utilisez toujours les codes de sortie.
- Si une application détecte qu’elle est dans un état irrécupérable et nécessite un redémarrage, assurez-vous qu’elle est toujours gérée comme une sortie d’application « propre », plutôt que de risquer un état d’interblocage.
- Implémentez la gestion et la journalisation des erreurs. Pour plus d’informations, consultez Gestion et journalisation des erreurs.
- Utilisez un minuteur système comme agent de surveillance pour détecter si l’application est dans un état ou un blocage irrécupérable (par exemple, interblocage, mémoire épuisée ou connectivité qui ne récupère pas bien que la logique implémentée) et effectue une récupération appropriée. Pour plus d’informations, consultez Utiliser un minuteur système comme agent de surveillance.
Gestion de l’accès concurrentiel
- Utilisez EventLoop dans la mesure du possible.
- Recherchez une efficacité sur les tâches simultanées.
- Évaluez quand utiliser des threads et une étendue pour des tâches spécifiques uniquement. Pour plus d’informations sur l’utilisation de threads, consultez Gestion de l’accès concurrentiel.
Surveillance de la connectivité
- Implémentez une tâche de vérification de l’intégrité de la connectivité appropriée basée sur un ordinateur à état robuste qui vérifie régulièrement l’état de la connexion Internet.
- Pour les solutions nécessitant une gestion de l’alimentation, arrêtez la puce Azure Sphere après l’envoi de données, suivez le temps d’activité total et définissez un minuteur d’arrêt.
- cURL a récemment mis à jour le comportement de rappel et les meilleures pratiques. Bien qu’Azure Sphere ait pris des mesures pour garantir que les versions antérieures du comportement cURL continuent de fonctionner comme prévu, il est recommandé de suivre les dernières instructions pour la sécurité et la fiabilité lors de l’utilisation de curl_multi, car l’utilisation de rappels récursifs peut entraîner des incidents inattendus, des pannes de connectivité et des vulnérabilités de sécurité potentielles. Si un TimerCallback se déclenche avec un délai d’expiration de 0 ms, traitez-le comme un délai d’expiration de 1 ms pour éviter les rappels récursifs. Veillez également à appeler curl_multi_socket_action explicitement au moins une fois après les appels à curl_multi_add_handle.
Gestion et utilisation de la mémoire
- Suivez l’utilisation de la mémoire de l’application avec les API du système d’exploitation Azure Sphere et assurez-vous que les applications réagissent de manière appropriée à une utilisation inattendue de la mémoire.
Suggestions de conception d’application en temps réel
- Activez le minuteur de surveillance MT3620 pour détecter le blocage et implémenter une logique de récupération appropriée.
- Implémentez des communications inter-cœurs pour les applications hybrides HL-core et RT-core.
Considérations relatives à la conception de la solution
Configuration requise pour la connectivité et résolution des problèmes
- Vérifiez que toutes les conditions préalables réseau sont remplies. Pour plus d’informations, consultez Configuration requise pour la connectivité et résolution des problèmes.
- Résoudre les problèmes de connectivité à l’aide
OSNetworkRequirementCheck-HLApp
etOSNetworkRequirementChecker-PC
.
Contenu recommandé
Pour plus d’éléments à prendre en compte lors du déplacement d’une solution IoT vers un environnement de production, consultez Déplacer une solution IoT de test en production.