Microsoft Orleans
Orleans:
- Кроссплатформенная платформа для создания надежных масштабируемых распределенных приложений. Распределенные приложения — это приложения, которые охватывают более одного процесса, зачастую выходя за пределы аппаратных границ и используют одноранговое взаимодействие.
- Масштабируется с одного локального сервера до тысяч распределенных высокодоступных приложений в облаке.
- Расширяет знакомые понятия и идиомы C# в многосерверных средах.
- Предназначен для эластичного масштабирования. Когда хост присоединяется к кластеру, он может принимать новые активации. Когда узел покидает кластер, предыдущие активации на этом узле будут повторно активированы на оставшихся узлах по мере необходимости. Хост может покинуть кластер из-за уменьшения мощности или сбоя машины. Кластер Orleans можно масштабировать до одного узла. Те же свойства, которые обеспечивают эластичную масштабируемость, обеспечивают отказоустойчивость. Кластер автоматически обнаруживает и быстро восстанавливается после сбоев.
- Упрощает сложность разработки распределенных приложений, предоставляя общий набор шаблонов и API.
- Позволяет разработчикам, знакомым с разработкой приложений с одним сервером, переходить к созданию устойчивых, масштабируемых облачных служб и распределенных приложений.
- Иногда называется распределенной платформой .NET.
- Фреймворк выбора при создании облачно-нативных приложений.
- Выполняется в любом месте, где поддерживается .NET. Это включает размещение в Linux, Windows и macOS.
- Приложения можно развернуть в Kubernetes, виртуальных машинах и службах PaaS, таких как служба приложений Azure и приложения контейнеров Azure.
Модель акторов
Orleans основан на актёрной модели. Модель акторов возникла в начале 1970-х годов и в настоящее время является основным компонентом Orleans. Модель субъекта — это модель программирования, в которой каждый субъект является упрощенным, параллельным, неизменяемым объектом, который инкапсулирует часть состояния и соответствующее поведение. Субъекты взаимодействуют исключительно друг с другом с помощью асинхронных сообщений. Orleans, в частности, изобрел абстракцию Виртуального Актера, в рамках которой актеры существуют постоянно.
Заметка
Субъекты — это чисто логические сущности, которые всегда существуют практически. Субъект не может быть явно создан или уничтожен, и его виртуальное существование не влияет на сбой сервера, выполняющего его. Так как субъекты всегда существуют, они всегда доступны для решения.
Это новый подход к созданию нового поколения распределенных приложений для эпохи облака. Модель программирования Orleans усложняет сложность, присущую распределенных приложений с высокой степенью параллелизма, без ограничения возможностей или введения ограничений для разработчика.
Дополнительные сведения см. в статье Orleans: виртуальные актёры с помощью Microsoft Research. Виртуальный актёр представлен как зерно Orleans.
Что такое зерна?
Зерно является одним из нескольких Orleans примитивов. С точки зрения модели актора, зёрна — это виртуальные акторы. Основной фундаментальный блок в любом приложении Orleans — это . Зерна — это сущности, состоящие из идентичности, поведения и состояния, определяемых пользователем. Рассмотрим следующее визуальное представление зерна:
Идентификаторы зерен — это определяемые пользователем ключи, которые делают зерна всегда доступными для вызова. Зерна могут вызываться другими зернами или любым количеством внешних клиентов. Каждое зерно — это экземпляр класса, реализующего один или несколько следующих интерфейсов:
-
IGrainWithGuidKey: интерфейс маркера для зерен с ключами
Guid
. -
IGrainWithIntegerKey: маркерный интерфейс для зерен с ключами
Int64
. -
IGrainWithStringKey: интерфейс маркера для зерен с ключами
string
. - IGrainWithGuidCompoundKey: интерфейс маркера для зерен с составными ключами.
- IGrainWithIntegerCompoundKey: интерфейс маркера для зерен с составными ключами.
У зерен могут быть переменные или постоянные данные состояния, которые могут храниться в любой системе хранения. Таким образом, акторы неявно разделяют состояния приложения, обеспечивая автоматическую масштабируемость и упрощая восстановление после сбоев. Состояние зерна хранится в памяти во время активности зерна, что приводит к снижению задержки и меньшей нагрузке на хранилища данных.
Создание экземпляров зерна выполняется автоматически по запросу средой выполнения Orleans. Зерна, которые не используются в течение некоторого времени, автоматически удаляются из памяти для освобождения ресурсов. Это возможно благодаря их стабильной идентичности, что позволяет вызывать зерна независимо от того, загружены они в память или нет. Это также обеспечивает прозрачное восстановление после сбоя, так как вызывающий объект не должен знать, на каком сервере в любой момент создается экземпляр grain. Зерна имеют управляемый жизненный цикл: среда выполнения Orleans отвечает за активацию и деактивацию, а также за размещение и нахождение зерен по мере необходимости. Это позволяет разработчику писать код так, как будто все "grains" всегда находятся в оперативной памяти.
Что такое Силосы?
Сило является еще одним примером Orleans примитива. Сило размещает один или несколько зерен. Среда выполнения Orleans — это реализация модели программирования для приложений.
Как правило, группа силосов работает как кластер для масштабируемости и отказоустойчивости. При запуске в качестве кластера силосы координируются друг с другом для распределения работы и обнаружения и восстановления после сбоев. Среда выполнения позволяет зернам, размещенным в кластере, взаимодействовать друг с другом, как если бы они находятся в одном процессе. Чтобы визуализировать связь между кластерами, силосами и зернами, рассмотрим следующую схему:
На предыдущей схеме показана связь между кластерами, силосами и зернами. Вы можете иметь любое количество кластеров, каждый кластер имеет один или несколько силосов, и каждый из них имеет один или несколько зерен.
Помимо основной модели программирования, силосы предоставляют зернам набор служб среды выполнения, таких как таймеры, напоминания (персистентные таймеры), сохранение данных, транзакции, потоки данных и многое другое. Дополнительные сведения см. в разделе Что можно сделать с помощью Orleans?.
Веб-приложения и другие внешние клиенты вызывают grains в кластере с помощью клиентской библиотеки, которая автоматически управляет сетевым взаимодействием. Клиенты также могут размещаться совместно в одном процессе с силосами для простоты.
Что я могу сделать с Orleans?
Orleans — это платформа для создания облачных приложений и должна рассматриваться всякий раз, когда вы создаете приложения .NET, которые в конечном итоге должны масштабироваться. Есть, казалось бы, бесконечные способы использования Orleans, но ниже приведены некоторые из наиболее распространенных способов: приложения для игр, банковские приложения, чат приложения, GPS отслеживание, торговля акциями, корзины покупок, приложения голосования и многое другое. Orleans используется Microsoft в Azure, Xbox, Skype, Halo, PlayFab, Gears of War и многих других внутренних службах. Orleans имеет множество функций, которые упрощают использование для различных приложений.
Упорство
Orleans предоставляет простую модель сохраняемости, которая гарантирует доступность состояния перед обработкой запроса и сохранение ее согласованности. У зерен может быть несколько именованных объектов постоянных данных. Например, для профиля пользователя может существовать один, называемый "профиль", и может существовать другой, называемый "инвентарь", для их инвентаря. Это состояние можно хранить в любой системе хранения.
Во время выполнения грейна состояние хранится в памяти, чтобы запросы на чтение могут выполняться без доступа к хранилищу. При обновлении состояния зерна вызов IStorage.WriteStateAsync гарантирует, что резервное хранилище обновляется для обеспечения надежности и согласованности.
Дополнительные сведения см. в сохраняемости зерна.
Таймеры и напоминания
Напоминания — это устойчивый механизм планирования для зерен. Их можно использовать для обеспечения завершения некоторых действий в будущем, даже если в настоящее время зерно не активируется. Таймеры являются ненадежным аналогом напоминаний и могут использоваться для событий высокой частоты, которые не требуют надежности.
Более подробную информацию см. в разделе Таймеры и напоминания.
Гибкое размещение зерна
При активации зерна в Orleansсреда выполнения решает, на каком сервере (silo) будет активировано это зерно. Это называется размещением зерна.
Процесс размещения в Orleans полностью настраивается. Разработчики могут выбирать из набора встроенных политик размещения, таких как случайный, предпочитаемый для локального и основанный на нагрузке, или можно настроить собственную логику. Это обеспечивает полную гибкость при выборе того, где создаются зерна. Например, зерна можно разместить на сервере рядом с ресурсами, с которыми они должны работать или с другими зернами, с которыми они взаимодействуют.
Дополнительные сведения см. в разделе Размещение зерна.
Версионирование на уровне зерен и разнородные кластеры
Обновление производственных систем таким образом, чтобы безопасно учитывать изменения, может быть сложной задачей, особенно в системах с отслеживанием состояния. Чтобы учесть это, интерфейсы Orleans можно версионировать.
Кластер поддерживает сопоставление, какие имплементации зерна доступны на каких силосах в кластере и их версии. Эта версия информации используется средой выполнения в сочетании с стратегиями размещения для принятия решений о размещении при маршрутизации вызовов к зернам. Кроме того, это решение позволяет безопасно обновлять версии зерна и поддерживает работу разнородных кластеров, где разные силосы могут иметь различные наборы реализаций зерен.
Дополнительные сведения см. в Версионирование Grain.
Работники без сохранения состояния
Бесстатусные рабочие — это особо помеченные зерна, которые не имеют связанного состояния и могут быть активированы в нескольких силосах одновременно. Это позволяет увеличить параллелизм для функций без отслеживания состояния.
Для получения дополнительной информации см. безсостояточные рабочие зерна.
Фильтры вызовов модуля Grain
Логика зернового фильтра вызовов часто используется для многих зерен. Orleans поддерживает фильтры для входящих и исходящих вызовов. Фильтры для авторизации, ведения журнала и телеметрии и обработки ошибок считаются общими.
Контекст запроса
Метаданные и другие сведения можно передать с рядом запросов с помощью контекста запроса . Контекст запроса можно использовать для хранения информации о распределенной трассировке или любых других пользовательских значений.
Распределенные транзакции ACID
Помимо простой модели сохраняемости, описанной выше, зерна могут иметь транзакционное состояние. Несколько зерен могут участвовать в ACID транзакций вместе независимо от того, где их состояние в конечном итоге хранится. Транзакции в Orleans распределены и децентрализованы (нет центрального диспетчера транзакций или координатора транзакций) и имеют сериализуемую изоляцию.
Дополнительные сведения о транзакциях см. в транзакции.
Потоки
Потоки помогают разработчикам обрабатывать ряд элементов данных практически в режиме реального времени. Потоки Orleans управляются ; потоки не нужно создавать или регистрировать перед тем, как зерно или клиент опубликует данные или подпишется на поток. Это позволяет увеличить разделение производителей потоков и потребителей друг от друга и инфраструктуры.
Потоковая обработка надежна: зерна могут хранить контрольные точки (курсоры) и восстанавливаться до хранимой контрольной точки во время активации или в любое последующее время. Потоки поддерживают пакетную доставку сообщений потребителям для повышения эффективности и производительности восстановления.
Потоки поддерживаются службами очередей, такими как Центры событий Azure, Amazon Kinesis и другие.
Произвольное количество потоков может быть мультиплексировано на меньшее количество очередей, а ответственность за обработку этих очередей распределяется равномерно по всему кластеру.
Общие сведения о видео Orleans
Если вас интересует вводное видео о Orleans, посмотрите следующую видеозапись:
Дальнейшие действия
Руководство по . Создание минимального Orleans приложения