Microsoft Orleans

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

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

Модель субъекта

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

Примечание.

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

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

Дополнительные сведения см. в статье Orleans"Виртуальные субъекты " через Microsoft Research. Виртуальный Orleans субъект представлен как зерно.

Что такое объекты grain?

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

Зерно состоит из стабильного удостоверения, поведения и состояния.

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

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

Управляемый жизненный Orleans цикл зерна.

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

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

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

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

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

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

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

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

Что делать с Orleans?

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

Сохраняемость

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

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

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

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

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

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

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

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

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

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

Многообразное управление версиями и разнородные кластеры

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

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

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

Работники без отслеживания состояния

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

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

Фильтры вызовов зерна

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

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

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

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

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

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

Потоки

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

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

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

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

Видео. Введение в Orleans

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

Следующие шаги