¿Cuántos nueves? Entendiendo el concepto de disponibilidad

Es muy probable que hayas experimentado un sistema caído, ya sea una aplicación en la que has trabajado o algún servicio que consumes. Le ha pasado a Amazon, Netflix, Microsoft, Salesforce, etc. ¿Cuánto tuviste que esperar? o ¿cuánto tus usuarios?

Si al estar construyendo una aplicación le preguntas a tu jefe (o cliente) qué porcentaje de tiempo la aplicación debe estar disponible, lo más seguro es que recibas respuestas como “siempre” o “100% (o más)”.

Aunque no queremos que pasen cosas malas, pasarán: bugs, ataques, fallas de corriente, desastres naturales, etc., son escenarios que pueden afectar un sistema. Esperar que no pases es ingenuo; es mejor pensar en y planear para los fallos, ya que son inevitables.

Disponibilidad (availability) es la capacidad de una aplicación de estar disponible después y a pesar de que un problema ocurre. Repito, no estamos diciendo que no habrá problemas, sino que tan efectivamente podrá recuperarse. Esto significa que tenemos que a) identificar los puntos de falla potenciales y b) crear una estrategia para prevenir que el error se convierta en una falla afectando al usuario (un árbol que cae en el bosque cuando no hay nadie, no hace ruido).

Meetup GDL Connect 22/Mar

Ayer estuve platicando acerca de Azure Functions en el meetup de la comunidad .NET en Guadalajara

La presentación la pueden ver en mi perfil de Speaker Deck.


Pueden encontrar el código del demo en mi perfil de Github, y en este post la descripción completa de como se realiza.

Muchas gracias a EPAM por el apoyo.

#TiempoMeets 2/Mar

El día de hoy me tocó platicar acerca de microservicios con Azure Service Fabric en el evento #TiempoMeets

Pueden ver la grabación en Periscope, el código de ejemplo en Github y los slides de la presentación en mi perfil de SpeakerDeck

Muchas gracias a Tiempo por la invitación

Creando un servicio WCF para Azure Service Fabric (II)

Este post es parte de una serie acerca Service Fabric.

  1. Introducción a Service Fabric
  2. Creando un servicio WCF para Azure Service Fabric

Escribí un artículo para DotNetCurry acerca de WCF y Service Fabric. Pueden encontrarlo aquí.

Introducción a Service Fabric (I)

Este post es parte de una serie acerca Service Fabric.

  1. Introducción a Service Fabric
  2. Creando un servicio WCF para Azure Service Fabric

En el principio (en un tiempo no muy lejano) fue el servidor local y la vida del desarrollador era un caos. El equipo de IT (si no había uno, entonces el desarrollador) era responsable de que el servidor en donde se montaba una aplicación estuviera funcionando como debía. Era su culpa si esto no pasaba.

Después, con el aprovechamiento de la virtualización vino la nube y trajo, entre sus ventajas más notorias, el darnos la oportunidad de culpar transferir la responsabilidad a alguien más

 

¿Qué tiene que ver todo esto con este post? Microsoft Azure Service Fabric es una opción de Platform as a Service construida desde cero para soportar aplicaciones en la nube distribuidas, a gran escala y con alta disponibilidad. Inició como una propuesta para bases de datos en la nube (CloudDB) y actualmente es usada en productos estrella de Microsoft como Cortana, Skype for Business, Power BI, SQL Azure, etc.

Sus principales venajas estan en la facilidad que da a los desarrolladores en manejar elementos que van más allá de la funcionalidad como

  • Actualizaciones escalonadas
  • Log
  • Monitoreo y telemetría de los servicios
  • Manejo de fallas
  • Seguridad

De este modo el desarrollador puede enfocar sus esfuerzos y atencion en el código.

 

Microservicios

Aunque es normalmente asociado con microservicios, las ventajas de Service Fabric pueden aprovecharse en aplicaciones multi-capa, APIs, etc. Pero, ¿qué es son los microservicios?.  Aunque no hay una definición estándar, normalmente se caracterizan por separar la funcionalidad de una aplicación en partes más pequeñas. Estas partes son versionadas de manera independiente, pueden ser de cualquier tecnología, escalables y orientados resolver una parte concreta del problema que se está atacando. Es importante dejar claro que monolítico no es malo ni microservicios bueno. Todo depende del escenario y contexto.

Al ser distribuidos de manera independiente en nodos (contenedores, servidores, máquinas virtuales) diferentes agrupados dentro de un cluster en donde se lleva a cabo el proceso de réplica y partición, cada microservicio puede escalarse según sus necesidades propias.

 

Cluster

Service Fabric puede correr del mismo modo en Microsoft Azure, otras nubes como AWS e incluso en nubes privadas, ya sea en Linux o Windows. Incluso al momento del desarrollo, los componentes utilizados son iguales, lo que facilita el moverse de un entorno a otro cuando sea necesario. Esto es debido a que los componentes estan pensados para ser estandres y no es necesario realizar modificaciones de acuerdo al ambiente en donde se ejecute. El cluster provee un nivel de abstracción entre la aplicación y la infraestructura en que se ejecuten.; es un conjunto de nodos con los componentes instalados y configurados para comunicarse entre sí. Las principales características del cluster son

  • Puede soportar miles de nodos
  • Puede cambiarse dinámicamente
  • Es una unidad de aislamiento

 

Servicios

Service fabric provee un conjunto de servicios para facilitar la administración:

Cluster manager

Encargado de las operaciones referentes al cluster. Por default puede manejarse por medio de REST usando el puerto 19800 en HTTP y con TCP por el puerto 19000 usando Powershell.

Failover manager

Encargado de detectar cuando nuevos nodos se agregan al cluster, cuando se quitan, o cuando alguno falla y rebalancear para asegurar alta disponibilidad de los servicios.

Naming

Mapea los servicios con los endpoints, de manera que puedan comunicarse entre si.

Fault Analysis

Ayuda a introducir fallas a los servicios de manera que puedan probarse escenarios distintos de manera controlada.

Image Store

Contiene los bits de los servicios, el master del cual se hacen las copias que se replican en los nodos.

Upgrade

A cargo de actualizar los componentes de Service Fabric, exclusivamente en Azure.

 

Programming models

Cuando se trabaja con Service Fabric, se tienen 3 opciones para crear los servicios

Reliable services

Provee una manera simple de integrarse con Service Fabric cuando se crean los servicios, beneficiandose de las herramientas de plataforma.

Reliable actors

Construido sobre Reliable Services, es un framework que trabaja con unidades single-threaded llamadas Actors, basadas en el patrón de diseño con el mismo nombre.

Guest executable

Es sólo eso, un ejecutable que puede publicarse en un cluster sin integrarse completamente con la plataforma; Service Fabric sólo se asegura de que se encuentre corriendo. No importa el lenguaje, por lo que es una buena opción para llevar aplicaciones existentes.

Aplicaciones y servicios

Una aplicación es básicamente un conjunto de servicios, los cuales se definen en el archivo ApplicationManifest.xml; en términos de Service Fabric, a esto se le se denomina Application Type. De él creamos una instancia denominada Application Instance, que es la que contactamos en tiempo de ejecución, muy similar al concepto de clase e instancia en programación orientada a objetos. Del mismo modo pasa con Service Type y Service instance, además de que se compone de 3 partes: código, datos y configuración.

Cada uno de estos elementos tiene su propia versión, es decir puedo tener la versión 2.1.1 de mi Aplicación que se compone de 1 servicio con versión 1.0.0.

 


Con esto termina la introduccion; estos son los conceptos básicos de Service Fabric en los que nos basaremos para los siguientes tutoriales.

Evento Unotalks – .NET 26/Ene

El día de hoy tuve la oportunidad de platicar en el evento “Unotalks – .NET” acerca de Azure Service Fabric.

El código del demo está disponible en Github y el video de la charla lo pueden ver en YouTube.

La presentación la pueden encontrar en mi perfil de SpeakerDeck

Muchas gracias a Andrea y Jennifer de Unosquare por la invitación.