Supervisión de conexiones de AWS IoT

Foto de Tina Rataj-Berard en Unsplash

Hay una expresión: ‘uno nueve’ es un buen día en IoT . Basado en la garantía de confiabilidad de ‘cinco nueves’ (99.999%) de la industria de las telecomunicaciones, es una broma acerca de lo difícil que es obtener cualquier tipo de métrica de confiabilidad impresionante cuando todos sus dispositivos están en conexiones dudosas y están sometidos por los clientes a todo tipo de condiciones Sus diseñadores no habrían creído posible.

Poder detectar cuándo un dispositivo se desconecta es un paso importante en el camino hacia la confiabilidad. Sin embargo, al igual que los árboles en un bosque, cuando un dispositivo se cae, no siempre puede emitir un sonido . Entonces, ¿cómo saber si uno de sus dispositivos se ha roto, sin esperar a que su cliente se dé cuenta y cree un tuit burlón?

Después de responder esta pregunta en varios foros, pensé que sería útil brindar un poco de orientación sobre cómo puede usar AWS IoT para identificar cuándo se conectan y desconectan sus dispositivos , y las estrategias que lo rodean.

Es probable que cualquiera con un poco de trabajo en red bajo la manga ya esté levantando la mano: use un latido. A intervalos regulares, haga que su dispositivo funcione y envíe un mensaje a casa para informarle que todo está bien . Si no recibió un latido, puede comenzar a asumir que las cosas no están bien.

Un latido es algo complicado. Como regla general, las personas establecen el intervalo en un tercio del tiempo mínimo de notificación. Las redes no son confiables, por lo que solo porque se haya perdido un latido no significa que su dispositivo sea un montón latente en el suelo.

Sin embargo, a la escala que IoT puede aportar, los latidos cardíacos frecuentes pueden volverse problemáticos. Si su red o batería están limitadas, entonces es una sobrecarga financiera y energética. Pero incluso si está conectado a WiFi; lo más probable es que no desee la sobrecarga operativa del procesamiento de miles de millones de mensajes “Estoy vivo”.

Afortunadamente, AWS IoT Core le ofrece una alternativa más confiable integrada en su oferta. Aunque uno que viene con algunas advertencias …

Siempre que algo se conecte o desconecte del agente de mensajes de IoT, recibirá un mensaje en los temas $aws/events/presence/connected/+ y $aws/events/presence/disconnected/+ (donde + es un comodín para la identificación del cliente) .

Los mensajes se ven así:

  { 
"clientId": "5f2b88024706498e81d93c5842d840b6",
"marca de tiempo": 1527438389228,
"eventType": "conectado",
"sessionIdentifier": "331d7422-3322-4686-8b61-8ec74bb41fd7",
"principalIdentifier": "21f1dfebcbf6fc60f44af783ccdeef808d2d1cbef"
}

Y (tenga en cuenta el tipo de eventType ):

  { 
"clientId": "5f2b88024706498e81d93c5842d840b6",
"marca de tiempo": 1527438433731,
"eventType": "desconectado",
"clientInitiatedDisconnect": verdadero,
"sessionIdentifier": "331d7422-3322-4686-8b61-8ec74bb41fd7",
"principalIdentifier": "21f1dfebcbf6fc60f44af783ccdeef808d2d1cbef"
}

Al suscribirse a los temas de presence/(dis)connected , AWS le informará cuándo el agente ya no puede comunicarse con su dispositivo. Debajo del capó, esto solo utiliza el ping / pong incorporado de MQTT. Pero le ahorrará el esfuerzo duplicado de construir, monitorear y mantener su propia infraestructura de latidos .

Debería recibir un mensaje desconectado inmediatamente si cierra la conexión limpiamente. Sin embargo, si el enlace móvil está roto, o alguien pisa su dispositivo, tendrá que esperar a que el corredor se dé cuenta de que está inactivo. Cuando esto sucede, el indicador clientInitiatedDisconnect será false .

Poder diferenciar entre una desconexión limpia y sucia si es útil para arquitecturas donde los dispositivos no mantienen una conexión constante con el intermediario. Al filtrar los mensajes donde clientInitiatedDisconnect es true , puede asegurarse de que solo está tomando medidas cuando ha sucedido algo inesperado.

Como alternativa a la presence/(dis)connected temas presence/(dis)connected , el agente de IoT admite LWT (Last Will and Testament). Esto le permite especificar un mensaje que debe enviarse a un tema específico si el cliente se desconecta de manera no limpia, por lo general para notificar a otro cliente. Tenga en cuenta que AWS no le permite enviar estos mensajes a un tema que comience con $ (por ejemplo, sus temas especiales).

En ambos casos, estará esperando la conexión al tiempo de espera en el lado del corredor. De mis propios experimentos, normalmente recibirás el mensaje en unos minutos. Esto depende tanto del intervalo de mantenimiento activo que negocie al conectarse como de la propia infraestructura de AWS.

Saber que un dispositivo está conectado no es la única razón por la que podría desear un latido. También puede usarlo como un chequeo de salud. Por ejemplo, podría requerir que todos los sistemas de su dispositivo participen en la actualización de los latidos para diferenciar entre un dispositivo conectado pero que no funciona, y una falla del dispositivo.

Este es un caso marginal, ya que los patrones más preferidos implican enviar códigos de falla como parte de su telemetría. Sin embargo, hay una técnica que puede usar en AWS IoT para cubrir este caso. Si su sombra está conectada, entonces debería poder ver si hay una deriva entre los estados informados y solicitados . Si esto crece significativamente mientras el dispositivo aparentemente está conectado, entonces debería comenzar a sospechar …

¿No es hora de que te saltes ese latido?