viernes, 17 de abril de 2020

Imágenes Dockers

Estoy aprendiendo bastante sobre el tema de docker y docker swarm , gestión de Stacks, Servicios, Containers, Volumenes, .. y sus configuraciones.

Una herramienta que me está ayudando mucho es Portainer, te permite llevar la administración de todos tus servidores docker de manera sencilla y ágil. Muy recomendable:

https://www.portainer.io/

Pongo un enlace a mi perfil en docker hub por si le queréis echar un vistazo:

https://hub.docker.com/repository/docker/jmtalavera

Y mi código en GitHub:

https://github.com/jmtalavera1978/docker

miércoles, 14 de febrero de 2018

BIGDATA - KAFKA - Introducción y Comandos Básicos para Topics

1.       INTRODUCCIÓN

Kafka es un sistema de mensajería (Publish-Subscribe) de alto rendimiento, escalable y tolerante a fallos diseñado para ingerir datos a gran velocidad.


1.1.    Conceptos



  •         Kafka mantiene los mensajes en categorías llamadas Topics.
  • ·      Los productores publican mensajes en un Topic Kafka.
  • ·      Los consumidores se suscriben a los Topics y reciben los mensajes publicados en estos Topics.
  • ·      Kafka se ejecuta como un cluster de uno o más servidores, cada una de los cuales se llama Broker.


1.2.    Estilo de Mensajería

Los sistemas de mensajería tradicionales tienen 2 modelos: Queues (P2P) y Topics (Publish-Suscribe).

En una cola (Queue) cada mensaje va a un consumidor, mientras que en un Tópico (Topic) se hace emite cada mensaje a todos los consumidores (broadcast).

Kafka ofrece una abstracción que permite contemplar ambos modelos: 

El 'Consumer group':
Los consumidores se identifican con un identificador de grupo de consumidores o 'Consumer Group ID', cada mensaje publicado a un Topic en Kafka es enviado a una única instancia dentro del mismo grupo. Esto implica que puede existir varios consumidores de un mismo grupo ejecutándose en paralelo y subscritos al mismo Tópico, sin que se procese un mismo mensaje a la vez por dos o más consumidores, lo que permite un procesamiento más rápido de los mensajes enviados a Kafka (crecimiento horizontal).

De este modo si todas las instancias de consumidores tienen el mismo Id. de Grupo funciona como un Sistema de Colas (Queue), mientras que si cada instancia tiene un Id. de Grupo distinto funciona como un Sistema Publish-Suscribe.

1.3.    Anatomía de Tópicos: Particiones


·        En Kafka los Tópicos se organizan en particiones, que son secuencias de mensajes ordenados e inmutables. Los mensajes en una partición tienen asignado un número secuencial llamado 'offset' que identifica cada mensaje en una partición (esto permite que el rendimiento sea constante).


·        Las particiones se distribuyen sobre los servidores del clúster Kafka, de modo que cada Servidor se encarga de manejar los datos y peticiones a una parte de las particiones.
·        
      Las particiones se replican a un número configurable de servidores para tolerancia a fallos (recomendado 3 mínimo).

·        Las particiones permiten que el tamaño de un Tópico sea mayor que la capacidad de un Servidor, cada partición individual debe caber en el servidor que lo almacena, pero un tópico está formado por varias particiones.
·   
      Cada partición tiene un Servidor que actúa como Líder (leader) y servidores que actúan como Seguidores (followers).
·    
      El leader maneja todas las peticiones de lectura y escritura para una partición mientras que los followers replican al leader pasivamente.
·    
      Si el líder falla uno de los seguidores automáticamente se convierte en el nuevo líder.
·    
      Cada Servidor actúa como líder para algunas de las particiones y como seguidor para otras de modo que  la carga se balancea correctamente en el clúster.
·    
      El clúster Kafka mantiene todos los datos publicados (sean consumidos o no) por un tiempo configurable.

1.4.    Sincronización entre Clusters

Un Cluster Kafka no está pensado para estar distribuido entre datacenters, el soporte para escenarios multi-datacenter en Kafka se da a través del mirroring entre clusters.
Esta característica permite que el cluster mirror actúe como consumidor del cluster fuente.


2.       Mantenimiento y comandos para Topics

Es necesario saber la ruta del zookeeper de kafka que se define al añadir el módulo de kafka en Cloudera o la solución BigData que se esté utilizando. Supongamos que la ruta relativa definida es: /kafka
y que se esté usando el puesto por defecto: 2181. En caso contrario habrá que poner los valores correspondientes.

2.1.    Crear un Topic

kafka-topics --create --zookeeper [ZOOKEEPER-HOST]:2181/kafka --replication-factor 2 --partitions 2 --topic [TOPIC_NAME]

2.2.    Modificar un Topic

kafka-topics --zookeeper [ZOOKEEPER-HOST]:2181/kafka --alter --partitions 4 --topic [TOPIC_NAME]


2.3.    Eliminar un Topic

kafka-topics --delete --zookeeper [ZOOKEEPER-HOST]:2181/kafka --topic [TOPIC_NAME]

Si el topic se queda como marcado para eliminación. Para eliminarlo por completo hay que hacer lo siguiente :

1.  Parar los brokers de kafka.
2.   Borrar los datos de topics del disco, normalmente están en la carpeta siguiente (hay que eliminar lo que corresponda a nuestro topic):
a.    /var/local/kafka/data
3.   Ó Borrar los topics de zookeeper, para ello:
a.    Ejecutar : zookeeper-shell.sh [ZOOKEEPER-HOST]:2181/kafka)
   El comando debe estar en una ruta asimilar a la siguiente:
       /opt/cloudera/parcels/KAFKA-2.2.0-1.2.2.0.p0.68/lib/kafka/bin/
b.    Borrar los topics de la siquiente ruta:  
      rmr /kafka/brokers/topics/[TOPIC_NAME]  ó  /brokers/topics/[TOPIC_NAME]
c.    Comprobar y borrar también los directorios: 
         /kafka/config/topics/[TOPIC_NAME] ó /config/topics/[TOPIC_NAME]
         /kafka/admin/delete_topics/[TOPIC_NAME] ó /admin/delete_topics/[TOPIC_NAME]
d.    Comprobar con :   ls [RUTA]

2.4.    Listar Topics

kafka-topics --list --zookeeper [ZOOKEEPER-HOST]:2181/kafka

2.5.    Enviar mensajes a un Topic

kafka-console-producer --broker-list [SERVER1:9092,SERVER2:9092,...] 
--topic [TOPIC_NAME]

>Mensaje1
>Mensaje2
>Crtl^C (salir)

Esto nos permitirá enviar mensajes de prueba para probar nuestros consumidores.

2.6.    Recibir mensajes de un Topic

kafka-console-consumer --zookeeper [ZOOKEEPER-HOST]:2181/kafka --topic [TOPIC_NAME] [--from-beginning]

Mensaje1
Mensaje2

2.7.    Consultar descripción de un topic

kafka-topics --describe --zookeeper [ZOOKEEPER-HOST]:2181/kafka --topic [TOPIC_NAME]

 

2.8.    Consultar lista de brokers

zookeeper-shell.sh [zookeeper_address] <<< "ls /brokers/ids" 


2.9.    Eliminar mesanjes de un Topic de Kafka

kafka-topics --zookeeper [zookeeper_address] --alter --topic [TOPIC_NAME] --config retention.ms=1000
kafka-topics --zookeeper [zookeeper_address] --alter --topic [TOPIC_NAME] --delete-config retention.ms



miércoles, 10 de septiembre de 2014

Mi primera aplicación Android en Google Play Store

Acaban de publicar mi primera aplicación implementada para móviles Android, es una aplicación sencilla que permite acceder en la web de compras ecológicas http://www.cerroviejo.org y guardar los datos de acceso, pero por algo hay que empezar:



Cerro Viejo en Google Play

lunes, 11 de agosto de 2014

Formato de filas alternativas en Hoja de Cálculo de Google Docs


Conseguir un formato de filas alternativas en las Hojas de Cálculo de Google Docs es bastante sencillo, aunque yo no encontré información al respecto y tuve que investigar un poco entre las funciones que proporciona. Entre ellas está ISEVEN(#VALOR), que comprueba si el número que se le pasa es PAR.

Para conseguir, por ejemplo, un color de fila alternativo, basta con seguir los siguientes pasos:
  1. Seleccionar las celdas o filas que queramos formatear.
  2. Seleccionar Color de Relleno -> Formato Condicional.
  3. El valor condicional debe ser:
    • La fórmula personalizada es:      =ISEVEN(ROW())
  4. Seleccionar formato de Texto y/o de Fondo para las filas pares.
Para hacer lo mismo, para filas impares, solo hay que negar la función anterior o sumarle 1 al número de fila: =ISEVEN(ROW()+1)



viernes, 13 de enero de 2012

Metodologías Ágiles, Ecosistema y Reciclaje de Software

Esta es una propuesta que pretende la modernización de los procesos de desarrollo a través de mejoras en partes importantes del desarrollo de software: la metodología y los sistemas de desarrollo.

Para modernización de metodologías propongo la implantación de una de las metodologías ágiles de desarrollo más conocida y utilizada en la actualidad: SCRUM; que además es compatible con las metodologías de calidad actuales (no las sustituye, las complementa).

Como mejora en los sistemas de desarrollo se propone la creación de un ecosistema de software completo que permita la mejora de la calidad y reciclaje de software.


Modernización de la metodología: Metodología y flujo de información ágil

Implantación de dos formas de trabajo que agilicen losdesarrollos:

Implantación de una metodología ágil tipo SCRUM,que puede ser incluida en las ofertas a clientes o pliegos, mejorando dichasofertas. Permite agilizar el desarrollo al separar diseño y construcción, y escompatible con las metodologías de calidad actuales (métrica, CMMI,…).

  • Es un proceso ágil e iterativo que nos ayuda a poner nuestro mayor esfuerzo en entregar el valor más importante de un producto en el tiempo más corto posible.
  • Nos permite enviar, inspeccionar y evaluar periódicamente software funcionando (cada 2-6 semanas aproximadamente).
  • El negocio determina las prioridades, los equipos se auto-administran para encontrar la mejor forma de encontrar las características más prioritarias.
  • Cada 30 días aproximadamente se puede ver software real que funciona y decidir si se entrega así o se sigue refinando en el siguiente ciclo.

Ventajas:

  • Fácil de explicar y entender.
  • Máximo valor por el esfuerzo.
  • Equipos auto-organizados, multi-aprendizaje.
  • Liberación de versiones totalmente funcionales, aunque con funcionalidad limitada, en cada iteración.
  • Orientación al cliente: lo involucra y le permite establecer prioridades.
  • Satisface al cliente con entregas tempranas y continuas de productos parcialmente funcionales.
  • Provee a la gerencia o dirección con un vistazo diario sobre el nivel de productividad y los factores que la afectan.
  • Mayor productividad en el desarrollo de software.
  • Permite producir software de forma regular, consistente y competitiva.
  • Útil en entornos con requisitos inestables, se aceptan requisitos cambiantes, incluso en etapas avanzadas.

La principal desventaja de esta metodología de trabajo esque si se aplica de forma estricta no es aplicable a grandes proyectos, sinembargo, esto se puede resolver dividiendo el desarrollo de aplicacionesgrandes en módulos y separando por equipos y aplicando la metodología por cada equipode desarrollo o/o módulo (sería un SCRUM Modular).

Posteriormente se puede aplicar la metodología ágil en unnivel superior (que podría estar integrado por los analistas o los analistasprogramadores principales de cada grupo) por el cual se realice la comunicacióncon los clientes a través de las reuniones o conferencias que se aplican enesta metodología (SCRUM Jerarquizado).

La potencia de esta metodología se encuentra en laflexibilidad con la que se puede llevar a cabo según interese en cada proyecto,no hay que seguirla de manera estricta.


Modernización de los procesos: Ecosistema de desarrollo y de reciclaje deSoftware

Trataría en realizar la implantación de un ecosistema desoftware completo, en la cual se disponga de algunas de lasherramientas que la integran como son artifactory, jira o HGC, la Wiki…

Existe un grupo de google que habla acerca de este tema: http://groups.google.com/group/ecosistemas-software

Un ecosistema de desarrollo de software (developmentecosystem) es un espacio de trabajo en el que conviven una serie deherramientas que permiten a un equipo de desarrollo modelar una metodología detrabajo que les ayude a ser más eficientes. Un ecosistema de desarrollo desoftware:

-         Facilita la integración continua.
-         Facilita la automatización.

Algunas de las herramientas que pueden ayudar a tal fin sonlas siguientes:

-     Maven: Herramienta de gestión de proyectos desoftware y herramienta de comprensión y gestión de dependencias entrelibrerías. Sería interesante definir arquetipos o plantillas de integración delos proyectos en los repositorios
-     Apache Continuum:Servidor de integración continua, integrable con repositorios de código.Pruebas de calidad y de consistencia.
-     Hudson: Otroservidor, este extensible, para integración continua.
-     Sonar:Plataforma de medición de calidad del código.
-     OpenFire y/opandion: Proporcionan herramientas de servidor y cliente para colaboraciónen tiempo real (Servicios de mensajería corporativa).
-      JUnit: Testeo unitario de aplicaciones.
-      Apache JMeter: Herramienta de prueba de carga, pruebasunitarias o monitoreo.
-      Apache Archiva o artifactory: Repositorios deMaven y Maven2, gestión de dependencias, hace de proxy caché de un repositoriopropio con otros existentes. Habría que integrarlo con el resto de herramientas y utilizarlo como base enel reciclaje de software desarrollado en la empresa, ya sean utilidades(validaciones java por ejemplo), módulos extensibles  (por ejemplo, módulos configurables de integracióncon repositorios LDAP) o productos.
-      Jira o trac: Sistemasde gestión de tareas e incidencias.
-      Wiki: Sitio web cuyas páginas pueden sereditadas rápidamente por múltiples usuarios, donde gestionar la información delos proyecto, utilidades, módulos y productos de la empresa.
-     Repositorio Subversion o GIT: Sistema de control deversiones que mejora el desarrollo colaborativo.


Mejoras de la solución conjunta:

-      Aumenta la productividad y se reduce el tiempo de losdesarrollos:
o       Segúnla metodología SCRUM los desarrollos se pueden empezar en paralelo con eldiseño.
o       Mayorreutilización de código (reciclaje), componentes, soluciones y/o productos quepueden ser compartidos en el Artifactory y documentados en WIKI corporativa.

-      Mejora de la calidad del software: El uso deherramientas de pruebas unitarias JUNIT no es obligatorio, por eso laintegración con herramientas como Sonar puede permitir la evaluación de lacalidad de cada proyecto integrado en artifactory.

-      Mayor grado de implicación y satisfacción del cliente:
o       Mejorael conocimiento del cliente sobre la evolución del proyecto.
o       Elcliente puede ver como evoluciona su producto y hacer pequeñas rectificacionessobre la marcha.

-      Fiabilidad, estabilidad y escalabilidad: se detectanerrores con mayor antelación a lo largo de las distintas etapas de desarrollo,por lo que el producto será mucho mejor y se acercará más a las necesidades delcliente, que haciendo una única entrega al final.

-      Fomenta la colaboración para el desarrollo/evolución de productos quepueden ser vendidos bajo  licencia en el mercado actual o abriendo mercado enotros sitios (si un proyecto es innovador, es más fácil convertirlo enproducto).

Imágenes Dockers

Estoy aprendiendo bastante sobre el tema de docker y docker swarm , gestión de Stacks, Servicios, Containers, Volumenes, .. y sus configurac...