¿Qué es Coral Blocks?

Coral Blocks es una suite de componentes software Java concebidos para entornos de ultra baja latencia, sin recolección de basura y simples de usar.

Coral Blocks se compone de diversos componentes:

· CoralMD is a very fast, easy-to-use and garbage-free quote book implementation that you can use to keep track of the market data book from any security.

· CoralFIX is an ultra-low-latency FIX engine with minimal variance (no garbage created for the gc) that provides parsers, clients and servers through a complete and super intuitive Java API.

· CoralReactor is a powerful, easy to use and ultra-low-latency Java library for network communication that performs under 2 microseconds over loopback with minimal variance.

· CoralStore is a read/write message store backed up by in-memory and in-disk implementations. It supports asynchronous writes through CoralQueue for ultra-low-latency persistency.

· CoralLog is an unintrusive ultra-low-latency asynchronous Java Logging / Event Sourcing library that achieves extreme throughput without adding latency or variance to application execution.

· CoralQueue is a super-fast, ultra-low-latency queue for inter-thread communication. It can be used as a simple two-thread producer-consumer queue as well as an one-to-many producer-to-consumers demultiplexer queue.

· CoralThreads is a Java library for setting thread affinity in Linux. That can have a big impact on latency-sensitive applications with critical threads that must not be disturbed while running.

· CoralBits is a collection of utility and instrumentation classes for real-time Java development. It provides a foundation for clean, simple and high-performance code with no GC overhead.

Un poco de Pulsar CEP

eBay acaba de liberar bajo licencia Apache 2 Pulsar.

Sus creadores lo definen así:

Pulsar es un es plataforma para el procesamiento de streams y analítica en tiempo real. Pulsar puede usarse para recolectar y procesar eventos de usuario y de negocio en tiempo real y para generar métricas y agregaciones sobre ventanas temporales todo esto siguiendo un lenguaje SQL-like.

Pulsar escala a millones de eventos por segundo en alta disponibilidad, se integra fácilmente con strores como Cassandra.

(Vamos lo que de toda la vida se define como un CEP :D)

Pulsar fue creado con estos objetivos:

· Escalabilidad: escalando a millones de eventos por segundo

· Latencia: procesamiento y entrada en órdenes menores de segundo

· Disponibilidad: sin caída del cluster durante actualización del software, actualización de las reglas y cambios en la topología

· Felxibilidad: facilidad para definir y cambias la lógica de procesamiento, ruteado de eventos, topologís

· Productividad: soporte para CEP y un lenguaje 4GL para filtrado de datos, agregación y procesamiento stateful

· 99,9% Data Delivery

· Despliegue en Cloud: los nodos pueden distribuirse entre data centers

FLUJO:

El flujo de Pulsar consiste en varios estados no acoplados.

Los eventos se transportan de forma asíncrona entre el pipeline lo que simplifica la escalabilidad permitiendo que cada estado pueda construirse y operarse de forma independiente.

LENGUAJE DE CONSULTAS:

Al estilo de los CEPs más tradicionales Pulsar ofrece un lenguaje de consultas SQL-like:

DESPLIEGUE:

La lógica CEP de Pulsar se despliega en diversos nodos (CEP cells = celda CEP), cada celda CEP se configure con un canal de entrada, un canal de salida y una lógica de proceso.

Los eventos se particionan por una clave (usuario por ejemplo) de modo que todos los eventos con una misma clave se rutean a la misma celda CEP.

En cada estado los eventos pueden particionarse por una clave diferente permitiendo agregación en varias dimensiones:

Con esta arquitectura para escalar a más eventos simplemente tengo que meter más celdas CEP.

Pulsar CEP usa Apache ZooKeeper para detectar nuevas celdas y rebalancear el tráfico, de la misma forma si una celda se cae Pulsar reenruta el tráfico a otros nodos…

Pulsar CEP soporta varios modelos de mensajería entre estados, pudiendo elegir modelo Push o Pull. Pulsar permite persistir los eventos en Kafka para garantizar el procesado.

Opinión:

Pulsar CEP resulta una solución muy interesante en el ámbito “Real Time Big Data”, se me ocurren diversos escenarios de uso:

· los que hayáis usado Storm habréis echado en falta un lenguaje estilo SQL para procesar los streams (algunos hasta hemos integrado un CEP con Storm)

· los que necesitéis un CEP con licencia Apache (y no GPL como Esper) hasta ahora teníais poca elección: Siddhi CEP

Wireless Video de Raspberry Pi a PC

Vamos a documentar como hacer una transmisión de video con la Camara Raspberry Pi a un PC. Como objetivo adicional nos proponemos crear un dispositivo autónomo que transmita imágenes mediante wifi en vivo, similar a una cámara wireless de seguridad.

Veremos que la Raspberry Pi camera board es un modulo diseñado para ser integrado con facilidad en el Pi.

La cámara posee una relación calidad-precio notable:

    • Tamaño 25mm x 20mm x 9mm
    • Peso 3g
    • Bajo consumo
    • 5 Megapixels
    • 2592 x 1944 pixeles de imágenes estáticas
    • Soporta video 1080p30, 720p60 y 640x480p60/90
    • Cuesta menos de 25 Euros

Contamos con un Raspberry Pi B 512K de memoria, ya nos hemos aproximado varias veces a micro placas

https://unpocodejava.wordpress.com/2013/07/05/java-en-un-raspberry-pi-desde-cero-2/
https://unpocodejava.wordpress.com/?s=raspberry+pi

Y tenemos un avance de los esfuerzos por tener una distribución de Java en un Pi:

https://unpocodejava.wordpress.com/2012/05/30/java-corriendo-intentando-correr-sobre-raspberry-pi/
https://unpocodejava.wordpress.com/2012/08/14/corriendo-tomcat-7-en-un-raspberry-pi/

 

Instalación


La instalación es muy sencilla. La banda se inserta en el conector plano entre la Ethernet y el HDMI. Primero es necesario levantar una pestaña tirando hacia arriba:

Después se inserta la faja de la cámara, con la parte plateada orientada hacia el puerto HDMI

Cuando esté bien colocada, se baja de nuevo la pestaña y listo.

 

Configuración


Arrancamos el Pi y nos autenticamos. El nombre y password por defecto, como ya hemos visto en otros tutoriales es

usuario: pi
password: raspberry

Actualizamos el firmware y librerías del Pi a la última versión:
>sudo apt-get update
>sudo apt-get upgrade

Accedemos a la configuración del Pi con el comando
>sudo raspi-config

Navegamos al menú camera y seleccionamos enable

image014

image018

Seleccionamos Finish y reiniciamos

En el tutorial anterior java-en-un-raspberry-pi-desde-cero, podemos encontrar como instalar wifi y un servidor remoto vnc en el Pi. En http://www.raspipc.es podemos encontrar baterías recargables de 5v – 1mA y una toma usb, como esta:

Con esto y un poco de esparadrapo, quedamos totalmente wireless para mover la cámara en busca de la mejor toma.

 

Pruebas Locales


Procedemos testear que la instalación de la cámara funciona correctamente. El commando raspivid permite realizar capturas de video, mientras que raspistill captura imágenes fijas.

Escribamos en la consola el siguiente comando:
>raspistill -v -o test.jpg

Que muestra 5 segundos de vista previa por defecto y toma una foto, salvándola en el fichero test.jpg,

Hay que destacar que no es posible ver la vista previa desde el cliente remoto vnc.

-o ó –output el nombre del fichero y -t ó –timeout especifica los milisegundos de vista previa.
-d ó –demo ejecuta el modo demo que rota a través de varios efectos de imagen

Comandos de Ejemplo
Captura 5s de video en formato h264:
>raspivid -o video.h264

Capturar 10s de video:
>raspivid -o video.h264 -t 10000

Captura 10s de video en modo demo:
>raspivid -o video.h264 -t 10000 –d

Para más información acerca del uso de estos comandos, referirse a la bibliogrfia o a la ayuda de los propios comandos:
>raspivid | less
>raspistill | less

 

Desactivar Led de la Cámara

La cámara incluye un LED en la esquina que se enciende cuando la cámara esta activa.

Este led se puede desactivar editando el fichero
>sudo nano /boot/config.txt

y añadiendo la linea
>disable_camera_led=1

 

Streaming con VLC


VLC es una plataforma opersource que interpreta la mayoría de formatos multimedia. Para hacer streaminf vlc, necesitamos descargar en el PI el software

>sudo apt-get install vlc

Un método muy eficiente para hacer stream es el vía protocolo RTSP

>raspivid -o – -t 3600000 -w 800 -h 600 -fps 31 |cvlc -vvv stream:///dev/stdin –sout ‘#rtp{sdp=rtsp://:8554/}’ :demux=h264

El comando activa la cámara y el puerto 8554 es configurado como canal de stream, a la escucha de suscriptores.

Podemos jugar con los valores -w (ancho en pixels), -h (alto en pixels), -fps (fotogramas por segundo) para conseguir mayor velocidad de transmisión.

Para ver el stream debemos instalar el cliente VLC en un PC, descargable desde http://www.videolan.org/.

Para suscribirnos a la dirección de stream hay que abrir en el menú Abrir volcado de red…

La dirección:
>rtsp://<IPdeRaspberryPi>:8554/

por ejemplo, un PC en la red local podría tener esta IP

Pulsamos en reproducir y comenzaremos a ver el video en el reproductor.

Los pros de este método son

  • Facilidad de configuración
  • Conexión de múltiples clientes
  • Fácil acceso a traves de routers (se podria configurar streaming a mediante protocolo http de un modo similar).
  • La aplicación se integra en multiples plataformas, como lynux y android

Los contras.

  • Pese a haber probado múltiples configuraciones en cliente y en servidor, el protocolo rtsp tiene una latencia de hasta 10 segundos en la LAN. Esto provoca un desfase que hace imposible el uso en tiempo real de una conexión.

Este un problema conocido y el autor del post aun no ha encontrado una solución factible.

 

Streaming Punto a Punto con MPlayer


Al contrario que el protocolo anterior El stream punto a punto envía la señal del raspberry pi directamente a la IP del reproductor. Para ello necesitamos dos programas:

  • Netcat es una utilidad de red que redirige flujos de lectura/escritura utilizando tcp/udp.
  • MPlayer es un reproductor opensource que interpreta los formatos mas habituales.
  • Tomamos como ejemplo un PC con sistema Windows. Tenemos que instalar ambos programas, descargables desde

https://dl.dropboxusercontent.com/u/106074492/mplayer%20and%20netcat.zip

y los descomprimimos en un directorio de trabajo, por ejemplo d:/pro/netplayer

Para arrancar la escucha en el PC, ejecutar en el directorio de trabajo

>d:
>cd pro
>cd netplayer
>nc -l -p 5001 | mplayer -vo direct3d -fps 31 -cache 2048 -nosound -framedrop –

que genera un socket de escucha (-l) en el puerto 5001. De ahí, enruta (|) el stream de información al reproductor MPlayer con la siguiente configuración:

  • Interpreta 31 fotogramas por segundo
  • Con un cache de 2MB
  • Deshabilitamos el sonido (la cámara no tiene micrófono)
  • En caso de falta de información, tirar el fotograma
  • Es muy importante es seleccionar el driver de output de video. En las pruebas direct3d ofrece un rendimiento muy correcto.

El programa se queda a la escucha de un stream entrante.

En la parte del Pi necesitamos descargar el software:
>sudo apt-get install mplayer netcat

y activamos la cámara para enviar el stream de video con el comando
>raspivid -o – -vf -t 3600000 -w 800 -h 600 -fps 31 -n| nc <IPdePC> 5001

conocemos el comando raspivid; con el pipe mandamos la información al netcat, que manda el stream a la IP y puertos especificados.

En la parte del PC, se abre el reproductor mplayer:

Los Contras de este método son:

  • No es posible enviar más que a un solo destinatario
  • Configuración muy rígida, es necesario que el PI conozca la IP del destinatario
  • El mplayer no esta tan extendido en diferentes plataformas como el VLC

Los Pros:

Auto-links sobre sobre Big Data

En los últimos días me ha tocado elaborar esta lista dos veces, así que recordemos algunos posts sobre tecnologías Big Data (como veis enfocadas al procesamiento en Tiempo Real):

· Big Data en 2013:

o https://unpocodejava.wordpress.com/2013/03/18/predicciones-big-data-2013/

o https://unpocodejava.wordpress.com/2012/11/13/tecnologias-open-source-de-moda-en-big-data-storm-y-kafka/

· Storm: este es mi favorito :)

o https://unpocodejava.wordpress.com/2012/07/26/cuando-hadoop-no-es-suficientemente-rapido/

o https://unpocodejava.wordpress.com/2012/09/17/storm-el-hadoop-para-procesar-streams/

o https://unpocodejava.wordpress.com/2013/06/06/donde-se-usa-storm/

o https://unpocodejava.wordpress.com/2013/06/06/un-poco-de-trident/

· Kafka: es un Bus Distribuido, lentamente se ha convertido una opción muy interesante para algunos escenarios:

o https://unpocodejava.wordpress.com/2012/12/21/un-poco-de-kafka/

· Kestrel: es una cola de mensajería distribuida al estilo Kafka pero más sencilla y limitada. Storm tiene también un KestrelSpout:

o https://unpocodejava.wordpress.com/2013/07/03/que-es-kestrel/

· Fluentd: Fluentd es una librería open source que actúa como colector de logs tratándolos como streams JSON y enviándolos a otros sistemas como S3, MongoDB, Hadoop o otros Fluentds. Tiene ya como input source un Apache Log.

o https://unpocodejava.wordpress.com/2013/02/18/fluentd-colector-de-logs-bigdata/

· LogTash: es una Herramienta para recolectar logs, parsearlos, almacenarlos y consultarlos desde una consola Web:

o https://unpocodejava.wordpress.com/2012/06/05/logtash-procesamiento-de-eventos-y-generacion-de-logs/

· Impala, Stinger y Presto: tecnologías para hacer queries en tiempo real sobre Hadoop:

o https://unpocodejava.wordpress.com/2012/11/05/cloudera-impala-o-queries-en-tiempo-real-en-hadoop/

o https://unpocodejava.wordpress.com/2012/11/12/comparando-tiempos-de-impala-y-hive/

o https://unpocodejava.wordpress.com/2013/06/24/impala-stinger-dremel-y-ahora-presto/

· Scribe: es un Servidor para agregar logs en tiempo real enviados desde clientes, puede funcionar con Storm,…

o https://unpocodejava.wordpress.com/2013/07/04/procesamiento-de-logs-en-tiempo-real-i-scribe/

Cuando Hadoop no es suficientemente rápido!!!

Llevamos ya varios posts dedicados a Hadoop, casi como sinónimo de BigData pero qué pasa cuando Hadoop no es suficientemente rápido!!!

Para ciertas cosas como calcular trending topics en Twitter sin ir más lejos el flujo de Hadoop es muy lento. El motivo es que Hadoop no está pensado para trabajar en tiempo real.

En este post vamos a analizar Twitter Storm:

En 2011 Twitter adquirió la compañía de análisis online BackType. En septiembre de 2011 Twitter liberó Storm como librería open source.

Storm funciona de forma semejante a Hadoop pero en lugar de jobs MapReduce Storm corre topologías que nunca acaban.

Storm puede usarse para :

· Procesamiento de streams de datos Storm es escalable y tolerante a fallos

· Computación continua Storm puede ejecutar una query de forma continua y hacer stream de los resultados a los clientes en tiempo real (así se usa para los trending topics)

· RPC distribuido: Storm permite paralelizar una query al vuelo

Existen varias alternativas a Storm que intentaremos analizar en otros posts (Hstreaming y Apache S4 como poco), sobre estas Storm ofrece:

· Open Source: Hstreaming no lo es

· Modelo de programación simple

· Corre en cualquier lenguaje: Clojure, Java, Ruby y Python se soportan pero se pueden añadir nuevos sólo implementando el protocolo de comunicación

· Tolerante a fallos

· Escalable horizontalmente

· Garantiza el procesamiento del mensaje: Storm garantiza que cada mensaje se ha proceso por completo al menos una vez. S4 no lo garantiza.

· Rápido: usa ØMQ como capa de mensajería

· Modo local: para simular un cluster Storm y hacer test unitarios de topologías

Para correr Storm se necesita Apache Zookeeper, ØMQ, JZMQ, Java 6 y Python:

· ZooKeeper se encarga de gestionar los components de un cluster

· ØMQ como sistema de mensajería interno y JZMQ como Java Binding para ØMQ.

Existe un subproyecto, storm-deploy, que permite el despliegue inmediato de clusters Storm clusters en AWS.

Mientras nos ponemos con el post que explique el funcionamiento de Storm podéis seguir su tutorial.

Qué es PI System

PI System de es un producto que permite gestionar los datos y eventos de tiempo real.

El objetivo de PI System es convertir estos datos de tiempo real en acciones, para eso rutea datos de tiempo real a lo largo de toda la infraestructura.

Los módulos que componen PI System son:

Veamos cada uno de los módulos funcionales dentro de PI System:

COLLECT:

· PI Interfaces provee un mecanismo estándar para la recolección de datos.

· Ofrece conexión con más de 400 datasources, como PLCs, bases de datos, ficheros, SCADAs, HTML, XML,… (lista completa de interfaces)

· Soporta estándares OPC, OLEDB, Modbus, DNP3, BACnet o SNMP

· PI Interfaces conecta las fuentes de datos con el Sistema PI para permitir el acceso en tiempo real a datos actuales e históricos.

· Las fuentes de datos se integran de forma independiente al protocolo, fuente, vendedor,…

HISTORIZER:

· Los sistemas de producción producen una gran cantidad de datos desde diversas fuentes, la gestión de estos datos (almacenar, distribuir,….) es muy costosa.

· El PI Server es el motor que se encarga de recolectar los datos de tiempo real, archivarlos y distribuirlos.

o Los datos son almacenados instantáneamente en el PI Server y disponibilizaros para usuarios en tiempo real.

o Puede disponibilizar décadas de datos de forma transparente

o Optimiza el almacenamiento de datos para usar la menos cantidad de recursos

o Funciona en HA (Alta disponibilidad)

o Soporta escalabilidad horizontal y vertical

FIND:

· En los sistemas existe una gran cantidad de datos que proviene de diversas fuentes (medidas, procesos Batch, cálculos,…)

· PI System permite buscar datos basado en tags, contexto,…

ANALYZE:

· PI Analytics suministra análisis en tiempo real y permite a los usuarios analizar y agregar datos históricos y de tiempo real en Key performance indicators (KPIs).

· Estos análisis se pueden compartir.

· PI Analytics se compone de varios productos que permiten generar alarmas, sumarizar, Statistical Quality Control, ecuaciones,…

DELIVER:

· SIsoft’s PI Data Access y PI Notifications ofrecen la funcionalidad para conectar con personas y sistemas entregando los datos que necesitan.

· PI Data Access ofrece conexión por OLE, JDBC, Web Services,…

· PI Notifications permite entregar información ante el trigger de una condición configurada. Soporta acknowledgement y escalado de notificaciones.

VISUALIZER:

· PI ProcessBook permite:

o Diagrámas gráficos intuitivos

o Datos en tiempo real

o Diagramas que muestran diversos activos.

o Diagramas que muestram unidades similares

o Tendencias de datos fáciles

o Notas de puntos de datos

o Indicadores intuitivos de estatus muestran la “salud” de los datos

o Amplia librería de símbolos prediseñados

· PI ActiveView

· PI WebParts integra tus datos con las capacidades de Microsoft Office SharePoint Server.

· PI por Office es un paquete que permite mostrar datos de negocio en la suite de Office:

Arquitectura típica PI System

Publicado en Tiempo Real. 5 Comments »

OpenSplice DDS: Solución DDS de Tiempo Real

es un DDS (Data Distribution Service) de mensajería de tiempo real, capaz de dar un comportamiento determinista incluso cuando coordina muchos mensajes.

Es un bus de mensajería pensado para sistemas críticos o con una gran cantidad de mensajes, se usa en sectores aeroespaciales y de defensa, así como en industria, telcos y en SCADAs.

La Arquitectura de OpenSplice DDS es abierta, su núcleo básico está disponible como Open Source (licenciado bajo LGPLv3).

También ofrece diferentes paquetes de suscripción que aseguran a los clientes la actualización y el soporte de la tecnología por el fabricante, añadiendo módulos interesantes:

Algunas de las características más interesantes de OpenSplice DDS son:

· Rendimiento: puede distribuir millones de datos por segundo con latencias de microsegundos.

· Basado en estándares: API para OMG Data Distribution Service for Real-Time Systems (DDS) v1.2 y para OMG Data Distribution Service Interoperability v2.1

· Soporte Plataformas: Soporta SO Linux, Windows, AIX y Solaris, además de VxWorks, INTEGRITY,…. Su API está disponible en C, C++, Java y C#.

· Muchas implantaciones: en diferentes áreas.

Podéis consultar su Getting Started aquí. y su Guía de Referencia Java

OpenSplice DDE ofrece una herramienta de modelado llamada Power Tools basada en Eclipse que simplifica la creación de aplicaciones.

Aquí se pueden ver algunos de sus partners y de sus usuarios:

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 615 seguidores

A %d blogueros les gusta esto: