Compartir a través de


Recomendaciones para desarrollar aplicaciones listas para producción

A medida que desarrolla aplicaciones para sus dispositivos Azure Sphere, hay varios aspectos que debe tener en cuenta para garantizar que sus aplicaciones estén listas para la 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 producen en la producción y facilitar el diagnóstico de los problemas que surjan.

Cuando desarrolle una aplicación Azure Sphere, decida si se ejecutará en el núcleo de alto nivel (HL), en tiempo real (RT) o en una implementación híbrida de ambos. Las aplicaciones de alto nivel se ejecutan en contenedor en Azure Sphere OS y las aplicaciones compatibles con tiempo real (RTApps) se ejecutan en metal desnudo 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 sus 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 fundamentos 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, incluyendo análisis de campo, revisiones de código e interacciones de soporte técnico de aplicaciones implementadas en producción en soluciones y diseños de dispositivos del mundo real.

Fundamentos de codificación

  • Problemas comunes

    • Asegúrese de que las aplicaciones listas para producción no usen conjuntos de herramientas beta.
    • Al dirigirse al conjunto de API, use las herramientas 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 el modo release antes de implementar una aplicación en producción. Asegúrate 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 aborde de forma intencionada.
    • Configure una canalización de CI/CD coherente 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, para que se puedan 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 asignar dinámicamente memoria.
    • Evite la asignación dinámica de memoria siempre que sea posible.
    • Para 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 a los autores de llamadas.
  • 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 básicas de alto nivel

  • Aspectos básicos generales

    • Inicializar y destruir correctamente todos los controladores al salir o error.
    • Usa 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 arriesgar un estado de interbloqueo.
    • Implemente el registro y el control de errores. Para obtener más información, vea Control de errores y registro.
    • Use un temporizador del sistema como un guardián para detectar si la aplicación está en un estado o parada irrecuperable (como interbloqueo, memoria agotada o conectividad que no se recupera a través de la lógica implementada) y realizar una recuperación adecuada. Para obtener más información, consulte Utilizar un temporizador del sistema como perro vigilante.
  • Control de la simultaneidad

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

    • Implemente una tarea adecuada de comprobación del estado de la conectividad basada en una máquina de estado robusta que comprueba periódicamente el estado de la conexión a Internet.
    • Para las soluciones que requieren administración de energía, apague el chip Azure Sphere después de enviar datos, realice un seguimiento del tiempo 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 tomado medidas para garantizar que las versiones anteriores del comportamiento cURL sigan funcionando según lo esperado, se recomienda seguir las instrucciones más recientes de seguridad y confiabilidad al usar curl_multi, ya que el uso de devolución de llamadas recursivas puede provocar bloqueos inesperados, interrupciones de conectividad y posibles vulnerabilidades de seguridad. Si un TimerCallback se inicia con un tiempo de espera de 0 ms, tráelo como un tiempo de espera de 1ms para evitar devolución de llamadas recurrentes. Asegúrese también de llamar explícitamente a curl_multi_socket_action al menos una vez después de 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 de Azure Sphere OS y asegúrese de que las aplicaciones reaccionan correctamente al uso inesperado de la memoria.

Sugerencias de diseño de aplicaciones básicas en tiempo real

  • Habilite el temporizador MT3620 watchdog para detectar el 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 de diseño de soluciones

  • Requisitos de conectividad y solución de problemas

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

Para ver elementos adicionales a tener en cuenta al mover una solución de IoT a un entorno de producción, consulte Mover una solución de IoT de prueba a producción.