Thursday, September 20, 2018

IoT en la Nube

Sesión 6. IoT en la Nube

( 14 / Septiembre 2018 )


En la sesión VI se describen las características de la implementación de IoT sobre la nube. La información presentada fue recopilada de las lecciones recibidas en la MCIC (Maestría de Ciencias de la Información y las Comunicaciones) de la Universidad Distrital en Bogotá-Colombia y de investigaciones adicionales. 

Primero se considera el tema de Tratamiento de datos desde el punto de vista legal en Colombia, y luego se describen los conceptos principales de la implementación de servicios IoT.

Tratamiento de datos

La transferencia y tratamiento de datos para fines no autorizados por parte de su propietario no está autorizado en Colombia, donde se reglamenta su uso a tráves de la ley 1581 de 2012, Habeas Data. La cual, en terminos generales, busca:
"Por medio de esta se busca proteger la información de las personas que esté en poder de empresas públicas o entidades privadas, las cuales tienen la responsabilidad de adaptar sus procesos con el fin de realizar un manejo adecuado de sus bases de datos." (GFA, 2017)
La ley obliga al responsable del tratamiento de los datos a:
  • Adoptar un manual interno de políticas y procedimientos para garantizar el adecuado cumplimiento de la ley.
  • Implementar mecanismos que garanticen la atención de consultas y reclamos, por clientes, proveedores, empleados y terceros en general.
  • Autorización de todos sus clientes, empleados, proveedores y terceros en general para el uso y tratamiento de sus datos personales.
  • Deber de informar al titular de los datos personales sobre la ley y el manejo que se le dará a sus datos.
  • Implementar el procedimiento de reclamos por parte de cualquier cliente, proveedor, empleado o tercero.
  • Diseñar procedimientos para que todo titular de la información pueda consultarla, así como su actualización o suprimir la autorización del uso de sus datos personales.
  • Aviso de privacidad.
El surgimiento de "cloud computting" entendido como un modelo para habilitar el acceso a un conjunto de servicios computacionales de manera conveniente y por demanda, que pueden ser rapidamente aprovisionados y liberados con un mínimo esfuerzo administrativo y una interacciòn con el proveedor del servicios minima, implica que los datos pueden ser almacenados, procesados y administrados por empresas que proveen servicios de cloud (Angarita, 2013)

Por lo anterior lo que se haga con los datos depende del contrato que se suscriba, pero en el marco de la regulación de protección de datos, lo cual incluye:

1. Por definición legal el tratamiento de datos personales implica la recolección, el almacenamiento, el uso, la circulación y la eliminación del dato personal , quien realice dichas actividades debe cumplir con las obligaciones legales.

2. Aun que los datos se encuentren alojados por los proveedores de servicios en la nube, el responsable es la organización que decidió acudír a dichos servicios.

3. Si los datos están alojados en "Data Centers" fuera del país las entidades deben observar las reglas de transferencia o transmisiòn internacional de datos.

De manera que los Responsables del tratamiento de datos deben asegurar que la información este correctamente custodiada y almacenada, como por ejemplo usando metodos de cifrado y encriptación para las transferencias autorizadas.

La implementación y cumplimiento de la ley no se ha efectuado de manera generalizada en el país (por parte de los responsables del tratamiento de datos) por distintas razones que van desde culturales hasta técnicas, respecto a este ultimo punto un obstaculo se presenta debído a la perdida de rendimiento y al aumento de la complejidad al usar métodos de encriptación.

Lo anterior resulta fundamental a la hora de implementar servicios IoT, ya que es indispensable la protección de los datos personales de los usuarios

Servicios de IoT

Los servicios IoT, describen la interconectividad de los dispositivos que pertenecen a la red de IoT.


Se presentan algunas dificultades en:
  • Seguridad y Confiabiliadad.
  • Sincronización.
Estos se resuelven con:
  • Reglas y politicas que determinan las caracteristicas de los datos que son considerados válidos.
  • Se registran las cosas "things".
De manera que se utilizan protocolos para la comunicación en la red interconectada, como los son: HTTP, MQTT y tecnologías de comunicación como Web Sockets.

MQTT

MQTT es un estandar en el transporte de datos en telemetría, en otras palabras es un protocolo de mensajería simple y ligero, basado en los conceptos de publicación/suscripción, el cual fue diseñado para pequeños dispositivos con poco ancho de banda, alta latencia y redes poco confiables. Los principios se basan en minimizar el ancho de banda y los requerimientos de recursos de los dispositivos mientras se intenta asegurar la confiabilidad y algun grado de seguridad de entrega de los datos. Se posiciona como el protocolo ideal "Machine to machine" para la implementación de internet de las cosas en el mundo de los dispositivos interconectados y en aplicaciones moviles donde el ancho de banda y el consumo de potencía son determinantes. 

"La autenticación se efectúa mediante llaves asíncronas" haciendo uso de certificados.




Referencias


Angarita, N. R. (2013). Tratamiento de datos personales. Aproximación internacional y comentarios a la Ley 1581 de 2012. Bogotá: Legis Editores S.A.

GFA. (2017, April 20). ABC del Habeas Data, Ley 1581 del 2012. Retrieved September 24, 2018, from http://blogs.eltiempo.com/huella-forense/2017/04/20/abc-del-habeas-data-ley-1581-del-2012/

MQTT. (2014). MQTT. Retrieved September 28, 2018, from https://mqtt.org/

 

 

BD y almacenamiento en la nube

Sesión 5. Almacenamiento y Base de Datos en la Nube

( 7 / Septiembre 2018 )


En la sesión V se presentan los principios y características del almacenamiento e implementación de Bases de Datos en la nube. La información presentada fue recopilada de las lecciones recibidas en la MCIC (Maestría de Ciencias de la Información y las Comunicaciones) de la Universidad Distrital en Bogotá-Colombia y de investigaciones adicionales. 


Cambios hacia DevOps

  • Arquitectura
Monolítico =>  SOA => μServicios

  • Base de datos 
Centralizadas => Distribuidas

  •  Servidores
Server => Serverless (Virtualización, Contenedores)

  • Almacenamiento 
 Block Storage, File System => Object Storage 


Respecto al almacenamiento en la red, los difersos tipos de sistemas son, generalmente, clasificados en la forma en que son consumidos y como interactuan del lado del cliente, el más tradicional es el "FileSystem" o "File Storage", su nombre implica que multiples clientes tiene la habilidad para acceder a una carpeta compartida, los protocolos más comunes son: NFS y SMB/CIFS.

El almacenamiento por bloques ("Block Storage") provee un acceso a la red equivalente a dispositivos de bloques sin un formato especifico.  Un cliente se conecta a un volumen especifico del servicio de almacenamiento y le da formato como si estuviera alojado localmente. Los dispositivos de bloque usualmente son expuestos sobre canales de Fibra, iSCSI o AoE(ATA sobre internet).

Por su parte al almacenamiento de objetos fue diseñado para datos no estructurados como multimedia, documentos, "logs", "Backups", aplicaciones binarias e imagenes de máquinas virtuales. Conceptualmente es un almacenamiento de tipo llave/valor ("key/value"), dichos objetos son enviados vía REST API, y se retorna un identificador. Incluso pueden ser agregados metadatos a los objetos y estos a su vez son almacenados en contenedores o "buckets". El almacenamiento de objetos en la nube más popular es AWS S3. (2015, Canonical)


Como caracteristicas del almacenamiento en bloque tenemos;

  • Permite almacenar datos no estructurasdos (como se mencino anteriormente ej: Fotos, Videos, etc).
  • Se accede directamente mediante URL.
  • Se pueden migrar transparentemente los datos.
  • Bases de datos NoSQL/SQL.
Adicionalmente las Bases de Datas en el paradigma de SaaS ("Software as a Service") se implementa como DBaaS ("Database as a service"), y su administración en la nube corre por cuenta del proveedor como es el caso de Amazon Web Services.

Dentro de las herramientas que ofrece AWS respecto al almacenamiento y a las BD encontramos:

  • Almacenamiento: Amazon S3, Glacier, AWS Snowball.


  • Bases de Datos: Dynamo DB, RSD



*Nota: Las imagenes de los productos de AWS, fueron tomadas de https://aws.amazon.com

Taller 5

Presentación acerca de las herramientas provistas por AWS

Referencias

Canonical. (2015, May 18). What are the different types of storage: Block, object and file. Retrieved from https://blog.ubuntu.com/2015/05/18/what-are-the-different-types-of-storage-block-object-and-file

Sunday, September 9, 2018

Principios LEAN

Sesión 4. LEAN 

(31 / Agosto 2018 )

En la sesión IV se trata el metodo de gestión LEAN. La información presentada fue recopilada de las lecciones recibidas en la MCIC (Maestría de Ciencias de la Información y las Comunicaciones) de la Universidad Distrital en Bogotá-Colombia y de investigaciones adicionales.

LEAN se puede considerar como un plan de mejora de procesos, fue desarrollado en los 80's por TOYOTA y su principal caractaristica en agilizar el lanzamiento de productos y servicios.

Los principios de LEAN son:

1. Eliminar la Basura.


Se considera basura a todo lo que se hace y no generá valor.
  • Tipos de basura
    • Funcionalidades que no otorgan valor.
    • Procesos extra.
    • Funcionalidades extra.
    • Cambios de tareas.
    • Tiempos de espera.
    • Intercambiar.
    • Defectos.
    • Actividades de gestión (actividades de gestión innecesarias).Respecto al Sofware:
    • Construir la funcionalidad equivocada.
    • No entender el "BackLog" la realimentación.
    • Retrabajo.
    • Soluciones innecesariamente complejas.
    • Perdida de conocimiento.

2. Aumentar el aprendizaje "Nunca cometer dos veces el mismo error".

  • Un diseño temprano no puede anticipar completamente la complejidad durante la implementación.
  • Se espera que el diseño evolucione.
  • Rápidas realimentaciones.
  • Dejar de actuar como si las predicciones del futuro fueran hechos más que pronósticos. En vez de eso se necestita reducir el tiempo de respuesta, de manera que se pueda responder correctamente a los eventos que se van revelando.

3. Postergar las desiciones importantes "Postergarla hasta que sea el momento de tomarla, cuando se necesiten". Siempre hay que estar ocupado.
4. Distribuir tan rapido como sea posible.
5. Empoderar el equipo.
6. Integridad. "Construir con integridad, construir con calidad".
7. Vista holística. Una organización LEAN optimiza el valor de toda la corriente de producción.



Taller 4
Manual básico de tecnologías de virtualización y contenedores.

Este Manual se encuentra alojado en: https://drive.google.com/drive/u/1/folders/16UCqocUe88P12DC3cgw_X_o7oKZv2i28, pero en una proxima entrada en el blog se expondrá.

Taller 4.1
Implementación de microservicios con contenedores. A continuación está el repositorio donde se encuentra el despliegue del contenedor.

https://github.com/jdaf2008/DevOpsNotas

Tuesday, August 28, 2018

Manual de Contenedores

Sesión 3.1. Manual de contenedores y Docker

(24 / Agosto 2018 )

En la sesión III inciso I se construye un manual de contenedores y Docker. Se recomienda leer la sesión III de un post anterior. La información presentada fue recopilada de las lecciones recibidas en la MCIC (Maestría de Ciencias de la Información y las Comunicaciones) de la Universidad Distrital en Bogotá-Colombia y de investigaciones adicionales.


CONTENEDORES

¿Qué es?

Los contenedores, conocidos también como “Operating-system-level virtualization” representan un enfoque óptimo y ligero de la virtualización, ya que solo provee “lo mínimo” que una aplicación requiere para desplegarse y ejecutarse. Múltiples aplicaciones aisladas o servicios pueden ser desplegados y ejecutados en un solo host que accede desde el mismo Kernel. Los contenedores pueden funcionar sobre un “host” local, instancias en la nube (cloud instances) y máquinas virtuales. (Rouse, 2017)


¿Para qué sirve?

El concepto de contenedores presenta el siguiente enfoque:



Cada aplicación es entregada junto con sus dependencias necesarias para su funcionamiento, pero sin incluir el sistema operativo. De manera que las aplicaciones se conectan directamente con el sistema operativo anfitrión (host), por lo tanto no existe ninguna capa adicional del sistema operativo invitado (guest). Esto resulta en un mejor desempeño y no se desperdician recursos. (Leszko, 2017).

Los contenedores resuelven un número de problemas que enfrentaba el despliegue y entrega de productos de software en los modelos tradicionales.

  • Ambiente de desarrollo. Soluciona problemas relacionados con el ambiente de producción como las instalaciones de dependencias. 
  • Aislamiento. Mantiene las aplicaciones separadas lo que impide daños en optros contenedores por software malicioso. 
  • Organización de aplicaciones. 
  • Portabilidad. “write once, run anywhere”.

¿Cuales herramientas existen?

La herramienta más utilizada en contenedores es Docker, qué es un proyecto open source diseñado para el despliegue de aplicaciones usando contenedores de software.

En la definición obtenida de la página de Docker se tiene:


"Los contenedores en Docker agrupan una pieza de software en un sistema de archivos completo que contiene todo lo necesario para ejecutarse: código, tiempo de ejecución, herramientas del sistema, librerias del sistema - todo lo que pueda ser instalado en el servidor, Esto garantiza que el software siempre se ejecute, independientemente del ambiente de desarrollo o producción." (Leszko, 2017)

Docker permite empaquetar una aplicación dentro de una imagen que puede ser ejecutada en cualquier lugar


Alternativas a Docker 

Docker no es el único sistema de contenedores disponibles en el mercado. De hecho las primeras versiones de Docker fueron basadas en el sistema libre (LXC Linux Containers), qué es otra alternativa para los contenedores.

Existen otras soluciones como:

  • FreeBSD Jails.
  • Open VZ. 
  • Solaris Containers. 
No obstante Docker cuenta con mayores ventajas ya que puede ser instalado en gran número de OS, es ligero y cuenta con una amplia comunidad de soporte.


¿Cómo se configuran?

Centrando la atención en Docker, se tiene el siguiente diagrama, que explica su funcionamiento:



Una aplicación “dockerizada” como un web service se ejecuta sobre un “Docker Host” y es alcanzado y ejecutado directamente en la máquina anfitriona. Esto es posible gracias al “port Forwarding”.


Instalación Docker

“Docker puede ser instalado de forma nativa en MAC, Windows o Linux, sin embargo es importante entender que está basado en Linux Kernel.

Prerequisitos:


Mac:
2010 o un modelo nuevo, con soporte de hadware de Intel para la configuración de las unidades de memoria (MMU) virtualización.
macOS 10.10.3 Yosemite o mayor
Al menos 4GB de RAM
No tener 
VirtualBox instalado prevío a la versión 4.3.30


Windows:

64-bit Windows 10 Pro
El paquete de Hyper-V habilitado


Linux:

64-bit
Linux kernel 3.10 o mayor

Instalación en Linux (Ubuntu):

Docker puede ser instalado desde el repositorio:



$ sudo apt-get update
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recvkeys
9DC858229FC7DD38854AE2D88D81803C0EBFCD88
$ sudo apt-add-repository 'deb [arch=amd64]
https://download.docker.com/linux/ubuntu xenial main stable'
$ sudo apt-get update
$ sudo apt-get install -y docker-ce

Una vez instalado, se habilitan los usuarios en docker group
$ sudo usermod -aG docker <username>


¿Cómo se lanzan imagenes?

Para comprobar su instalación se lanza el programa de prueba:

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest:
sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...




Referencias




Leszko, R. (2017). Continuous delivery with Docker and Jenkins: Delivering software at scale. Birmingham ; Mumbai: Packt Publishing.

Monday, August 27, 2018

DevOps, CDCI y Microservicios

Sesión 3. DevOps (Contenedores-Virtualización), Despliegue continuo y Microservicios

(24 / Agosto 2018 )

En la sesión III se describe el modelo o con mayor precisión el movimiento DevOps, y además de las diferencias entre virtualización y contenedores. La información presentada fue recopilada de las lecciones recibidas en la MCIC (Maestría de Ciencias de la Información y las Comunicaciones) de la Universidad Distrital en Bogotá-Colombia y de investigaciones adicionales.

Retomando la definición de DevOps en Sesión I
DevOps es un movimiento cultural que cambia el modo en el que los individuos piensan su trabajo, valora la diversidad del trabajo realizado, soporta intencionalmente los procesos, por los cuales las empresas generan valor, y mide los efectos del cambio social y técnico. Esta es una forma de pensar y de trabajar que permite a los individuos y organizaciones desarrollar y mantener practicas de trabajo sustentables. Es un marco cultural para intercambiar historias y desarrollar empatía, permitiendo a las personas y equipos practicar sus oficios de manera efectíva y duradera.
De manera que el modelo de DevOps exige ciclos cortos entre desarrollo ↔️despliegue, pasando por pruebas. Incluye las arquitecturas de microservicios, y tiene como caracteristicas:
  • Integración Continua.
  • Pruebas.
  • Despliegue Continuo.
Según (Leszko, 2017) El despliegue continuo es la habilidad para llevar los cambios de todo tipo (incluyendo nuevas caracteristicas, cambios en la configuración, corrección de errores, y experimentos) en producción o en las manos del usuario, de forma segura y rápida de manera sostenible. En el flujo de trabajo tradicional, descrito en la siguiente imagen:


El despliegue continuo consiste cambiar cada fase del proceso de entrega tradicional en una secuencia de "scripts" llamado tuberia de despliegue automatico (""automated deployment pipeline). Como historia de exito, Yahoo implementó el despliegue continuo luego de comprar la compañia Flickr.





La caracteristica principal de DevOps son sus ciclos cortos que permiten entregar productos de valor en un periodo muy corto que incluye el desarrollo, prubas y despliegue.

La "automated deployment pipeline" incluye: Integración continua, pruebas de acceptación automática, y administración de configuración:


  • Integración Continua: Esta fase verifica que el código escrito por diferentes desarroladores se integre.
  • Pruebas de acceptación automática: Esta etapa reemplaza la fase de control de calidad manual, y verifica si las caracteristicas implementadas por los desarrolladores cumplen con los requerimientos del cliente.
  • Administración de configuración: Reemplaza las operaciones manuales de configuración del ambiente y despliegue del software.
Retomando el concepto de Servicios de la Sesión II, "el servicio es contractual", eso quiere decir que el contrato es inmutable. Para acceder al servicio esté dispone de ciertas interfaces que pueden ser representadas con diagramas ULM de componentes o de clases.




Las interfaces utilizan API's ("Application Programming Interface"), las cuales son los puntos de entrada a un servicio, concretan el servicio y definen el contrato. Es fundamental la documentación de una API y se debe realizar automaticacmente.

Lo que define el contrato es:


  • La función expuesta.
  • Las caracteristicas.
  • Protocolo de comunicación.
  • Protocolo de representación de datos: XML, JSON (debe incluir la documentación de la estructura).
Retomando la arquitectura de microservicios y en general de la cultura DevOps, se incluyen dos caracteristicas importantes:

  • Multicapa
  • Multinivel: Tiene que ver con los nodos de despliegue. Y si son desplegados en Contenedores o máquinas virtuales.
n Microservicios ↔️n nodos de despliegue

Dos modelos de MUltinivel:

  • Virtualización: Replicar un sistema completo a partir de emulación. Se basa en un imagen de la máquina virtaul, la cual puede ser clonada, apartir de una instantánea. TIene problemas de Uso de recursos.
  • Contenedores: Replicación de un sistema apartir de la base que provee una aplicación MiddleWare. Se pueden agregar aplicaciones a los contenedores. En la siguiente imagen se describe el funcionamiento de los contenedores:

Para entender sus diferencias y ventajas, existe una analógía muy útil que trata sobre gatitos y ganado ("Kittens and Cattle"):

"La diferencia entre el despliegue tradicional de software y el despliegue basado en contenedores es expresado en la analogía de gatitos y ganados. Todo el mundo ama los gatitos, son únicos, cada uno tiene nombre y tratamiento especial a sus necesidades, son tratados con emoción, cuando mueren lloramos. Por el contrario, el ganado existe para satisfacer nuestras necesidad (algo discutiible), incluso tratamos al ganado en singular, solo como un paquete de animales considerados como un todo, no tienen nombres, ni son únicos. Seguramente ellos son únicos (como lo es cada servidor), pero eso es irrelevante. La conclusión es tratar los servidores como ganado, no como mascotas"
Taller 3 
Manual básico de tecnologías de virtualización y contenedores

Este Manual se encuentra alojado en: https://drive.google.com/drive/u/1/folders/16UCqocUe88P12DC3cgw_X_o7oKZv2i28, pero en una proxima entrada en el blog se expondrá.

Referencias


Leszko, R. (2017). Continuous delivery with Docker and Jenkins: Delivering software at scale. Birmingham ; Mumbai: Packt Publishing.


IoT en la Nube

Sesión 6. IoT en la Nube ( 14 / Septiembre 2018 ) En la  sesión VI se describen las características de la implementación de IoT sobr...