Proxy inverso para servicios web en tiempo real.
Pushpin es un servidor proxy inverso escrito en C++, que facilita la implementación de WebSocket, transmisión de HTTP y servicios de long-polling HTTP. El proyecto es único entre las soluciones en tiempo real, ya que está diseñado para satisfacer las necesidades de los creadores de API. Pushpin es transparente para los clientes y se integra fácilmente en una pila de API.
Pushpin se coloca en la ruta de la red entre el backend y cualquier cliente. Se comunica con las aplicaciones web de back-end mediante solicitudes HTTP regulares y de corta duración. Esto permite que las aplicaciones de back-end se escriban en cualquier lenguaje de programación y utilicen cualquier servidor web.
Hay dos puntos principales de integración:
- El backend debe manejar las solicitudes de proxy. Para HTTP, cada solicitud entrante se envía a través del servidor. Para WebSockets, la actividad de cada conexión se traduce en una serie de solicitudes HTTP, enviadas al backend. El comportamiento de Pushpin está determinado por la forma en que el servidor responde a estas solicitudes.
- El backend debe decirle a Pushpin que envíe datos. Independientemente de cómo estén conectados los clientes, los datos se pueden enviar a ellos mediante una solicitud HTTP POST a la API de control privado de Pushpin ( http://localhost:5561/publish/ de forma predeterminada). Pushpin inyectará estos datos en cualquier conexión de cliente según sea necesario.
Para ayudar con la integración, hay bibliotecas para muchos lenguajes y marcos back-end. Pushpin no tiene bibliotecas en el lado del cliente porque es transparente para los clientes.
Pushpin es un proyecto ambicioso con dos objetivos principales:
- Facilita el desarrollo de API en tiempo real. Existen muchas otras soluciones que son excelentes para crear aplicaciones en tiempo real, pero pocas son útiles dentro del contexto de las API . Por ejemplo, no puede usar Socket.io para crear la API de transmisión de Twitter. Se necesita un nuevo tipo de proyecto en este caso.
- Hacer que el comportamiento de empuje en tiempo real sea delegable. La razón por la que todavía no hay un CDN de inserción en tiempo real es porque aún no se han establecido los estándares y prácticas necesarios para delegar a un tercero de manera transparente. Pushpin es más que otra solución push en tiempo real; Representa el siguiente paso lógico en la evolución de las arquitecturas web en tiempo real.
Para entender realmente a Pushpin, se debe pensar que es más una puerta de enlace que una cola de mensajes. Pushpin no conserva los datos y es agnóstico con respecto al modelo de datos de su aplicación. Su backend proporciona la asignación a lo que sea ese modelo de datos. Herramientas como Kafka y RabbitMQ son complementarias. Pushpin también es agnóstico a su definición de API. Los clientes no necesariamente se suscriben a «canales» o no reciben «mensajes». Los clientes realizan solicitudes HTTP o envían marcos WebSocket, y su backend decide el significado de esas entradas.
A nivel práctico, hay muchos beneficios para Pushpin que no se ven en ningún otro lugar:
- El diseño del proxy permite que Pushpin encaje bien dentro de una pila API. Esto significa que puede heredar otras instalaciones de su API REST, como la autenticación, el registro, la regulación, etc. Se puede combinar con un sistema de administración de API.
- A medida que su API se amplíe, una arquitectura de múltiples niveles será inevitable. Con Pushpin se puede hacer fácilmente desde el principio.
- Funciona bien con microservicios. Cada microservicio puede tener su propia instancia de Pushpin. No se necesita bus central.
- Reiniciar el backend no desconecta a los clientes.
- En el caso de que los mensajes WebSocket sean enviados como solicitudes HTTP, los mensajes pueden ser manejados sin estado por el backend. Los mensajes de una sola conexión pueden incluso equilibrarse en la carga en un conjunto de instancias de back-end.
Pushpin es horizontalmente escalable. Las instancias no se comunican entre sí, y no se necesita una ruta fija. Los backends deben publicar datos en todas las instancias para garantizar que los clientes conectados a cualquier instancia recibirán los datos. La mayoría de las bibliotecas backend admiten la configuración de más de una instancia de Pushpin, de modo que una sola llamada de publicación enviará datos a varias instancias a la vez.
Opcionalmente, ZeroMQ PUB/SUB puede usarse para enviar datos a Pushpin en lugar de usar HTTP POST. Cuando se utiliza este método, la información de suscripción se reenvía a cada editor, de modo que los datos solo se publicarán en las instancias que tienen escuchas.
En cuanto a la escalabilidad vertical, Pushpin se ha probado de manera confiable con 10,000 conexiones simultáneas ejecutándose en una sola instancia de m3.xlarge de Amazon EC2. 20,000 conexiones y más son posibles con alguna degradación de latencia.
Más información y descarga de Pushpin:
http://pushpin.org/
Fuente: El Gurú de la informática : Proxy inverso para servicios web en tiempo real.