Привет! Меня зовут Крис, и в настоящее время я возглавляю небольшую группу инженеров, работающих над функциями Azure. Если вы знакомы с Долговременными функциями Azure, возможно, вы видели меня в Твиттере или GitHub. Если вы никогда не слышали о долговечных функциях, то я рекомендую вам ознакомиться с нашей документацией по шаблонам и концепциям, в которой объясняется, что это такое и почему вам это должно быть небезразлично. Я являюсь первым создателем Durable Functions, поэтому подумал, что было бы интересно начать писать об этом.
Долговечные функции 2.0
В этом году на ежегодной конференции Microsoft Build мы объявили об альфа-версии Durable Functions 2.0. Основной новой функцией, которую мы выделили, были Durable Entities. Устойчивые функции 1.x уже позволяли создавать оркестровки с отслеживанием состояния с использованием модели программирования функций, но в 2.0 мы добавили концепцию сущностей для дальнейшего расширения типов программирования с отслеживанием состояния. проблемы, которые вы можете решить на платформе Функций Azure.
Что такое сущности?
Если вы знакомы с моделью актеров, то сразу поймете, что такое сущности. Однако важно отметить, что Durable Entities - это не другая структура акторов, такая как Orleans, Akka или Service Fabric Actors. Скорее, это бесплатный шаблон разработки, который мы добавили в Durable Functions. Но вместо того, чтобы вдаваться в подробности здесь, я предлагаю посетить нашу страницу документации, которая объясняет все более подробно.
Почему устойчивые сущности?
Устойчивые функции были разработаны, чтобы упростить реализацию определенных шаблонов кодирования в управляемой событиями бессерверной среде. Когда мы выпустили предварительную предварительную версию Durable Functions еще в 2017 году, концепция оркестровок значительно упростила несколько распространенных шаблонов с отслеживанием состояния. Однако было несколько паттернов с отслеживанием состояния, которые волновали пользователей, и которые все еще было сложно построить с помощью оркестровок. Одним из них была совокупность событий.
В конце концов мы связались с некоторыми исследователями из Microsoft Research, которые имели опыт работы в актерских технологиях. После некоторого обсуждения мы решили поработать вместе, чтобы реализовать возможности акторов в Durable Functions, чтобы помочь нам поддерживать больше сценариев с отслеживанием состояния. Наша первая цель состояла в том, чтобы специально нацеливаться на сценарии, для которых оркестровки не подходят.
Модель программирования
В первоначальном выпуске Durable Entities используется модель функционального программирования. Сущность и ее поведение определяются как одна функция, подобная следующей:
Надеюсь, вы видите, что функция сущности способна загружать и сохранять состояние и обрабатывать произвольный набор операций. За кулисами состояние сохраняется в хранилище Azure, поэтому любые прерывания процесса не приводят к потере данных. Также существуют клиентские API, которые позволяют выполнять функции оркестратора, а также обычные функции запускают функции сущностей. Сущности также могут запускаться / запрашиваться через встроенные REST API.
Хотя модель программирования сущностей проста и понятна, мы поняли, что некоторые разработчики хотели создать устойчивые сущности, которые обрабатывают множество различных операций, но не хотят писать длинные операторы switch в коде. Другие, специфичные для .NET структуры акторов, например, поддерживают модели объектно-ориентированного программирования, в которых каждая операция моделируется как методы в классе. В следующем выпуске мы хотим добавить немного синтаксического сахара, который позволит вам написать устойчивую сущность как класс, например:
В этом опыте мы используем отражение для сопоставления операций сущностей с методами вашего класса. Сам класс представляет государство. Когда приходит время сохранить сущность, она сериализуется как JSON и сохраняется в хранилище Azure. Это несложно и, надеюсь, ведет себя так, как вы ожидаете.
Мы будем поддерживать оба метода, поэтому, если вам нравятся классы, вы можете использовать классы. В противном случае вы можете использовать прямые функции.
Многоязычная поддержка
Сегодня Durable Functions поддерживает несколько языков программирования. На момент написания, оркестратор и функции действий могут быть написаны на .NET (C # и F #) и JavaScript. Поддержка таких языков, как Python, Java и PowerShell все еще находится в стадии активного рассмотрения (используйте встроенные ссылки, чтобы проголосовать за то, какой язык следует добавить!). Однако функции Entity в первоначальной версии могут быть написаны только на .NET. Скоро появится поддержка устойчивых сущностей, написанных на JavaScript.
Соображения производительности
Поскольку устойчивые объекты находятся в альфа-версии, было приложено очень мало усилий для оптимизации производительности. Скорее, первоначальные усилия были направлены на определение полезной модели программирования. Производительность и масштабируемость - это то, что мы планируем рассмотреть в следующих выпусках.
Предоставление обратной связи
Durable Functions разрабатывается как программное обеспечение с открытым исходным кодом на GitHub. Вы можете найти наше основное публичное репо здесь. Мы приглашаем пользователей открывать проблемы GitHub, чтобы сообщать об ошибках, запрашивать функции или задавать вопросы. Мы также рекомендуем разработчикам отправлять PR для функций или исправлений ошибок, которые мы хотели бы выпустить.
Альфа-версия долговременных сущностей в первую очередь предназначена для сбора отзывов. Мы планируем выпустить его как функцию GA в ближайшем будущем, так что сейчас самое время предоставить обратную связь, которая поможет повлиять на приоритеты и направление, в котором она будет двигаться. Мы надеемся, что вы попробуете и сообщите нам, что вы хотели бы видеть в будущих обновлениях!