¿Qué pila de tecnología de back-end debo usar para mi aplicación IoT?

Preguntas que debe hacer antes de elegir su backend:

1. ¿Qué factores de escala se tienen en cuenta: la cantidad de dispositivos que se conectan a su backend, el tipo de comunicación, unidireccional o bidireccional y su frecuencia, cantidad de datos (bytes) por segundo, etc.?

2. ¿Qué protocolos de conectividad le gustaría admitir: HTTP / REST, MQTT, WebSockets?

3. ¿Cuánto tiempo tiene que tener acceso a sus datos antes de que pueda pasarlos a almacenamiento en frío o eliminarlos por dispositivo?

4. ¿Tendría una interfaz de usuario o una aplicación orientada al consumidor? ¿Sería solo basada en la web o en un teléfono inteligente / tableta o ambas?

5. Mientras crea una aplicación de IoT, ¿necesita interactuar con algo más? Como un sistema de facturación o integración con otra API de nube o su aplicación requiere considerables requisitos de recursos informáticos (y en caso afirmativo, ¿sería en la nube o en la aplicación orientada al consumidor), etc.

6. ¿Cuáles son los mecanismos de seguridad / autenticación que desea admitir?

Todo lo anterior, y algunos más afectarían las tecnologías que elegiría para su backend.

Hablando genéricamente

1. Tendrá que mirar un Marco de programación + el middleware asociado o las tecnologías basadas en la nube disponibles para ese marco. El marco del lenguaje de programación podría ser uno o una combinación de lo siguiente:

Node.js, Java, Python y Ruby

Si la mayor parte de su IO es HTTP / REST, entonces tendrá muchos middlewares disponibles, especialmente para Node.js (por ejemplo, Express) y Ruby (Rails).

Su lista no tiene Java, y Java sigue siendo una opción sólida para implementar un back-end.

Mis pensamientos:

Meteor es más un marco basado en aplicaciones web que puede no ser la mejor opción para IoT; en otras palabras, está optimizado para crear aplicaciones basadas en web y en una aplicación de IoT que puede o no ser cierta. Meteor, por supuesto, está basado en Node.js.

Python + Tornado: le brindará excelentes capacidades HTTP / REST.

Socket.IO es una tecnología de comunicación para casos de uso de transferencia de datos bidireccionales, originalmente creada para la comunicación en tiempo real del navegador web de igual a igual, pero ahora también se está adoptando para otras cosas. Debería elegir Socket.IO + Node.js si ciertamente va a hacer comunicaciones bidireccionales. Recuerde que la escalabilidad de HTTP / REST y Sockets es fundamentalmente diferente.

PubNub vuelve a ser una comunicación que le ofrece un tipo de comunicación de publicación / suscripción en tiempo real. Por supuesto, es un servicio comercial pagado. Luego, también debe buscar un servicio similar ofrecido por los gustos de Google o considerar rodar el suyo usando MQTT o AMPQ o RabbitMQ.

No para llover en tu desfile, pero si estás hablando de una aplicación de teléfono inteligente y un backend, ¿estás seguro de que estás hablando del IoT?

El IoT tiene un componente M2M pesado (es el Internet de las cosas, es decir, las cosas que hablan con las cosas) para lo cual están diseñados los protocolos de comunicación de datos como DDS y MQTT.

Si el teléfono inteligente es un dispositivo pasivo, y lo está rastreando sin que el usuario necesite jugar con él, entonces comience a pensar en IoT. Si un humano tiene que jugar con él, es solo Internet.