Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Y ¿qué es esto de Microsoft Orleans Framework?

Y ¿qué es esto de Microsoft Orleans Framework?

Charla dada en Tokiota para el grupo MadNight Coders en Noviembre de 2022

Jose María Flores Zazo

November 16, 2022
Tweet

More Decks by Jose María Flores Zazo

Other Decks in Technology

Transcript

  1. 18:30h
    16 Noviembre
    @ TOKIOTA
    Y ¿qué es esto de
    ?
    MadNight Coders
    Development & Cloud Consultant @ TOKIOTA

    View Slide

  2. 2
    2
    La nuestro
    MadNight Coders
    https://www.meetup.com/es-ES/madnight-coders/
    Gracias
    A tí
    Esto no sería posible sin vuestra presencia
    https://tokiota.com/

    View Slide

  3. 3
    3
    de la presentación
    Introducción
    Si nunca has visto
    que es, aquí tienes la
    introducción
    Teoría
    No es que sea densa
    pero debemos
    manejar cierto
    vocabulario
    Ejemplos
    Ejemplos sencillos y
    otros para que los
    estudies

    View Slide

  4. ¿Por qué necesito conocer ?
    Por qué los
    son muy

    View Slide

  5. 5
    5
    ¿Dónde se utiliza ?
    Probado en batalla por Microsoft:
    tanto internamente como en clientes propios y externos
    ▪ Halo
    ▪ Age of Empires
    ▪ BigPark
    ▪ Minecraft
    ▪ Gears of War
    Xbox Game Studios
    ▪ Azure IoT Digital Twins
    ▪ Azure Machine Learning
    ▪ Azure PlayFab
    ▪ Azure Active Directory
    ▪ Skype
    ▪ Dynamics 365 Fraud Detection
    ▪ Otras ¯\_(ツ)_/¯
    Microsoft
    ▪ Visa
    ▪ Honeywell Devices
    ▪ Mesh Systems
    ▪ Appliciata Limited
    ▪ Drawboard
    ▪ YouScan
    Otros

    View Slide

  6. 6
    6
    Microsoft y el modelo de
    (1/3)
    ▪ No estamos ante algo nuevo; el modelo de actores comienza su estudio en 1973. Microsoft
    Orleans lleva una década con nosotros y en .NET 7 continua mejorando, ahora es parte del Core.
    ▪ Microsoft Orleans es un proyecto Open Source que proporciona un modelo simple de
    programación para construir software que puede escalar desde una sola máquina a cientos de
    servidores, es decir, un modelo simple para implementar el modelo de actores.
    ▪ Podríamos asociar a Orleans como un runtime distribuido que permite desarrollar en .NET
    software capaz de procesar grandes volúmenes de datos y desplegar en la nube u on-premises.
    ▪ Orleans es un framework que provee de muchas características de sistemas distribuidos.
    ▪ Este framework logra una abstracción tal que nos evita mucha complejidad.
    ▪ Por último Orleans nos permite que un solo desarrollador pueda crear un entorno escalable sin
    tener a una persona experta en desarrollo de sistemas distribuidos.

    View Slide

  7. 7
    7
    Microsoft y el modelo de
    (2/3)
    ▪ Los framework de Modelo de Actor se basan en pasar mensajes entre actores, y los actores se
    crean según sean necesario. Estos modelos pueden aprovechar la concurrencia de los
    multiprocesadores y las abstracciones del software; lo que nos permite procesar millones y
    millones de mensajes en tiempo real (casi, el tiempo real no existe).
    ¿Qué es un Actor?.
    Es toda entidad externa al sistema que guarda una relación con este y que le demanda una
    funcionalidad.
    Y ¿qué es un Modelo de Actor?.
    …un modelo matemático de computación concurrente que trata al
    “actor” como primitiva universal de las computación concurrente…
    Carl Hewitt

    View Slide

  8. 8
    8
    Microsoft y el modelo de
    (3/3)
    ▪ Otros frameworks de Modelo de Actor (akka o proto.actor), requieren mucho más trabajo tales como
    la monitorización y el ciclo de vida. Con Orleans nos evitamos todo esto.
    Por regla general un sistema de actores necesita de un equipo con
    mucha experiencia y conocimientos. Microsoft Orleans Framework
    nos ayuda a reducir estas barreras.
    Documentación de Microsoft Orleans

    View Slide

  9. 9
    9
    Consolidado:
    DAPR/Azure
    Comienza una colaboración
    que esta siendo muy
    utilizada.
    Verano
    2021
    Otoño
    2021
    Invierno
    2022
    Primavera
    2022
    Noviembre
    2022
    Observación
    Investigación, estudio,
    análisis, … que aportan
    puntos de vista e
    información para mejoras.
    Documentación
    Orleans aparece por
    primera vez en al portal de
    documentación de
    Microsoft.
    Orleans v7 & .NET 7
    Se libera la versión 7 con
    muchos ejemplos para
    usarlo en Azure. Y entra a
    formar parte del Core de
    .NET 7.

    View Slide

  10. 10
    10
    es la que faltaba en ASP.NET
    (1/3)
    Compute Host
    (App Service, Container App, VM)
    Controller
    Hubs
    Viewers
    Background
    Services
    Compute Host
    (App Service, Container App, VM)
    Controller
    Hubs
    Viewers
    Background
    Services
    Compute Host
    (App Service, Container App, VM)
    Controller
    Hubs
    Viewers
    Background
    Services
    Compute Host
    (App Service, Container App, VM)
    Controller
    Hubs
    Viewers
    Background
    Services
    Grains
    Orleans añade procesado distribuido al Stack de ASP.NET Core

    View Slide

  11. 11
    11
    es la que faltaba en ASP.NET
    (2/3)
    Frontends Orleans Storage
    Ejemplo de una aplicación que usa un clúster de Orleans

    View Slide

  12. 12
    12
    es la que faltaba en ASP.NET
    (3/3)
    Frontends Orleans Storage
    El cluster de Orleans puede estar en cualquiera de los host (ya sea uno o varios)

    View Slide

  13. 13
    13
    ¿Qué es un ?
    (1/2)
    ▪ Entidades que comprenden la identidad, el
    comportamiento y el estado definidos por
    el usuario.
    ▪ Deben ser una Clase C#.
    ▪ Son monohilo y asíncrono.
    ▪ Comunicación mediante paso de
    mensajes.
    ▪ Los mensajes se ponen en cola.
    ▪ Un grano NO puede acceder o modificar
    un estado externo.
    La "primitiva de
    procesamiento distribuido" de
    Orleans en el contexto de una
    aplicación ASP.NET

    View Slide

  14. 14
    14
    ¿Qué es un ?
    (2/2)
    Se Activa
    Se
    Desactiva
    Persiste
    Activando Grano

    View Slide

  15. 15
    15
    ¿Qué es un ?
    (1/3)
    ▪ Hospeda los granos.
    ▪ Gestiona el ciclo de vida de los granos.
    ▪ DLL .NET / Aplicación de consola.
    ▪ Diseñados para trabajar juntos (en
    clúster).
    “Primitiva de procesamiento
    distribuido" que hospeda uno o
    varios granos

    View Slide

  16. 16
    16
    ¿Qué es un ?
    (2/3)
    Inicialización
    Silo
    Inicialización
    Runtime
    Servicios
    Runtime
    Servicios
    Almacenamiento
    Runtime
    Servicios Granos
    Runtime
    Servicios
    Aplicación
    Activación
    Activo
    Final
    Silo

    View Slide

  17. 17
    17
    ¿Qué es un ?
    (3/3)
    Directorio de
    Granos
    Silo
    Asociado
    Identidad
    Grano
    Inicialización
    Silo
    Inicialización
    Runtime
    Servicios
    Runtime
    Servicios
    Almacenamiento
    Runtime
    Servicios Granos
    Runtime
    Servicios
    Aplicación
    Activación
    Activo
    Final
    Silo
    Se Activa
    Se
    Desactiva
    Persiste
    Activando Grano

    View Slide

  18. 18
    18
    Cluster 3
    Relación entre: y
    Cluster 1
    Cluster 2
    Silo 1
    Silo 2
    Silo 3 Silo 4 Silo 1
    Silo 2
    Silo 3

    View Slide

  19. 19
    19
    Relación entre: y
    Cluster 2
    Silo 3 Silo 4
    Silo 3
    Silo 4
    Grano
    Grano
    Grano
    Grano
    Grano
    Grano
    Grano Grano

    View Slide

  20. 20
    20
    vs
    Resource Manager
    Actores
    Expertos en sistema distribuidos
    Requiere un trabajo a bajo nivel
    Life Time-Span
    Handling Recovery
    Saving State
    Actor Creation
    Handling Failures
    Silos
    Actores Virtuales
    Baja complejidad
    Virtual Actor Creation
    Interfaces
    VS

    View Slide

  21. 21
    21
    Los casos de uso anteriores, los he mostrado para que veáis la solidez de Orleans. Sin embargo no tenemos por que
    trabajar en una aplicación de mercado de valores para considerar la implementación de Orleans como una posible
    solución. Las herramientas se seleccionan en función de los objetivos comerciales, el crecimiento y la interactividad con el cliente
    que nos solicita el proyecto.
    Una regla general, muy común, es que si esperas que los elementos escalen más allá de un solo servidor, deben ser
    simultáneos y elásticos, Orleans podría ser una decisión acertada.
    Muchas aplicaciones se pueden dividir de microservicios a actores virtuales; sin embargo, no todas las aplicaciones deben
    dividirse en granos.
    Técnicamente, los elementos que se correlacionan con los proyectos de Orleans son los siguientes:
    − Cientos o incluso billones de objetos que están débilmente acoplados.
    − Entidades atómicas que pueden ejecutarse en un único subproceso.
    − Actividades interactivas, como respuestas y solicitudes.
    − El requerimiento o crecimiento de más de un servidor.
    − No se requiere manejo holístico ya que los granos mantienen sus tareas.
    ¿ elegir Orleans?
    (1/3)

    View Slide

  22. 22
    22
    Para proporcionaros una mayor comprensión, ejemplo como el siguientes cumplen todos esos requisitos:
    Internet de las cosas: miles de millones de señales de dispositivos que se comunican con el clúster, lo que desencadena
    varios eventos, como un cambio de temperatura. Mantener transacciones individuales a escala global requiere
    armonización de la aplicación, alta concurrencia y alta elasticidad.
    Por tanto, es igual de importante entender cuándo no elegir una tecnología o framework.
    Orleans es un gran marco para construir aplicaciones distribuidas. Pero si tienes un solo grano que acapara el 50% de
    todas las solicitudes, será un desafío escalar el sistema. Si tienes una solicitud que necesita comunicarse con otros 50
    granos para atender la respuesta, agregarás latencia y tendrá un impacto en el rendimiento. El principal problema en
    ambos escenarios es la granularidad. Por tanto el principal hándicap es conocer que el estado sea naturalmente
    particionable y que los granos se puedan mapear muy (muy) bien.
    En resumen, siempre ten presente la granularidad mientras trabajas con Orleans. Es posible que Orleans no sea la mejor
    opción cuando los datos se comparten entre granos, cuando hay una pequeña cantidad de entidades que tienen
    subprocesos múltiples, cuando se requiere coordinación con muchos otros granos para atender una solicitud, o en el
    caso de operaciones que se ejecutan para un largo tiempo.
    ¿ elegir Orleans?
    (2/3)

    View Slide

  23. 23
    23
    Sirve para No sirve para
    Cuando tienes sistemas con una gran cantidad de entidades. Cuando tienes sistemas estrechamente acoplados que no
    tienen perspectiva de sistema distribuido.
    Cuando tienes sistemas poco conectados y almacenamiento
    en cache inteligente.
    Cuando tienes pocos componentes y objectos.
    Cuando te ves obligado a ejecutar una aplicación en más de 1
    servidor (durante horas o picos, como un Black Friday)
    Cuando tienes la intención de realizar tareas de informática
    defensiva.
    Cuando tu aplicación necesita tiempo de inactividad cero. Cuando tienes actores que necesitan acceso directo a
    memoria.
    Cuando tu cliente necesita respuesta rápidas. Cuando es necesaria una cooperación global para el
    funcionamiento de la aplicación.
    Cuando tienes aplicaciones que tienen varios actores con una
    vida útil larga (productos, inventarios, etc.) o cortas
    (transacciones de pago, pedidos, compras, etc.)
    Cuando administras múltiples versiones de granos es muy
    complejo y se vuelve inmanejable. Y te obliga a mantener
    granos con estado A o estado B.
    ¿ elegir Orleans?
    (3/3)

    View Slide

  24. 24
    24
    ¿Orleans un framework para ?
    Discusión abierta y sobre la cual hay distintos puntos de vista.
    Orleans es un framework que nos puede ayudar a la implementación de
    microservicios, pero que no conforma un framework de implementación de
    microservicios en si mismo.
    Orleans nos ayuda en el desarrollo del sistema encargándose de la facilidad del
    desarrollo, escalabilidad, resiliencia y la baja latencia.
    Por tanto podríamos decir que cada grano es un nano-servicio y combinando
    varios granos entre si, se formaría un microservicio.

    View Slide

  25. 25
    25
    Storefront Service
    Order Service
    Customization Service
    Manufacturing Service
    Reservation Service
    Reservation
    State
    Reservation
    Item
    State
    Inquiry
    Reserve Manofacturate
    de alto nivel
    (1/3)
    Visión de una aplicación sin actores. Puedes aplicar escalado de K8s.

    View Slide

  26. 26
    26
    Storefront Service
    Order Service
    Customization Service
    Manufacturing Service
    Reservation Service
    Reservation
    State
    Inquiry
    Reserve Manofacturate
    Reservation Item
    Actor
    /Item01
    Reservation Item
    Actor
    /Item02
    Reservation
    Item
    State
    de alto nivel
    (2/3)
    Visión de una aplicación con actores: silo y granos.

    View Slide

  27. 27
    27
    de alto nivel
    (3/3)
    Aplicación adecuada
    No se necesita una coordinación global o en
    menor escala entre unas pocas entidades a la
    vez. La escalabilidad y el rendimiento de la
    ejecución se logran paralelizando y
    distribuyendo una gran cantidad de tareas, en
    su mayoría independientes, sin un punto único
    de sincronización.
    Aplicación Inadecuada
    Se necesita coordinación global y/o consistencia. Tal
    coordinación global limitaría severamente el
    rendimiento de una aplicación basada en Orleans.
    Orleans fue construido para escalar fácilmente a una
    escala global sin necesidad de una coordinación
    manual profunda.
    ¿Cuál aproximación sería la adecuada para este ejemplo?

    View Slide

  28. 28
    28
    Algunas características de para Orleans
    ▪ Existe un salto de versión, lo que en primavera del 2022 sería la versión 4 salta a ser la versión 7 debido a la
    integración con el .NET 7. Una muy buena noticia, ya que pasa a ser un proyecto del core de ASP.NET, la pieza perdida
    del Lego. Cuidado que la migración de v3 a v7, no es automática y rompe.
    ▪ Es aproximadamente un 40% más rápido que la versión anterior según el test de este artículo.
    ▪ Mejoras en la confiabilidad y la flexibilidad.
    ▪ Granos POCO, granos que no heredan de ninguna clase base especial, para posibilitar un mejor testing.
    ▪ Nuevo serializador más rápido y compatible con el sistema de tipos enriquecidos de .NET, incluidos genéricos,
    polimorfismos, ...
    ▪ Nuevo sistema RPC más rápido, más flexible.
    ▪ Compatibilidad con Open Telemetry / Distributed Tracing.

    View Slide

  29. 29
    29
    Mucha en el tintero…
    Manos a la obra con: Microsoft Orleans Framework
    Documentación oficial de Microsoft

    View Slide

  30. 30
    30
    https://github.com/jmfloreszazo/MadNightCodersNov2022-MSOrleansV3

    View Slide

  31. 31
    31
    : Manos a la obra
    (1/2)
    La base: algo más que un Hello World
    Comunicación entre granos
    Timers. Nuevo para vosotros…

    View Slide

  32. 32
    32
    : Manos a la obra
    (2/2)
    Dashboard
    Una Web API en local
    Y Dapr, un ejemplo para que realices tu

    View Slide

  33. 33
    33
    : Desplegando en Azure
    Web API
    Una serie de recomendaciones
    Y nuestra API se va a Azure + JMeter

    View Slide

  34. 34
    34
    : Wanderland
    https://github.com/bradygaster/Wanderland
    Crear la infra igual que en la demo anterior
    Decargar fichero de deploy del App Service
    Créditos: https://github.com/bradygaster

    View Slide

  35. 35
    35
    : Wanderland
    https://github.com/bradygaster/Wanderland
    Crear la infra igual que en la demo anterior
    Decargar fichero de deploy del App Service
    Créditos: https://github.com/bradygaster

    View Slide

  36. A partir de ahora
    los
    ya serán tan

    View Slide