Recommandations pour le développement d’applications prêtes pour la production
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 un déploiement pilote ou de production. La confirmation que ces éléments sont terminés peut réduire le nombre de problèmes que vous rencontrez en production et faciliter le diagnostic des problèmes qui surviennent.
Lorsque vous développez une application Azure Sphere, décidez si elle s’exécutera sur le cœur de 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 en mode 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 à améliorer la qualité et la productivité de vos applications prêtes pour la production. La liste de contrôle ci-dessous fournit une liste concise de suggestions de conception pour les deux types d’applications, ainsi que des principes de base du codage recommandés et des considérations relatives à la conception de solutions, y compris des liens vers des rubriques qui traitent de chaque point plus en détail. Ces suggestions sont issues de nos partenariats avec nos clients, notamment l’analyse de terrain, les révisions de code et les interactions de support des applications déployées en production dans des solutions réelles et des conceptions d’appareils.
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’image 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 de zéro avertissement 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 courantes comme
global const char*
in au 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 la mémoire allouée dynamiquement.
- Évitez l’allocation dynamique de mémoire 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 courantes comme
Conteneurs et mémoires tampons dynamiques
- Envisagez d’utiliser une approche d’allocation incrémentielle pour les conteneurs tels que les listes et les vecteurs.
Suggestions de conception d’applications de base de haut niveau
Principes de base généraux
- Initialisez et détruisez correctement tous les gestionnaires en cas de sortie ou d’erreur.
- Utilisez toujours des 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 en tant qu’agent de surveillance pour détecter si l’application est dans un état irrécupérable ou un blocage (par exemple, un blocage, une mémoire épuisée ou une connectivité qui ne récupère pas par le biais de la logique implémentée) et effectuer une récupération appropriée. Pour plus d’informations, consultez Utiliser un minuteur système en tant qu’agent de surveillance.
Gestion de l’accès concurrentiel
- Utilisez EventLoop dans la mesure du possible.
- Recherchez l’efficacité des tâches simultanées.
- Évaluez quand utiliser des threads et de l’étendue pour des tâches spécifiques uniquement. Pour plus d’informations sur l’utilisation des threads, consultez Gestion de l’accès concurrentiel.
Surveillance de la connectivité
- Implémentez une tâche de contrôle d’intégrité de la connectivité appropriée basée sur un ordinateur à états robuste qui vérifie régulièrement les status de la connexion Internet.
- Pour les solutions qui nécessitent une gestion de l’alimentation, mettez la puce Azure Sphere hors tension après l’envoi de données, suivez le temps de disponibilité 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 s’assurer que les versions antérieures du comportement de cURL continuent de fonctionner comme prévu, il est recommandé de suivre les dernières instructions en matière de sécurité et de fiabilité lors de l’utilisation de curl_multi, car l’utilisation de rappels récursifs peut entraîner des blocages inattendus, des pannes de connectivité et des failles 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 explicitement curl_multi_socket_action 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 des applications 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’applications principales en temps réel
- Activez le minuteur de surveillance MT3620 pour détecter l’interblocage et implémenter la logique de récupération appropriée.
- Implémentez des communications intercœurs pour les applications hybrides HL-core et RT-core.
Considérations relatives à la conception de la solution
Exigences de connectivité et résolution des problèmes
- Vérifiez que toutes les conditions préalables du réseau sont remplies. Pour plus d’informations, consultez Configuration requise pour la connectivité et résolution des problèmes.
- Résolvez les problèmes de connectivité à l’aide de
OSNetworkRequirementCheck-HLApp
etOSNetworkRequirementChecker-PC
.
Contenu recommandé
Pour obtenir des éléments supplémentaires à prendre en compte lors du déplacement d’une solution IoT vers un environnement de production, consultez Déplacer une solution IoT du test à la production.