Friday, August 24, 2018

Servicios y Microservicios

Sesión 2. Servicios y Microservicios

(17 / Agosto 2018 )

La sesión II presenta un enfoque de las arquitecturas orientadas a microservicios y a servicios. La información presentadas 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.

La mejor forma de iniciar con el estudio de los conceptos de Servicios y Microservicios, quizas sea a través de una analogía de la evolución del sofware explicada con tipos de "pasta".


La evolución en la arquitectura de software, de la manera como se desarrolla y despliega inicio (no oficialmente llamada de esa manera) como "spaguetti", es decir se tenia poco control del código, luego, logrando mayor organización, se distribuyó en capas (parecido a como se ve la "lasagna"), hoy se tiene una nueva generación basada en servicios y microservicios (tal como lucen unos "raviolis"). 
La idea general de los servicios y microservicios es que en vez de tener una gran base de datos en la capa inferior con una capa lógica y una capa de interfaz (UI) en el nivel superior, los microservicios dividen pequeñas partes de la lógica de negocio, la funcionalidad y los datos dentro de pequeñas unidades autónomas. (Kavaliauskaite, 2017)

Servicios

Los servicios se caracterizan por que pueden: ser descubiertos, cubren una necesidad, tienen o no un estado, exponen su funcionalidad a tráves de interfaces (la interfaz se refiere a la declaración de un acuerdo-contrato), tienen capacidad de comunicaciones, son integrables, pueden ser orquestados (dirigidos, bus de servicios empresariares) y/o coreografiados (mensajes, enfocado a microservicios), son medibles y es una unidad funcional de NEGOCIO que tiene un contrato definido y capacidad de composición.


Microservicios

Los microservicios no están asociados con valor, es decir no resuelve un requerimiento funcional del negocio, pero si puede resolver un requerimiento funcional. (esto es debatible debido a los distintos enfoques de las arquitecturas SOA y de microservicios).


En otras palabras:

  • Unidades de negocios = Esencial.
  • Unidades Funcionales de negocio = Servicios.
  • Unidades Funcionales = Microservicios. 
"Los servicios y microservicios son modelos arquitectónicos"
Algunos autores consideran que los microservicios son una mejora del modelo de arquitectura orientada a servicios, mientras en la literatura tambien se puede encontrar descripciones de los microservicios como una arquitectura independiente coreografíada, a diferencia de los servicios que son orquestados.

Aquí se considerará que la arquitectura SOA es la base de la arquitectura de microservicios, teniendo presente que la primera es Orquestada (esta caracterizada por su bus "Enterprise Service Bus"y los protocolos de comunicación deben ser conocidos y fijos) y la segunda es coreografiada (los microservicios se exponen através de una API, con protocolos simples de comunicación sin un bus que lo dirija). A continuación se profundiza en las diferencias basado en las arquitecturas.

Visto desde el punto de vista arquitectónico se tiene:

  • Arquitectura orientada a servicios (SOA): 
Es una arquitectura de software donde distintos componentes de una aplicación proveen servicios a otros componentes via protocolos de comunicación sobre la red. Estos distintos servicios llevan a cabo pequeñas funciones: como validar pago, crear una cuenta de usuario o log-in por redes sociales, etc.
SOA es menos relacionado en como modularizar una aplicación y más en como componer la aplicación a través de componentes de software distribuidos.
Existen dos roles importantes, "service provider" y "service consumer". La capa del consumo es el punto donde usuario (humanos, otras aplicaciones, y terceros) interactian con SOA, y la capa del proveedor es la encargada de todos los servicios dentro de SOA.

  • Arquitectura Microservicios
La arquitectora de microservicios se puede considerar como el siguiente paso de SOA,  es una tipo de arquitectura que es una manera particular de desarrollar sofware, web y aplicaciones moviles como suites de servicios independientes. Con independencia quiere decir que pueden incluso ser escritos en otros lenguajes de programación y usar diferentes bases de datos. Ademas  casi no existen administradores de servicios y losmicroservicios usan comunicaciones ligeras como HTTP, REST o API's de terceros.


Diferencias

  • Desarrollo: En SOA cada equipo necesita conocer un mecanismo de comunicación común, en cambnio en microserv9cios los servicios ṕueden operar independientemente facilitando el despliegue.
  • Comunicaciones: En SOA existe un punto sigular de fallo que puede afectar todo el sistema, mientras que los microservicios son  más tolerantes a los errores.
  • interoperabilidad: SOA provee distintos protocolos de comunicación, mientras que microservicios busca simplificarlo con un número reducido de opciones de integración.
  • Tamaño: Microservicios es significatimanete más ligero que SOA.

Image title
 (Despodovski, 2017)


Taller 2.
Microservicio de sistema transmilenio con DevOps, donde se ejecute una función del sistema.

Para el desarrollo del taller se considero la funcipon de Consultar saldo de tarjeta. Se diseñaron diagramas de componentes y secuencia de la función y se implemento el servidor REST en Java. El repositorio se encuentra en:

https://github.com/jdaf2008/tallerMicroServicio 


Referencias

Kavaliauskaite, G. (2017, December 03). Microservices - Technology Or Team Size: An Interview with Technical Director Matt Meckes. Retrieved August 24, 2018, from https://cohaesus.co.uk/microservices-technology-or-team-size-an-interview-with-technical-director-matt-meckes/

Despodovski, R. (2017, November 12). Microservices vs. SOA – Is There Any Difference at All? - DZone Integration. Retrieved from https://dzone.com/articles/microservices-vs-soa-is-there-any-difference-at-al







Sunday, August 19, 2018

Introducción Aplicaciones sobre la Nube

Sesión 1. Conceptos Básicos de aplicaciones sobre la Nube

(10 / Agosto 2018 )

La sesión I incluye los conceptos básicos de computación sobre la nube, los cuales son recopilados 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.

Con el proposito de iniciar el estudio de computación en la nube es necesario comenzar con la definición de conceptos básicos que permitan su aplicación.

  • Computación sobre la nube
Como una visión general, la computación en la nube puede ser entendida a partir de la siguiente definición:

"Provisión bajo demanda de servicios relacionados con tecnologías de la información en un plataforma accesible a través de protocolos de red" Es un disciplina para diseñar, desarrollar, mantener y operar, dichos servicios.
Recopilando las definiciones dadas por los más influyentes prestadores de servicios en la nube (AWS, Google Cloud Platform, Azure, Alibaba), estos coinciden en considerar la computación en la nube como la entrega por "Demanda de recursos computacionales, almacenamiento de bases de datos, aplicaciones, y otros recursos IT, a través de plataformas de servicios en la nube".

Tipos Básicos de computación en la nube

Una vez definido el concepto general de "cloud computing", es importante considerar que todos las cargas de trabajo en un escenario en la nube utilizan recursos que son operados por proveedores de servicios, de manera que los modelos de servicios en la nube definen que recursos son manejados completamente por infraestructura propia o por los proveedores. 

Dentro de los modelos se tiene:
  • IaaS: Infraestructura como servicio. Para este enfoque la organización se encarga de la administración, mientras el proveedor por su parte le da a la organización la habilidad de crear y configurar recusos desde la capa de computación; esto incluye maquinas virtuales, contenedores, redes, accesorios, y otros recursos asociados con la infraestructura.
  • PaaS: Plataforma como servicio. En este caso la organización solo se preocupa por la instalación de la aplicación. Es decir que el proveedor brinda un ambiente de trabajo sobre el sistema operativo.
  • SaaS: Todo gestionado por terceros. Este modelo tiene los menores niveles de control por parte de la organización, de manera que no hay ningún control sobre el "backend", excepto por las tareas relacionadas con la aplicación.
Los conceptos anteriormente descritos se pueden entender mejor con la siguiente imagen:

Tipos Básicos de administración y despliegue en computación en la nube

Basicamente la administración y despliegue en la nube se categoriza en:

  • Nube ("Cloud"): Donde la aplicación es totalmente desplegada en la nube y todas las partes de la aplicación se ejecutan en la nube.
  • Hibrida ("Hybrid"): En este enfoque se conecta la infraestructura y las aplicaciones entre los recursos en la nube y los recursos existentes que no están localizados en la nube y que se alojan en una infraestructura "On-Premise".
  • Nube privada ("On-Premise"): Se despliegan los recursos de la organización, usando virtualización o herramientas de administración. En otras palabras la organización administra todos los recursos.tecnologias en la nube

Tecnologías

Dentro de las tecnologías aplicacadas en la nube, se pueden encontrar:
  • Virtualización.
  • Contenedores.
  • Big Data.
  • Fast Data: Procesamiento de datos de streaming.
  • Servicios Web.
  • Aprendizaje de Máquina.

Algunos Paradigmas

Gracias al florecimiento del "cloud computing" o impulsando su desarrollo, han surgido paradigmas para el desarrollo, pruebas y despliegue:  
  • DevOps (Desarrolllo y Operaciones).
  • CICD (Integración Contínua, Despliegue Continuo).
  • Control de Versiones.
  • Automatización de pruebas.
  • Arquitectura orientada a servicios y a microservicios.
  • Single Page Application (Aplicaciones de una sola página).
  • Desarrollo Ágil.

Servicios Básicos

Los servicios y recursos más comunes ofrecidos por los proveedores son, entre otros:
  • Cómputo
  • Almacenamiento: File System, Cache Storage, Object Storage.
  • Base de datos (SQL, NoSQL)
  • Red.
  • Aprendizaje de máquina.
  • Analítica.
  • Seguridad o gestión de identidad.
  • Realidad Aumentada, Realidad Virtual.
  • Integración de aplicaciones.
  • Internet de las Cosas.

Proveedores

Dentro de los proveedores de servicios en la nube más utilizados, se encuentran:

  • Amazon Web Services
  • Google Web Platform
  • IBM cloud
  • Azure
  • Alibaba Cloud
  • Oracle Infrastructure

Prestadores de servicios "Nubes Propias"

Se recomiendan especialmente en casos experimentales y académicos, pero no en proyectos empresariales, debido ol alto consumo de recursos y a la complejidad de su implementación.


Prestadores de servicios "Amazon Web Services" (AWS)

Entre las ventajas y herramientas que dispone AWS se encuentras:
  • Portafolio Diversificado.
  • Ideal para conocer aspectos fundamentales de la computación en la nube.
  • Gestión por API, Consola o Interfaz Web.
  • Cursos gratuitos.
  • Ruta de certificación.

Servicios de AWS

  • EC2.
  • Autoscaling.
  • Cloud formation.
  • AWS IAM.
  • Lambda (FaaS).
  • S3 (Almacenamieto).
  • Elastic Search (Análisis de Logs).
  • Cloud Watch (Monitoréo de recursos).
  • Kinesis.

Buenas Practicas de seguridad en AWS

Se recomienda habilitar MFA (Multifactor Authentication), ademas de administración de identidad y acceso IAM y limitar o restringir los permisos de roles y usuarios.

Para profundizar sobre los conceptos tratados en esta sesión se recomienda el siguiente video:






El primer Paradigma a considerar dentro del "desarrollo, pruebas y despliegue" de aplicaciones basadas en los recursos de la nube es:

DevOps

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. (Davis & Daniels, 2016)⁠

DevOps en sí mismo es un acrónimo de "Desarrollo" y "Operaciones".


Desarrollo: "Plan, Code, Build, Test".
Operación: "Release, Deploy, Operate, Monitor".

En una sesión posterior será considerado con mayor profundidad DevOps.

Tecnologías en el flujo de trabajo de DevOps














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...