Как кэшировать данные между экземплярами оркестровки функций Azure Durable?

В документации указано, что код оркестровки функций Azure Durable должен быть детерминированным за счет повторов. В моем случае у меня есть некоторые данные в хранилище таблиц Azure, которые мне нужно получить в рабочем процессе. Рабочий процесс является рекурсивным, и данные в хранилище таблиц Azure могут изменяться во время выполнения, и вполне нормально иметь устаревшее состояние в течение ~ 1 мин. В обычном коде я бы полагался на кеш памяти для повышения производительности. Но предположим, что в оркестровке его нельзя использовать напрямую, потому что это делает рабочий процесс недетерминированным.

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

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


person megadrofan    schedule 19.06.2020    source источник


Ответы (2)


Я могу вам предложить: используйте распределенный кеш, в частности Redis Cache для Azure.

Я нарисовал для вас изображение:

введите здесь описание изображения

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

Это решение с кешем, как вы просили. Однако обратите внимание, что если вам нужен высокопроизводительный запрос данных, хранилище таблиц Azure - не лучшее решение для работы. Я предлагаю вам использовать либо Azure SQL, либо CosmosDB. Но если вы ищете дешевый вариант, это нормально. Но в этом случае кеш Redis вам не подойдет, потому что это тоже не дешевое решение. Если этот кеш Redis вам не подходит, я предлагаю вам пересмотреть свой алгоритм.

Удачи!

person Mehmet Taha Meral    schedule 19.06.2020

Вы можете хранить данные между оркестровками с помощью функций сущностей.

https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-entities

И сможете до 64 операций в секунду.

https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-perf-and-scale#performance-targets

person decoy    schedule 11.07.2020