0

Microsoft Orleans #01: Introducción

Microsoft Orleans es un framework diseñado para construir sistemas distribuidos escalables y de alto rendimiento. En esta primera clase, conocerás sus conceptos fundamentales, su origen y crearás tu primer proyecto con Orleans.

Objetivos de la clase

  • Comprender qué es Microsoft Orleans, su historia y su relación con el Actor Model.
  • Aprender los conceptos clave de Orleans: Granos, Silos y Clientes.
  • Instalar las herramientas necesarias para desarrollar con Orleans.
  • Crear y ejecutar un proyecto básico utilizando Orleans.

¿Qué es Microsoft Orleans?

Orleans y el Actor Model

Microsoft Orleans se basa en el patrón Actor Model, un paradigma de programación concurrente donde los actores son unidades independientes que manejan su propio estado y se comunican mediante mensajes asíncronos.

Orleans extiende este modelo con una arquitectura virtualizada, permitiendo que los Granos (su versión de los actores) sean creados y administrados automáticamente por el framework, sin que el desarrollador tenga que gestionar la activación, concurrencia o persistencia.

Historia de Orleans

  • Microsoft Orleans fue desarrollado por Microsoft Research alrededor de 2011, con el objetivo de simplificar la construcción de sistemas distribuidos escalables.
  • Su adopción se aceleró con su uso en el videojuego Halo para gestionar millones de jugadores simultáneamente.
  • En 2015, Microsoft lo hizo open source en GitHub, permitiendo que la comunidad contribuyera a su desarrollo.
  • Hoy, Orleans es utilizado en aplicaciones de alta concurrencia, IoT, mensajería en tiempo real y microservicios.

¿Por qué usar Orleans en lugar de otras tecnologías?

  • Facilidad de uso: Simplifica el desarrollo en comparación con otros frameworks basados en actores.
  • Escalabilidad automática: Maneja la distribución de carga y concurrencia sin configuración adicional.
  • Persistencia integrada: Compatible con SQL Server, MongoDB, Azure Table Storage, DynamoDB y otros.
  • Ideal para sistemas con alta concurrencia: Se usa en juegos online, microservicios, IoT y análisis de datos en tiempo real.

Ejemplos de uso de Orleans en la industria

  • Videojuegos multijugador: Halo de Microsoft usa Orleans para gestionar jugadores y partidas en la nube.
  • Sistemas de mensajería en tiempo real: Se usa en plataformas de comunicación para manejar grandes volúmenes de conexiones simultáneas.
  • Análisis de datos en tiempo real: Empresas lo utilizan para procesar grandes volúmenes de datos con baja latencia.

Conceptos clave en Orleans

Granos (Grains)

Los Granos son la unidad básica de Orleans. Son objetos distribuidos que manejan estado y lógica de negocio. Cada Grano representa una entidad dentro del sistema, como un usuario, un producto o un sensor.

public interface IUsuarioGrain : IGrainWithStringKey
{
    Task<string> ObtenerNombre();
}
public class UsuarioGrain : Grain, IUsuarioGrain
{
    public Task<string> ObtenerNombre()
    {
        return Task.FromResult("Juan Pérez");
    }
}

Silo

El Silo es el servidor donde Orleans ejecuta y administra los Granos. Se encarga de la activación, desactivación y almacenamiento de los Granos.

Cliente

El Cliente es la aplicación que interactúa con los Granos. Puede ser una API REST, una aplicación de consola, un servicio web o cualquier otra interfaz de usuario.

var grain = client.GetGrain<IUsuarioGrain>("usuario1");
string nombre = await grain.ObtenerNombre();
Console.WriteLine($"Nombre del usuario: {nombre}");

Instalación del entorno

Para trabajar con Orleans, necesitas instalar las siguientes herramientas:

  1. .NET SDK (descargar desde dotnet.microsoft.com)
  2. Visual Studio o Visual Studio Code
  3. SQL Server o MongoDB (si deseas persistencia en BD más adelante)

Crear un nuevo proyecto en Visual Studio

  1. Abre Visual Studio.
  2. Crea un nuevo proyecto de Aplicación de Consola (.NET Core).
  3. Asigna el nombre OrleansDemo y haz clic en Crear.

Instalar Orleans en el proyecto

Para agregar Orleans a tu proyecto, ejecuta el siguiente comando en la terminal o en la consola de NuGet:

powershellCopiarEditardotnet add package Microsoft.Orleans.Server
dotnet add package Microsoft.Orleans.Client

Esto instalará los paquetes necesarios para ejecutar un Silo y un Cliente Orleans.

Crear un Grano en Orleans

1. Definir la interfaz del Grano

Crea una carpeta llamada Granos y dentro de ella, un archivo IHelloGrain.cs con el siguiente código:

using System.Threading.Tasks;
using Orleans;

public interface IHelloGrain : IGrainWithStringKey
{
    Task<string> Saludar(string nombre);
}

2. Implementar el Grano

Crea otro archivo en la carpeta Granos, llamado HelloGrain.cs:

using System.Threading.Tasks;
using Orleans;

public class HelloGrain : Grain, IHelloGrain
{
    public Task<string> Saludar(string nombre)
    {
        return Task.FromResult($"Hola, {nombre}, bienvenido a Orleans!");
    }
}

Ejecutar el proyecto

1. Iniciar el Silo

  • Ejecuta el proyecto OrleansDemo.

2. Ejecutar el Cliente

  • Ejecuta el proyecto OrleansClient.
  • La salida en consola debería mostrar:
cssCopiarEditarCliente conectado a Orleans.
Hola, Carlos, bienvenido a Orleans!

Cuestionario de Autoevaluación

  1. ¿Qué es Microsoft Orleans y cuál es su relación con el Actor Model?
  2. ¿Quién desarrolló Orleans y por qué se hizo open source en 2015?
  3. ¿Qué diferencia hay entre un Silo y un Cliente en Orleans?
  4. ¿Cuál es la función principal de un Grano en Orleans?
  5. ¿Qué ocurre si intentamos acceder a un Grano que no ha sido activado?

Resumen de la Clase

  • Orleans es un framework para sistemas distribuidos, basado en el Actor Model.
  • Fue creado por Microsoft Research para simplificar el desarrollo de sistemas escalables.
  • Su adopción creció tras su uso en Halo, y se hizo open source en 2015.
  • Un Grano es la unidad básica de Orleans, gestionado por un Silo.
  • Los Clientes interactúan con Orleans para solicitar información a los Granos.

Próxima Clase: Almacenamiento de Estado

En la próxima sesión aprenderemos cómo persistir datos en Orleans, permitiendo que los Granos recuerden información después de reiniciarse.

Fernando Sonego

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *