lunes, 28 de julio de 2014

WSO2 EU Conference



El pasado mes se celebró en Barcelona el WSO2 Conference Europa 2014, 3 días de charlas simultaneas sobre : Cloud, Integration , API Management, Application Development, Big Data , Security , Mobile , Strategy y Partner Business.

Aquí algunas impresiones sobre las charlas a las que asistí :

Keynote: Integrate All the Things: Why Web and Open Source Culture and Technology are Eating the World, James Governor, Principal Analyst and Co-Founder, RedMonk

RedMonk es una empresa que hace investigación de producto/mercado, fue muy interesante la presentación sobre la filosofía microservices que adoptó Amazon muy prontamente por regla de Jeff Bezos, la idea es simple, en cualquier software de departamento la comunicación debe ser a través de un API , no importa la tecnología , pero esta debe exponerse para integración con otros departamentos, para evitar silos y tener una capa bien conocida y conectar con otros sistemas igualmente desacoplados.

Video de la presentación.


Cloud :Apache Stratos Roadmap and Strategy, Lakmal Warusawithana, Director of Cloud Architecture, WSO2

Impresionante el roadmap de este producto inicialmente desarrollado por WSO2 y donado a Apache Software Foundation , estamos hablando de un PaaS que permite desplegar :PHP , Ruby on Rails , Apps Tomcat, con Mysql . Acerca del roadmap de este producto :

  • integración con puppet , chef , docker
  • manejo del ciclo de vida de las apps
  • micro pass para developers
  • soporte para autenticación por ldap, base de datos
  • real time and batch vistas analizadas , via WSO2 BAM
  • soporte a IaaS  : google compute engine, cloudstack, softlayer, rackspace


API Management : Strategy and Roadmap, Sumedha Rubasinghe, Director of API Architecture, WSO2

El API Management es el nuevo SOA,  esto es conectarnos con nuestros proveedores con un API definida, descubrible, securizada, autenticada, con reglas de gobierno, análisis y mediación de tráfico. Cuando empezamos a medir y explorar ( minar ) esa información , pueden aparecer nuevas formas de negocio con nuestros proveedores. 


Internet of Things: Reference Architecture for IoT, Afkham Azeez, Director of Architecture, WSO2

Se plantea una Arquitectura de referencia para manejar múltiples dispositivos, luego se mapea a productos WSO2 usando ,WSO2 Enteprise Mobility ,  WSO2 ESB, WSO2 BAM , WSO2 User Engamentent  . Sin duda esta arquitectura por la cantidad de datos, dispositivos que tenemos y que van en crecimiento deberá ser escalable, clusterizable , disponible 100% , tolerante a fallos.


Big Data: Analytics Strategy and Roadmap, Dr. Srinath Perera, Director of Research, WSO2
WSO2 BAM ahora mismo es la implementación WSO2 de la arquitectura de referencia lambda. Es un BAM con esteroides, tiene componentes Big Data y componentes de procesamiento en tiempo real CEP. En la charla se mencionó el roadmap del producto:

  • Alta disponibilidad de parte del engine CEP
  • Ejecución distribuida de querys CEP usando Storm y Siddhi
  • Domain ready toolboxes : clima  , deteccion fraude, GIS ( operaciones, dashboards )
Esperemos que se repita pronto!

domingo, 16 de febrero de 2014

WSO2 BAM DEMO


A continuación veremos en un ejemplo como usar el producto WSO2 BAM.
El caso de uso que se presenta es el de analizar información de un sistema BPM.

El sistema BPM de ejemplo tienen tres tipos de procesos “COT” , “CR” y “POL” , cada uno de ellos puede tener muchas instancias de proceso ejecutándose.

El primer reporte a la izquierda corresponde a la cantidad de instancias por proceso.
El segundo reporte a la derecha es un drill-down de todas las instancias de proceso ejecutándose. 


A continuación veremos paso a  paso como podemos obtener estos reportes a partir de datos ficticios recogidos por un DataAgent.

1
Descargar la versión WSO2 BAM 2.4.0 de la pagina :
http://wso2.com/products/business-activity-monitor/


2
Unzip del paquete
Iniciar el servidor con wso2server.sh
Cuando se muestra el mensaje “WSO2 Carbon started in X secs” ya esta iniciado





3
Ejecutar el cliente java que registra los datos en Casandra usando el API Data Agent
DataPublisher dataPublisher = new DataPublisher("tcp://localhost:7611", "admin", "admin");
String streamId1 = dataPublisher.defineStream("{" +
                                              "  'name':'es.demowso2bam.tablaprocesos1'," +
                                              "  'version':'2.3.0'," +
                                              "  'nickName': 'Tabla de procesos'," +
                                              "  'description': 'Some Desc'," +
                                              "  'tags':['foo', 'bar']," +
                                              "  'metaData':[" +
                                              "          {'name':'ipAdd','type':'STRING'}" +
                                              "  ]," +
                                              "  'payloadData':[" +
                                              "          {'name':'idproceso','type':'INT'}," +
                                              "          {'name':'estado','type':'STRING'}," +
                                              "          {'name':'fechainicio','type':'STRING'}," +
                                              "          {'name':'fechaactualizacion','type':'STRING'}," +   
                                              "          {'name':'compania','type':'STRING'}," +
                                              "          {'name':'ramo','type':'STRING'}," +
                                              "          {'name':'poliza','type':'INT'}," +   
                                              "          {'name':'agente','type':'STRING'}" +   
                                              "  ]" +
                                              "}");
log.info("1st stream defined: "+streamId1);
//In this case correlation data is null
dataPublisher.publish(streamId1, new Object[]{"127.0.0.1"}, null, new Object[]{ 1 , "CR","01-02-2013","01-04-2013","G","US",1,"04183"});


4
Login en la pantalla admin https://<hostname>:9443/carbon
usuario : admin
passsword : admin



5
Acceder a la vista de Cassandra para ver las tablas creadas con el cliente Data Agent





6
Acceder a la vista Analítica para añadir queryes Hive que procesaran los datos

Ver el fichero de consultas en la última parte de este tutorial



7
Ejecutar los queryes Hive y Guardarlos
El detalle de los queryes están en el ultimo paso de este tutorial


8
Para ver los datos procesados por Hive en la base de datos H2 , debemos habilitar su puerto web , para esto descomentamos las líneas resaltadas y reiniciamos el servidor : WSO2_HOME/wso2bam-2.4.0/repository/conf$ carbon.xml
<H2DatabaseConfiguration>
    <property name="web" />
    <property name="webPort">8082</property>
    <property name="webAllowOthers" />

    <!--property name="webSSL" />
    <property name="tcp" />
    <property name="tcpPort">9092</property>
    <property name="tcpAllowOthers" />
    <property name="tcpSSL" />
    <property name="pg" />
    <property name="pgPort">5435</property>
    <property name="pgAllowOthers" />
    <property name="trace" />
    <property name="baseDir">${carbon.home}</property-->
</H2DatabaseConfiguration>

url de datos relacional H2 : http://wso2-desktop:8082
jdbc:h2:repository/database/samples/BAM_STATS_DB;AUTO_SERVER=TRUE
Driver Class Name : org.h2.Driver
User Name : wso2carbon
Password : wso2carbon


9
Ahora generaremos un gadget para visualizar los datos procesados jdbc:h2:repository/database/samples/BAM_STATS_DB;AUTO_SERVER=TRUE
Driver Class Name : org.h2.Driver
User Name : wso2carbon
Password : wso2carbon


10
Seleccionar la query hacia tablas de H2


11
Seleccionar  Preview


12
Ingresar Metadatos




13
Se genera fichero xml donde se guarda el gadget


14
Ir al repositorio de Gadgets Escoger : Add



15
Añadir los metadatos y el url generado en el paso anterior http://wso2-desktop:9763/registry/resource/_system/config/repository/components/org.wso2.carbon.bam.gadgetgen/gadgetgen/sumario_procesos.xml


16
Veremos que ya está guardado en el repositorio


17
Ahora Ir a la opción GadgetServer
Escoger : Add Gadgets


18
Escoger : Add
Y seleccionar nuestro gadget de la lista


19
Veremos como se despliega en la pestaña Home







20
Para obtener el reporte del detalle de procesos repitamos todos los pasos del 10 al 21 con el query:
Select IDPROCESO,ESTADO,FECHAINICIO,FECHAACTUALIZACION,COMPANIA,RAMO,POLIZA,AGENTE from DETALLE_PROCESOS


23
ANEXO : fichero de consultas de analítica .
Antes de ejecutarlo quitarle comentarios.
--QUERYS PARA TABLA DE PROCESOS
--ok hive apuntando a casandra
CREATE EXTERNAL TABLE IF NOT EXISTS hive_tablaprocesos1 (
    logId STRING,idproceso INT,estado STRING,
    fechainicio STRING,fechaactualizacion STRING,
    compania STRING,ramo STRING,poliza INT,agente STRING)
    STORED BY 'org.apache.hadoop.hive.cassandra.CassandraStorageHandler'
    WITH SERDEPROPERTIES (
    "wso2.carbon.datasource.name" = "WSO2BAM_CASSANDRA_DATASOURCE" ,
    "cassandra.cf.name" = "es_demowso2bam_tablaprocesos1" ,
    "cassandra.columns.mapping" =
    ":key,payload_idproceso, payload_estado, payload_fechainicio,payload_fechaactualizacion,payload_compania,payload_ramo, payload_poliza,payload_agente" );


   
--hive apuntando a h2    -- procesada de recuenta de tareas agrupadas por estadoCREATE EXTERNAL TABLE IF NOT EXISTS sumario_procesos1(
    proceso STRING, proceso_count INT)
    STORED BY 'org.wso2.carbon.hadoop.hive.jdbc.storage.JDBCStorageHandler'
    TBLPROPERTIES (
    'wso2.carbon.datasource.name'='WSO2BAM_DATASOURCE',
    'hive.jdbc.update.on.duplicate' = 'true' ,
    'hive.jdbc.primary.key.fields' = 'proceso' ,
    'hive.jdbc.table.create.query' =
    'CREATE TABLE sumario_procesos1 (proceso VARCHAR(100) NOT NULL PRIMARY KEY,
     proceso_count  INT)' );   

--hive apuntando a h2 -- procesada de detalle de tareas ordenadas por estado
CREATE EXTERNAL TABLE IF NOT EXISTS detalle_procesos1 (
    logId STRING,idproceso INT,estado STRING,
    fechainicio STRING,fechaactualizacion STRING,
    compania STRING,ramo STRING,poliza INT,agente STRING)
    STORED BY 'org.wso2.carbon.hadoop.hive.jdbc.storage.JDBCStorageHandler'
    TBLPROPERTIES (
    'wso2.carbon.datasource.name'='WSO2BAM_DATASOURCE',
    'hive.jdbc.update.on.duplicate' = 'true' ,
    'hive.jdbc.primary.key.fields' = 'logId' ,
    'hive.jdbc.table.create.query' =
    'CREATE TABLE detalle_procesos1 (logId VARCHAR(100),idproceso INT ,
     estado  VARCHAR(100),fechainicio VARCHAR(100),fechaactualizacion VARCHAR(100),compania VARCHAR(100),
     ramo VARCHAR(100),poliza INT,agente VARCHAR(100))' );
    
   
--analitica     -- procesada de recuenta de tareas agrupadas por estado  insert overwrite table sumario_procesos1
    select estado as proceso,count(idproceso) as proceso_count
    from hive_tablaprocesos1
    group by estado;


-- analitica ---- procesada de detalle de tareas ordenadas por estado   
insert overwrite table detalle_procesos1
    select logId,idproceso,estado,fechainicio,fechaactualizacion,compania,ramo,poliza,agente
    from hive_tablaprocesos1
     order by estado;

 
FIN

















jueves, 23 de enero de 2014

WSO2 BAM & BIGDATA

WSO2 BAM  =  Hadoop, Hive, Cassandra, Google Gadget, WSO2 Carbon.

En esta ocasión presentamos el producto WSO2 BAM , analizaremos sus ventajas y arquitectura.

WSO2
El fabricante WSO2 ofrece una completa suite de productos Open Source SOA .  Son contribuidores de muchos productos de Apache incluyendo: Apache Axis, Apache Rampart, Apache Synapse y más. Los productos de WSO2 se distribuyen bajo licencia Apache. Algo que destacar es que la versión de libre descarga de sus productos también es única y es la versión “productiva”, no manejan una versión alternativa “community” como otros vendedores. 

BAM
Según Gartner,  Business Active Monitoring (BAM)  describe los procesos y tecnologías que nos permiten el análisis de indicadores de negocio basados en data de tiempo real.
BAM es usado para mejorar la velocidad y efectividad de operaciones de negocio manteniendo la pista de que lo que esta pasando y haciendo visibles los posibles problemas. El concepto BAM puede ser implementado con muchos tipos de herramientas de software, no es una especificación de software.

BIG DATA
Es el termino para un conjunto de datos muy extenso y diverso que es difícil de procesar usando herramientas de base de datos o aplicaciones tradicionales de procesamiento de datos. Los retos incluyen capturar, subsanar, almacenar, buscar , compartir, transferir, analizar y visualizar.

WSO2 BAM
Es un producto que nos ofrece  un BAM de “propósito general” , esto quiere decir que no solo es para monitorear indicadores de procesos de negocio , sino casi cualquier fuente de datos que conectemos  usando su API . 
BAM usa Hadoop para procesar gran cantidad de datos en poco tiempo, por esto también es una herramienta que complementa una solución Big Data.
Para monitorear otros productos WSO2 tiene funcionalidad Out of the Box, muy sencilla y simple de configurar. 


COMO FUNCIONA WSO2 BAM
A continuación veremos paso a paso BAM agrega, analiza y presenta los datos: 







PASO  1
Los datos llegan de sistemas externos (  Agregar Datos ) , esto se puede hacer síncrona o asíncronamente usando una cola, para el envío se usa el API Data Agent , esto es : tenemos un API REST para enviar los datos al servidor entonces el cliente lo podemos escribir en cualquier lenguaje, si es JAVA tenemos librerías para hacerlo de forma fácil.

PASO 2
Los datos son recibidos por el componente Data Receiver, este componente los carga en la base de datos Cassandra , donde están los datos no procesados.

PASO 3
Para analizar los datos, se usa Apache Hive , este componente recoge los datos de Cassandra , los analiza y los inserta en la base de datos relacional ( por defecto H2, puede ser Oracle, Mysql , etc) . Apache Hive nos abstraer de la fuente y destino de datos, con esto podemos concentrarnos en implementar los queryes Hive que son sql “friendly”  los cuales analizan los datos.  Estos querys pueden programarse para ejecutarse cada X segundos. Apache Hive por debajo usa procesos Hadoop para ejecutar la analítica de querys Hive en paralelo y usando map reduce.

PASO 4
Los datos ya analizados (los resultados) son insertados en la base de datos relacional, listos para que sean explotados por las herramientas de visualización.

PASO 5
Para presentar los datos, extraen la data procesada de la base de datos relacional. Tenemos tres componentes: un dashboard web , reportes con Jaspers Reports y gadgets con WSO2 Gadget , estos últimos los más interesantes, descritos mas adelante.


CAPACIDAD MULTITENANCY
En una organización grande es muy común tener departamentos y dominios diferentes de información lo cual va unido a la necesidad de tener separar totalmente la administración/configuración y datos, esto se puede lograr sin necesidad de crear otra instancia de este, reusando la misma infraestructura. 






CAPACIDAD DE VISUALIZACION
El input de los componentes de visualización es por defecto la base de datos relacional H2 ,
Para esta capacidad se tiene tres componentes:
Dashboard : para indicadores en tiempo real en una interfaz web , no consumible desde otra aplicación .
Reports : para tener reportes impresos se usa Japer Reports .
Gadgets : el componente más interesante de los tres, un gadget sigue la especificación Google Gadget son pequeñas porciones  consumibles como los “portlets” ,se pueden desplegar en cualquier servidor que siga la especificación, por ejemplo JIRA  o Confluce, formatean los datos usando solo : CSS, HTML5 y javascript, los datos llegan de un servicio REST implementado con jaggery. Pueden ser construidos de cero o basándonos en uno generado con Gadget Generartor Tool .  




CAPACIDAD  DE ESCALAMIENTO  Y ALTA DISPONIBILIDAD
WSO2 BAM puede crecer horizontalmente, cada uno de sus componentes se puede duplicar y ser parte de un cluster, también puede ser desplegado en alta disponibilidad.
Los “Data Receiver” se pueden configurar y crecer en número, con esto se evita posibles problemas de cuello de botella cuando hay alto tráfico de datos.
La base de datos Cassandra  puede formar un cluster usando varias máquinas, WSO2 BAM reconoce esta configuración y la usa.
Los procesos de análisis Hadoop se pueden hacer en varias máquinas, de esta forma tenemos procesamiento intensivo y rápido. Finalmente la aplicación Web de visualización ( Reportes, Dashboard y Gadgets ) también se puede clusterizar , está ejecutándose sobre un servidor de aplicación WSO2 Carbon .




En la próxima entrada veremos un tutorial de como usar la herramienta paso a paso .