Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Orleans es un marco multiplataforma diseñado para simplificar la creación de aplicaciones distribuidas. Ya sea que se trate del escalado desde un solo servidor hasta miles de aplicaciones basadas en la nube, Orleans ofrece herramientas para ayudar a administrar las complejidades de los sistemas distribuidos. Amplía los conceptos conocidos de C# a entornos de varios servidores, lo que permite a los desarrolladores centrarse en la lógica de la aplicación.
Esto es lo que Orleans ofrece:
- Está diseñado para escalar elásticamente. Agregue o quite servidores y Orleans ajuste en consecuencia para mantener la tolerancia a errores y la escalabilidad.
- Simplifica el desarrollo de aplicaciones distribuidas con un conjunto común de patrones y API, lo que hace que sea accesible incluso para los nuevos sistemas distribuidos.
- Es nativo de la nube y se ejecuta en plataformas donde se admite .NET: Linux, Windows, macOS, etc.
- Admite opciones de implementación modernas, como Kubernetes, Azure App Service y Azure Container Apps.
Orleans a menudo se conoce como "Distributed .NET" debido a su enfoque en la creación de servicios nativos en la nube resistentes y escalables. Vamos a explorar el modelo de actor a continuación.
Modelo de actor
Orleans se basa en el modelo de actor. Originándose a principios de la década de 1970, el modelo de actor es ahora un componente principal de Orleans. En el modelo de actor, cada actor es un objeto ligero, simultáneo e inmutable que encapsula un fragmento de estado y el comportamiento correspondiente. Los actores se comunican exclusivamente mediante mensajes asincrónicos. Orleans notablemente inventó la abstracción de Actor virtual, donde los actores existen de manera perpetua.
Nota
Los actores son entidades puramente lógicas que siempre existen en un entorno virtual. Un actor no se puede crear ni destruir explícitamente, y su existencia virtual no se ve afectada por el error de un servidor que lo ejecuta. Puesto que los actores siempre existen, siempre son accesibles.
Este enfoque nuevo ayuda a crear una nueva generación de aplicaciones distribuidas para la era de la nube. El Orleans modelo de programación tamiza la complejidad inherente a aplicaciones distribuidas muy paralelas sin restringir las funcionalidades ni imponer restricciones.
Para obtener más información, consulte Orleans: Virtual Actors a través de Microsoft Research. Un actor virtual se representa como un grano de Orleans.
¿Qué son los granos?
El grano es uno de varios primitivos de Orleans. En términos del modelo de actor, un grano es un actor virtual. El bloque de creación fundamental en cualquier aplicación de Orleans es el grano. Los granos son entidades que incluyen identidad, comportamiento y estado definidos por el usuario. Tenga en cuenta la siguiente representación visual de un grano:
Las identidades de grano son claves definidas por el usuario, lo que hace que los granos estén siempre disponibles para la invocación. Otros granos o cualquier número de clientes externos pueden invocar granos. Cada grano es una instancia de una clase que implementa una o más de las siguientes interfaces.
-
IGrainWithGuidKey: interfaz de marcador para intervalos de agregación con claves
Guid
. -
IGrainWithIntegerKey: interfaz de marcador para intervalos de agregación con claves
Int64
. -
IGrainWithStringKey: interfaz de marcador para intervalos de agregación con claves
string
. - IGrainWithGuidCompoundKey: interfaz de marcador para intervalos de agregación con claves compuestas.
- IGrainWithIntegerCompoundKey: interfaz de marcador para intervalos de agregación con claves compuestas.
Los granos pueden tener datos de estado volátiles o persistentes almacenados en cualquier sistema de almacenamiento. Por lo tanto, los granos particionan implícitamente los estados de la aplicación, permitiendo la escalabilidad automática y simplificando la recuperación de fallos. Orleans mantiene el estado de grano en la memoria mientras el grano está activo, lo que conduce a una menor latencia y menos carga en los almacenes de datos.
El tiempo de ejecución Orleans crea automáticamente instancias de grains bajo demanda. Los granos que no se usan durante un tiempo se quitan automáticamente de la memoria para liberar recursos. Esta eliminación es posible debido a su identidad estable, lo que permite la invocación de grains, ya estén cargados en la memoria o no. Esto también permite la recuperación transparente de errores porque el llamador no necesita saber en qué servidor se instancie un grano en ningún momento. Los granos tienen un ciclo de vida administrado, con el Orleans entorno de ejecución responsable de activar o desactivar y colocar o localizar granos según sea necesario. Esto permite escribir código como si todos los granos siempre estuvieran en memoria.
¿Qué son los silos?
Un silo es otro ejemplo de un primitivo Orleans. Un silo hospeda uno o varios granos. El Orleans tiempo de ejecución implementa el modelo de programación para las aplicaciones.
Normalmente, un grupo de silos se ejecuta como un clúster para la escalabilidad y la tolerancia a errores. Cuando se ejecuta como un clúster, los silos se coordinan para distribuir el trabajo y detectar y recuperarse de fallos. El tiempo de ejecución permite que los granos hospedados en el clúster se comuniquen como si estuvieran dentro de un único proceso. Para ayudar a visualizar la relación entre clústeres, silos y granos, tenga en cuenta el siguiente diagrama:
En el diagrama anterior se muestra la relación entre clústeres, silos y granos. Puede haber cualquier número de clústeres, cada clúster tiene uno o más silos y cada silo tiene uno o más granos.
Además del modelo de programación principal, los silos proporcionan a los granos servicios en tiempo de ejecución, como temporizadores, recordatorios (temporizadores persistentes), persistencia, transacciones, flujos, etc. Para obtener más información, consulte ¿Qué se puede hacer con Orleans?.
Las aplicaciones web y otros clientes externos llaman a granos en el clúster mediante la biblioteca cliente, que administra automáticamente la comunicación de red. Los clientes también se pueden hospedar conjuntamente en el mismo proceso con silos para simplificar.
¿Qué se puede hacer con Orleans?
Orleans es un marco para compilar aplicaciones nativas de la nube y debe tenerse en cuenta al compilar aplicaciones .NET que podrían necesitar escalar. Hay formas aparentemente infinitas de usar Orleans, pero las siguientes son algunas de las más comunes: Juegos, banca, aplicaciones de chat, seguimiento gps, trading de existencias, carros de compras, aplicaciones de votación, etc. Microsoft usa Orleans en Azure, Xbox, Skype, Halo, PlayFab, Gears of War y muchos otros servicios internos. Orleans tiene muchas características que facilitan el uso de varias aplicaciones.
Persistencia
Orleans proporciona un modelo de persistencia simple que garantiza la disponibilidad del estado antes de procesar una solicitud y mantener la coherencia. Los granos pueden tener varios objetos de datos persistentes con nombre. Por ejemplo, se podría llamar "perfil" para el perfil de un usuario y otro "inventario" para su inventario. Este estado se puede almacenar en cualquier sistema de almacenamiento.
Mientras se ejecuta un grano, Orleans mantiene el estado en la memoria para atender solicitudes de lectura sin acceder al almacenamiento. Cuando el grano actualiza su estado, la llamada IStorage.WriteStateAsync garantiza las actualizaciones del almacén de respaldo para la durabilidad y la coherencia.
Para obtener más información, consulte persistencia de granos.
Temporizadores y recordatorios
Los recordatorios son un mecanismo de programación duradero para granos. Úselos para asegurarse de que una acción se completa en un momento futuro, incluso si el grano no está activado actualmente. Los temporizadores son el homólogo no duradero de los recordatorios y se pueden usar para eventos de alta frecuencia que no requieren confiabilidad.
Para obtener más información, consulte Temporizadores y recordatorios.
Colocación de granos flexible
Cuando un grano se activa en Orleans, el entorno de ejecución decide en qué servidor (silo) activarlo. Este proceso se denomina ubicación de grano.
El proceso de colocación en Orleans es totalmente configurable. Elija entre políticas de ubicación predefinidas, como aleatoria, preferencia local y en función de la carga, o configure lógica personalizada. Esto permite una flexibilidad total para decidir dónde se crean los granos. Por ejemplo, coloque granos en un servidor cerca de los recursos con los que necesitan operar u otros granos con los que se comunican.
Para más información, consulte la Ubicación de granos.
Control de versiones pormenorización y clústeres heterogéneos
Actualizar de manera segura los sistemas de producción teniendo en cuenta los cambios puede ser desafiante, especialmente en los sistemas con estado. Para tener en cuenta esto, las interfaces de grano se pueden versionar en Orleans.
El clúster mantiene un registro de qué implementaciones de granos están disponibles en los distintos silos y sus versiones. El tiempo de ejecución utiliza esta información de versión junto con estrategias de colocación para tomar decisiones al enrutar llamadas a grains. Además de actualizar de forma segura un grano con versiones, esto también permite clústeres heterogéneos en los que diferentes silos tienen diferentes conjuntos de implementaciones de grano disponibles.
Para más información, consulte Control de versiones de granos.
Trabajadores sin estado
Los trabajadores sin estado están especialmente marcados como granos sin estado asociado que pueden activarse en varios silos simultáneamente. Esto permite aumentar el paralelismo para las funciones sin estado.
Para obtener más información, consulte Granos de trabajadores sin estado.
Filtros de llamadas de grano
Un filtro de llamada de grano es una lógica común a muchos granos. Orleans admite filtros para llamadas entrantes y salientes. Entre los usos comunes se incluyen la autorización, el registro y la telemetría, y el control de errores.
Contexto de solicitud
Pase metadatos y otra información con una serie de solicitudes mediante el contexto de solicitud. Use el contexto de solicitud para contener información de seguimiento distribuido o cualquier otro valor definido.
Transacciones ACID distribuidas
Además del modelo de persistencia simple descrito anteriormente, los granos pueden tener estado transaccional. Varios granos pueden participar en transacciones ACID juntas, independientemente de dónde se almacene su estado en última instancia. Las transacciones de Orleans se distribuyen y descentralizadas (lo que significa que no hay ningún administrador de transacciones central ni coordinador) y tienen aislamiento serializable.
Para obtener más información sobre las transacciones, vea Transactions.
Arroyos
Los flujos ayudan a procesar una serie de elementos de datos casi en tiempo real. Orleans las secuencias se administran; las secuencias no necesitan ser creadas ni registradas antes de que un cliente o grano publique o se suscriba. Esto permite un mayor desacoplamiento de los productores y consumidores de transmisiones entre sí y con respecto a la infraestructura.
El procesamiento de flujos es confiable: los granos pueden almacenar puntos de control (cursores) y restablecerlos en un punto de control almacenado durante la activación o en cualquier momento posterior. Los flujos admiten la entrega por lotes de mensajes a los consumidores para mejorar la eficiencia y el rendimiento de la recuperación.
Las secuencias cuentan con el respaldo de los servicios de cola como Azure Event Hubs y Amazon Kinesis, entre otros.
Un número arbitrario de secuencias se puede multiplexar en un número menor de colas y la responsabilidad de procesar estas colas se equilibra uniformemente en todo el clúster.
Introducción al vídeo de Orleans
Para ver una introducción en vídeo a Orleans, consulte el vídeo siguiente: