Compartir vía


Recomendaciones para desarrollar aplicaciones listas para producción

Importante

Esta es la documentación de Azure Sphere (heredado). Azure Sphere (heredado) se retira el 27 de septiembre de 2027 y los usuarios deben migrar a Azure Sphere (integrado) en este momento. Use el selector de versiones situado encima de la TOC para ver la documentación de Azure Sphere (integrado).

A medida que desarrolle aplicaciones para los dispositivos de Azure Sphere, hay varias cosas que se deben tener en cuenta para asegurarse de que las aplicaciones están listas para producción. En este tema se incluye una lista de comprobación de los procedimientos recomendados para comprobar que las aplicaciones están listas para la implementación piloto o de producción. Confirmar que estos elementos están completos puede reducir el número de problemas que se encuentran en producción y facilitar el diagnóstico de los problemas que surgen.

Al desarrollar una aplicación de Azure Sphere, decida si se ejecutará en el núcleo de alto nivel (HL), el núcleo en tiempo real (RT) o un híbrido de ambos. Las aplicaciones de alto nivel se ejecutan en contenedores en el sistema operativo De Azure Sphere y las aplicaciones compatibles en tiempo real (RTApps) se ejecutan sin sistema operativo o con un sistema operativo en tiempo real (RTOS) en los núcleos en tiempo real.

Las recomendaciones que se proporcionan aquí están pensadas para ayudarle a aumentar la calidad y la productividad en las aplicaciones listas para producción. La lista de comprobación siguiente proporciona una lista concisa de sugerencias de diseño para ambos tipos de aplicación, así como aspectos básicos de codificación recomendados y consideraciones de diseño de soluciones, incluidos vínculos a temas que tratan cada punto con más detalle. Estas sugerencias se derivan de nuestras asociaciones con los clientes, incluidos el análisis de campos, las revisiones de código y las interacciones de soporte técnico de las aplicaciones implementadas en producción en soluciones y diseños de dispositivos reales.

Aspectos básicos de la codificación

  • Problemas comunes

    • Asegúrese de que las aplicaciones listas para producción no usen conjuntos de herramientas beta.
    • Al establecer como destino el conjunto de API, use las herramientas de CMake y Azure Sphere más recientes.
    • Para garantizar la optimización y el tamaño completos del código, considere la posibilidad de compilar los paquetes de imagen finales en modo de versión antes de implementar una aplicación en producción. Asegúrese de compilar y probar el paquete release antes de implementarlo.
    • Use una directiva de advertencias cero al realizar una compilación completa para asegurarse de que las advertencias del compilador se abordan intencionadamente.
    • Configure una canalización coherente de CI/CD y use una estrategia de bifurcación adecuada.
  • Problemas relacionados con la memoria

    • Cuando sea posible, defina todas las cadenas fijas comunes como global const char* en lugar de codificación rígida, por lo que se pueden usar como punteros de datos.
    • Si las estructuras de datos globales son razonablemente pequeñas, considere la posibilidad de proporcionar longitudes fijas a los miembros de la matriz en lugar de usar punteros para la memoria asignada dinámicamente.
    • Evite la asignación de memoria dinámica siempre que sea posible.
    • En el caso de las funciones que devuelven un puntero a un búfer de memoria, considere la posibilidad de convertir en funciones que devuelven un puntero de búfer al que se hace referencia y su tamaño relacionado con los autores de llamada.
  • Contenedores dinámicos y búferes

    • Considere la posibilidad de usar un enfoque de asignación incremental para contenedores como listas y vectores.

Sugerencias de diseño de aplicaciones principales de alto nivel

  • Aspectos básicos generales

    • Inicialice y destruya correctamente todos los controladores tras la salida o el error.
    • Use siempre códigos de salida.
    • Si una aplicación detecta que está en un estado irrecuperable y requiere un reinicio, asegúrese de que siempre se controla como una salida de aplicación "limpia", en lugar de arriesgarse a un estado de interbloqueo.
    • Implemente el control de errores y el registro. Para obtener más información, consulte Control de errores y registro.
    • Use un temporizador del sistema como guardián para detectar si la aplicación está en un estado irrecuperable o se detiene (por ejemplo, interbloqueo, memoria agotada o conectividad que no se recupera a través de la lógica implementada) y afecta la recuperación adecuada. Para obtener más información, consulte Uso de un temporizador del sistema como guardián.
  • Administrar la simultaneidad

    • Use EventLoop siempre que sea posible.
    • Busque eficacia en las tareas simultáneas.
    • Evalúe cuándo usar subprocesos y ámbito solo para tareas específicas. Para obtener más información sobre cuándo usar subprocesos, consulte Control de la simultaneidad.
  • Supervisión de la conectividad

    • Implemente una tarea de comprobación de estado de conectividad adecuada basada en una máquina de estado sólida que compruebe periódicamente el estado de la conexión a Internet.
    • En el caso de las soluciones que requieren administración de energía, apague el chip de Azure Sphere después de enviar datos, realice un seguimiento del tiempo de actividad total y establezca un temporizador de apagado.
    • cURL ha actualizado recientemente el comportamiento de devolución de llamada y las mejores prácticas. Aunque Azure Sphere ha realizado esfuerzos para garantizar que las versiones anteriores del comportamiento de cURL sigan funcionando según lo previsto, se recomienda seguir las instrucciones más recientes sobre seguridad y confiabilidad al usar curl_multi, ya que el uso de devoluciones de llamada recursivas puede dar lugar a bloqueos inesperados, interrupciones de conectividad y posibles vulnerabilidades de seguridad. Si timerCallback se activa con un tiempo de espera de 0 ms, vítelo como un tiempo de espera de 1 ms para evitar devoluciones de llamada recursivas. Asegúrese de llamar también a curl_multi_socket_action explícitamente al menos una vez después de seguir las llamadas a curl_multi_add_handle.
  • Administración y uso de memoria

    • Realice un seguimiento del uso de memoria de la aplicación con las API del sistema operativo de Azure Sphere y asegúrese de que las aplicaciones reaccionan correctamente a un uso inesperado de memoria.

Sugerencias de diseño de aplicaciones principales en tiempo real

  • Habilite el temporizador del guardián MT3620 para detectar interbloqueo e implementar la lógica de recuperación adecuada.
  • Implemente comunicaciones entre núcleos para aplicaciones híbridas de HL-core y RT-core.

Consideraciones sobre el diseño de soluciones

  • Requisitos de conectividad y solución de problemas

    • Asegúrese de que se cumplen todos los requisitos previos de red. Para más información, consulte Requisitos de conectividad y solución de problemas.
    • Solución de problemas de conectividad mediante OSNetworkRequirementCheck-HLApp y OSNetworkRequirementChecker-PC.

Para obtener más elementos que se deben tener en cuenta al mover una solución de IoT a un entorno de producción, consulte Traslado de una solución de IoT de prueba a producción.