У меня есть функция .NET, которая выполняет сложные вычисления. В зависимости от переданных параметров, функция:
- Займет от нескольких минут до нескольких часов
- Использует 100% одного ядра во время вычислений
- Требуется от 100 МБ до нескольких ГБ памяти.
- Записывает на диск от нескольких МБ до нескольких ГБ данных
- Может выдать исключение, в том числе OutOfMemoryException
Количество данных, подлежащих записи на диск, можно точно предсказать из параметризации функции. Нет простого способа предсказать другие требования к ресурсам из параметризации функции.
Мне нужно предоставить эту функцию через веб-сервис. Эта услуга должна быть:
- Устойчиво и изящно сообщать о любых проблемах при расчете
- Способен обрабатывать параллельные запросы, если имеется достаточно ресурсов для обработки запроса без значительного снижения производительности и для изящного отклонения запроса в противном случае.
Я собираюсь обработать долгосрочную природу, заставив начальный запрос вернуть ресурс состояния, который можно опрашивать для прогресса. После завершения расчета этот ресурс предоставит расположение выходных данных, которые клиент может загрузить (возможно, через FTP).
Я не совсем понимаю, как лучше справляться с другими требованиями. Я рассматриваю своего рода «пул вычислений», который поддерживает экземпляры калькулятора и отслеживает, какие из них используются в настоящее время, но я не выяснил детали.
Кто-нибудь с опытом подобных ситуаций имеет какие-либо предложения? Пока решение может работать на коробке Windows, можно рассмотреть все технологические варианты.