Поделиться через


Корпорация Майкрософт Orleans

Orleans — это кроссплатформенная платформа, предназначенная для упрощения создания распределенных приложений. Независимо от того, выполняется ли масштабирование с одного сервера на тысячи облачных приложений, Orleans предоставляются средства для управления сложностями распределенных систем. Она расширяет знакомые концепции C# в многосерверных средах, позволяя разработчикам сосредоточиться на логике приложения.

Вот что Orleans предлагает:

  • Он предназначен для гибкого масштабирования. Добавьте или удалите серверы и Orleans корректирует их соответствующим образом, чтобы обеспечить отказоустойчивость и масштабируемость.
  • Это упрощает распределенную разработку приложений с общим набором шаблонов и API, что делает его доступным даже для новых для распределенных систем.
  • Это облачная среда и работает на платформах, где поддерживается .NET— Linux, Windows, macOS и многое другое.
  • Он поддерживает современные варианты развертывания, такие как Kubernetes, Служба приложений Azure и приложения контейнеров Azure.

Orleans часто называется "Distributed .NET" из-за акцента на создание устойчивых, масштабируемых облачных служб. Давайте рассмотрим модель актора дальше.

Акторная модель

Orleans основан на модели субъекта. Берущая начало в начале 1970-х годов, модель акторов сейчас является главным компонентом Orleans. В модели субъекта каждый субъект представляет собой упрощенный, параллельный, неизменяемый объект, инкапсулирующий часть состояния и соответствующее поведение. Субъекты взаимодействуют исключительно с помощью асинхронных сообщений. Orleans особенно изобрел абстракцию виртуального субъекта , где актеры существуют постоянно.

Заметка

Субъекты — это чисто логические сущности, которые всегда существуют практически. Субъект не может быть явно создан или уничтожен, и его виртуальное существование не влияет на сбой сервера, выполняющего его. Так как субъекты всегда существуют, они всегда доступны для решения.

Этот новый подход помогает создавать новое поколение распределенных приложений для эпохи облака. Модель Orleans программирования укрощает сложность, присущую высокопараллельным распределенным приложениям , не ограничивая возможности и не накладывая ограничений.

Дополнительные сведения см. в статье Orleans: виртуальные актёры с помощью Microsoft Research. Виртуальный актёр представлен как зерно Orleans.

Что такое зерна?

Зерно является одним из нескольких Orleans примитивов. С точки зрения модели актора, зёрна — это виртуальные акторы. Основной фундаментальный блок в любом приложении Orleans — это . Зерна — это сущности, состоящие из идентичности, поведения и состояния, определяемых пользователем. Рассмотрим следующее визуальное представление зерна:

зерно состоит из стабильной идентичности, поведения и состояния.

Идентификаторы зерна — это определяемые пользователем ключи, которые всегда доступны для вызова. Другие зерна или любое количество внешних клиентов могут вызывать зерна. Каждое зерно — это экземпляр класса, реализующего один или несколько следующих интерфейсов:

Зерна могут иметь переменные или постоянные данные состояния, хранящиеся в любой системе хранения. Таким образом, акторы неявно разделяют состояния приложения, обеспечивая автоматическую масштабируемость и упрощая восстановление после сбоев. Orleans сохраняет состояние зерна в памяти, пока зерно активно, что приводит к снижению задержки и меньшей нагрузке на хранилища данных.

Жизненный цикл управляемого Orleans зерна.

Среда Orleans выполнения автоматически создает экземпляры зерна по требованию. Зерна, которые не используются в течение некоторого времени, автоматически удаляются из памяти для освобождения ресурсов. Это удаление возможно из-за их стабильной идентификации, позволяя вызов зерен независимо от того, загружаются ли они в память или нет. Это также обеспечивает прозрачное восстановление после сбоя, так как вызывающий объект не должен знать, на каком сервере в любой момент времени создается экземпляр компонента grain. Зерна имеют управляемый жизненный цикл, при Orleans этом среда выполнения отвечает за активацию/деактивацию и поиск/размещение зерен по мере необходимости. Это позволяет писать код, как если бы все данные всегда хранятся в памяти.

Что такое силосы?

Сило является еще одним примером Orleans примитива. Сило размещает один или несколько зерен. Среда Orleans выполнения реализует модель программирования для приложений.

Как правило, группа силосов работает как кластер для масштабируемости и отказоустойчивости. При запуске в качестве кластера силосы координируют распределение работы, а также обнаруживают и восстанавливаются после сбоев. Среда выполнения позволяет зернам, размещенным в кластере, обмениваться данными, как если бы они находятся в одном процессе. Чтобы визуализировать связь между кластерами, силосами и зернами, рассмотрим следующую схему:

Кластер имеет один или несколько силосов, а сило имеет один или несколько зерен.

На предыдущей схеме показана связь между кластерами, силосами и зернами. Может быть любое количество кластеров, каждый кластер имеет один или несколько силосов, и каждый из них имеет один или несколько зерен.

Помимо основной модели программирования, силосы предоставляют службы среды выполнения, такие как таймеры, напоминания (постоянные таймеры), сохраняемость, транзакции, потоки и многое другое. Дополнительные сведения см. в статье «Что можно сделать с помощью Orleans»..

Веб-приложения и другие внешние клиенты вызывают grains в кластере с помощью клиентской библиотеки, которая автоматически управляет сетевым взаимодействием. Клиенты также могут размещаться совместно в одном процессе с силосами для простоты.

Что можно сделать с Orleans?

Orleans — это платформа для создания облачных приложений и следует учитывать при создании приложений .NET, которые могут в конечном итоге масштабироваться. Есть, казалось бы, бесконечные способы использования Orleans, но вот некоторые из самых распространенных: игры, банковские приложения, чаты, GPS-трекинг, торговля акциями, корзины покупок, приложения для голосования и многое другое. Майкрософт использует Orleans в Azure, Xbox, Skype, Halo, PlayFab, Gears of War и многих других внутренних службах. Orleans имеет множество функций, упрощающих использование различных приложений.

Упорство

Orleans предоставляет простую модель сохраняемости, обеспечивающую доступность состояния перед обработкой запроса и поддержанием согласованности. У зерен может быть несколько именованных объектов постоянных данных. Например, можно назвать "профиль" для профиля пользователя, а другой "инвентарь" для их инвентаря. Это состояние можно хранить в любой системе хранения.

Во время выполнения grain Orleans хранит состояние в памяти, чтобы обслуживать запросы на чтение без доступа к хранилищу. При обновлении состояния зерна вызов IStorage.WriteStateAsync гарантирует наличие обновлений резервного хранилища для обеспечения устойчивости и согласованности.

Дополнительные сведения см. в сохраняемости зерна.

Таймеры и напоминания

Напоминания — это устойчивый механизм планирования для зерен. Используйте их для обеспечения завершения действия в будущем, даже если зерно в настоящее время не активируется. Таймеры являются ненадежным аналогом напоминаний и могут использоваться для событий высокой частоты, не требующих надежности.

Более подробную информацию см. в разделе Таймеры и напоминания.

Гибкое размещение зерна

При активации зерна в Orleans среда выполнения решает, на каком сервере (silo) его активировать. Этот процесс называется размещением зерна.

Процесс размещения в Orleans полностью настраивается. Выберите из встроенных политик размещения, таких как случайное, предпочтительное локальное и основанное на нагрузке, или настройте пользовательскую логику. Это позволяет полностью гибко решать, где создаются зерна. Например, разместите зерна на сервере близко к ресурсам, с которыми они должны работать или с другими зернами, с которыми они взаимодействуют.

Дополнительные сведения см. в разделе Размещение зерна.

Версионирование на уровне зерен и разнородные кластеры

Обновление производственных систем с учетом изменений безопасно может быть сложной задачей, особенно в системах с сохранением состояния. Чтобы учесть это, интерфейсы зерна могут иметь версии в Orleans.

Кластер поддерживает соответствие между реализациями зерен, доступными на силосах, и их версиями. Среда выполнения использует эти сведения о версии с стратегиями размещения для принятия решений о размещении при маршрутизации вызовов к зернам. Помимо безопасного обновления версии зерна, это также позволяет разнородным кластерам, в которых разные силосы имеют различные наборы доступных реализаций зерна.

Дополнительные сведения см. в Версионирование Grain.

Работники без сохранения состояния

Безгосударственные рабочие — это специально помеченные зерна, не имеющие связанного состояния, которые могут активироваться одновременно на нескольких силосах. Это позволяет увеличить параллелизм для функций без отслеживания состояния.

Для получения дополнительной информации см. безсостояточные рабочие зерна.

Фильтры вызовов модуля Grain

Фильтр вызова зерна — это логика, распространенная для многих зерен. Orleans поддерживает фильтры для входящих и исходящих вызовов. Распространенные варианты использования включают авторизацию, ведение журнала и телеметрию, а также обработку ошибок.

Контекст запроса

Передайте метаданные и другие сведения с рядом запросов с помощью контекста запроса. Используйте контекст запроса для хранения сведений о распределенной трассировке или любых других определённых значений.

Распределенные транзакции ACID

Помимо простой модели сохраняемости, описанной выше, зерна могут иметь транзакционные состояния. Несколько зерен могут вместе участвовать в транзакциях ACID, независимо от того, где их состояние в конечном итоге хранится. Orleans Транзакции распределены и децентрализованы (то есть нет центрального диспетчера транзакций или координатора) и имеют сериализуемую изоляцию.

Дополнительные сведения о транзакциях см. в транзакции.

Потоки

Потоки помогают обрабатывать ряд элементов данных практически в реальном времени. Orleans Потоки управляются; потоки не требуют создания или регистрации перед тем, как зерно или клиент публикует или подписывается. Это позволяет увеличить разделение производителей потоков и потребителей друг от друга и инфраструктуры.

Потоковая обработка надежна: зерна могут хранить контрольные точки (курсоры) и сбрасывать их на сохранённую контрольную точку при активации или в любое последующее время. Потоки поддерживают пакетную доставку сообщений потребителям для повышения эффективности и производительности восстановления.

Потоки поддерживаются службами очередей, такими как Центры событий Azure, Amazon Kinesis и другие.

Произвольное количество потоков может быть многократно разделено на меньшее количество очередей, а ответственность за обработку этих очередей распределяется равномерно по всему кластеру.

Общие сведения о видео Orleans

Чтобы ознакомиться с видео-вступлением к Orleans, посмотрите следующее видео:

Дальнейшие действия